ADR-072: The status note is its own field
Status Active · Filed 2026-09-03 · Issue #141
Context
ADR-003 closed the status vocabulary to five words and allowed each “an optional em-dash note”. The note was useful from the first day — every superseded decision in this record names its successor in one — and it was never the same kind of thing as the word beside it.
The word is data: checked against the closed set, narrowed per scheme by
statuses.yaml (ADR-056), the pivot of every report. The
note is prose: rendered in the index column and rebased there for links,
rendered on the site’s record line, hand-linked in this record
(by [ADR-035](ADR-035.md)) so the link survives, and free to cite
whatever the author meant. ADR-051’s rule for which
frontmatter keys are prose is the ones the generator renders, and the
note qualified on that rule from the moment the index rendered it. It was
kept out of the prose keys only because it shared a scalar with a value
that had to stay data.
The cost was paid in code. Six places split the word off the note with
three spellings of one regex — the status report, the pending report,
three in the vocabulary module, and the first draft of the typed edges
(ADR-071). Every one of them was a place the
field’s two types were being taken apart by hand because the file had
put them together. And a code in the note cited nothing: Deferred — parked by WDR-015 in a downstream record named a document the scanner
never saw, because the scanner reads prose keys and this was not one.
Decision
The note is its own field.
status: Superseded
superseded_by: FX-ADR-032
status_note: the capital never burned after allstatus: is one word from the closed vocabulary and nothing else.
superseded_by: is the successor, a reference field every scheme has
(ADR-071): structure, checked and resolved.
status_note: is prose — a prose key beside summary: and origin:
(ADR-051): scanned for bare references, linked by
luria link --fix, checked by the lint, and a citation wherever citations
count. The display form, Superseded — by …, is composed from the two
wherever a reader sees a status; nothing changes on a page.
The combined form is read, reported, and repaired. A file still
carrying status: 'Superseded — by X' parses as before, so nothing
breaks between the field arriving and the file being moved. The lint
reports it — status: carries a note — luria repair moves it to
status_note: — and luria repair moves it, the way it fills created:
from a journal entry’s path (ADR-031): the file already
states both facts, in one scalar, and the tree is made to say so in two.
One function writes the field, and the migration’s tombstone goes through
it.
This amends ADR-003, whose choice — a closed vocabulary
in frontmatter, enforced by lint — stands whole. What moves is where the
qualifier lives; that decision carries a history: entry saying so.
Alternatives considered
- Keep the scalar; parse it everywhere. What the first cut of the
typed-edges work did: one
Status(value, note)parse replacing the six splits, storage untouched. It removes the duplication and keeps the lie: a field declared as a value from a closed vocabulary that also holds prose is not that type, and every new consumer has to learn the parse. The parse survives as the reader of the old form; it stops being the reader of the canonical one. - The successor in the note, the field left out. What this decision
first proposed, with the typed-edges work inferring the successor from
a
by CODEnote. Reversed on review and decided in ADR-071: the successor is a relation, and a relation is written as structure — a field the tool checks — not as a sentence the tool recognises. The note is prose for what the field cannot say. - Scan
status:as prose without splitting it. ADR-051 rejected scanning fields that are parsed by value, and the rejection holds: a rewrite that links a code insidestatus:can break the value the lint reads. Splitting is what makes the prose safe to touch. - Leave the old form forever, unreported. Two spellings of one thing, with the lint indifferent between them — the drift DP-3 names, invited in writing. The report costs a line; the repair is automatic.
Consequences
Four decisions in this record and two documents in an example moved on
the first luria index. Downstream records move the same way, and the
finding tells them so; the old form keeps reading until they do.
A code in a status note is now a citation: Deferred — parked by WDR-015
links, counts, and reports when WDR-015 retires — through the ordinary
scanner, with no relation invented for it. The successor is not a
citation but a field, and the repair drops the note that used to carry it
when the note said only the code.
The ADR template, the scaffold’s, the principle templates and the docs
say the three-field form. luria migrate --strategy supersede writes the
field. The lint’s status pattern is five bare words again.