Skip to content

Doc Status Conventions

Status: Active Last reviewed: 2026-07-20

Defines the doc-status enum, the two supported ways to declare it, and the advisory lint check that reports on coverage. This is a metadata convention, not a mass-edit mandate — existing docs are not rewritten to comply; new/touched docs should follow it going forward.

The status enum

A doc's status must be exactly one of:

StatusMeaning
ActiveCurrent guidance. Trust it for today's implementation.
DraftIn progress / not yet finalized. Direction only, expect changes.
AcceptedA decision has been adopted and is binding (e.g. an accepted ADR).
ReferenceEvergreen convention / guide / spec — current and trustworthy, but not itself driving the active roadmap.
SupersededReplaced by a newer doc. Kept for history; don't implement from it.
ArchivedRetired. Historical record only.
LivingAn ongoing tracker/log that's continuously updated rather than a point-in-time deliverable (distinct from Active in that it never "completes").

docs/adr/*.md files follow their own established status vocabulary (Proposed / Accepted / Superseded by NNNN / Deprecated — see docs/adr/README.md) rather than this enum. That's expected and not a lint defect.

How to declare a status

Pick one form — both are detected by the lint check:

1. YAML frontmatter (top of file):

yaml
---
status: Active
---

2. Top-of-file bold line (the existing convention across most current docs):

markdown
**Status:** Active

The value should be the bare enum word, with no trailing narrative — **Status:** Active, not **Status:** Active — living tracker, update in place as fixes ship. A bare value is what the lint check counts as valid; descriptive context belongs in the paragraph below the status line, not appended to it.

Lint check

yarn docs:lint-status (scripts/lint-doc-status.mjs) scans docs/**/*.md — excluding .vitepress/, public/, node_modules/, any *TEMPLATE.md, SKILL.md, and README.md — and reports:

  • total files scanned
  • files with a valid (in-enum) status
  • files missing a status entirely
  • files with a status marker whose value isn't one of the six enum words

This check is currently advisory. It always exits 0 and is not wired into yarn docs:check or any pre-push/CI gate. Many existing docs will show up as missing or out-of-enum — most current **Status:** lines carry narrative text (e.g. "Active — living tracker…") rather than a bare enum value, and plenty of docs predate any status metadata at all. That's expected; this convention does not require rewriting them. Bring a doc's status line into the enum the next time you touch that doc for substantive reasons, not as a standalone cleanup pass.

Markdown remains the source of truth. Run yarn docs:check before handoff.