Decision records
New decisions are recorded as topic-keyed living decision records at
docs/decisions/<topic-slug>.md, one file per decision subject. Numbered ADRs
(docs/adr/NNNN-*.md) are frozen history and are never written for new
decisions.
Decision
- Topic files are keyed by decision subject slugs drawn from the CONTEXT.md domain vocabulary; the vocabulary is the topic namespace. This removes ADR numbering collisions and makes topic identity downstream of ubiquitous language.
- Supersession is an edit to the topic file. Contradicting appendices are
impossible by construction; the file always holds the current answer plus lean
rationale.
superseded_by/merged_intotombstones cover the rarer case of a subject moving or merging to another slug. - The context that led to a decision is linked to archived session artifacts,
PRs, and frozen ADRs via
evidence[], never inlined. This fixes ADR bloat; promotion-as-retirement provides the archive. - CONTEXT.md is the only external compatibility surface (grill-with-docs interop). The numbered-ADR file format is not adopted for new decisions — the behavior is inherited, not the failure mode.
- Existing ADRs are frozen and indexed, never converted; history stays immutable provenance. (Freeze tooling is issue #314.)
- Frontmatter is YAML validated by
schemas/decision-record.schema.json(status,subject,decided,evidence[], and the relationship fields), enabling machine health checks. - A generated
docs/decisions/index.md(slug + one-liner) is referenced from CONTEXT.md so retrieval-at-write matching has a cheap, always-loaded index.
Rationale
Numbered ADRs accumulate contradictions (new decisions append rather than supersede), bloat (derivation context inlined with the decision), and numbering collisions at multi-contributor scale — observed across ~6 portfolio repos and owner-ratified as a redesign on 2026-07-03. Topic-keyed living records make the current answer to any settled question findable in one place, make supersession an edit rather than a contradicting appendix, and let multiple contributors work without colliding on sequence numbers.
flow-agents is the first consumer: this record self-hosts the decision, and the
full normative contract lives at
context/contracts/decision-registry-contract.md.