Skip to content

ADR-0001 — Split durable decisions from ephemeral build evidence

Context and Problem Statement

This project builds by studying reference implementations (research_repos/, read-only and untracked) and porting their mechanisms. For its first milestones, docs/plan.md carried both the decisions and the porting evidence (repo/path:line citations frozen into a file meant to be permanent) plus milestone exit-gate measurements appended as dated blockquotes.

The failure mode was already visible, and the same one the factory repo measured before adopting this split (its ADR-0001): citations rot underneath the file, state recorded by accretion goes stale in place (the M4 User-Agent correction sat beside the claim it corrected), and the decisions are unfindable inside build instructions.

Decision Drivers

  • A decision must stay readable after the code that motivated it changed.
  • Build evidence is worth a great deal on the day it is used and nearly nothing afterwards; keeping it costs accuracy, because nobody re-verifies it.
  • Every execution session re-reads this documentation, so its size is a running cost, not a one-time one.

Considered Options

  • One growing plan document
  • Spec-anchored docs beside the code
  • Split by lifetime — durable decisions, ephemeral evidence

Decision Outcome

Chosen option: "Split by lifetime — durable decisions, ephemeral evidence", because each artifact is discarded or kept on its own merits.

Documents are separated by lifetime, not by topic.

Durable: docs/adr/ and docs/architecture.md. These hold decisions and non-trivial knowledge. They cite real sources of truth: an endpoint's own contract, an upstream issue (anthropics/claude-code#31021), a published spec, a file in src/. They never cite research_repos/. The test: a durable document must still be true and useful if every reference implementation vanished.

Ephemeral: maintainer/research/ and maintainer/slices/. Dense with reference citations, file paths, and measured comparisons. Deleted when their milestone or phase ships.

Ledger: maintainer/backlog.md. Edited in place, one line per row; gate results go in commit bodies.

Location follows publishability: durable content lives in docs/ (everything a public reader may see); ephemeral machinery lives in maintainer/ (backlog, slice PRDs, research evidence). docs/ never holds process files; maintainer/ never holds publishable docs.

When a milestone ships, its durable residue is an ADR (if a non-trivial decision was made) and code comments that state their why without needing a link.

Consequences

Reference implementations are construction scaffolding; their absence from the finished docs is the point, not an omission. Corrections are made by editing; git holds the diff, so a document never carries its own revision history inline.

The cost accepted: evidence for shipped work leaves the working tree. Recovering why a mechanism looks the way it does means reading the ADR; if the ADR does not answer, the ADR was written badly. That is the failure mode to watch.

Code comments follow the same durable rule: they state a fact that stands alone, may cite an ADR or a real source of truth, and must not cite a planning doc. research_repos/ mentions left over from the build phase get the same treatment when found.

Pros and Cons of the Options

Option Pro Con
One growing plan document Nothing to route between What we had: rot, accretion, unfindable decisions
Spec-anchored docs beside the code Specs stay true Doubles the maintenance surface; the evidence still rots
Split by lifetime — durable decisions, ephemeral evidence Each artifact is discarded or kept on its own merits Requires the discipline to actually delete