mono-harness

Decision Records

Architecture decisions that are already made, already implemented, and expensive to reverse. Each one exists because the reasoning was otherwise reachable only through a commit message or a session transcript.

An ADR here is a record, not a proposal. It is written after the decision has landed in code, and it states what was decided, why, what was rejected, and what it costs. Nothing in this directory is a plan — plans live in docs/plans/. ADRs are the absorb path for expensive-to-reverse decisions; a completed plan is a run log, not project knowledge.

Index

# Decision Status
0001 Markdown is the source of truth; harness.db is a derived, rebuildable index Superseded by 0006
0002 One resolver owns the “at most one active plan” invariant, returning a Stop contract Superseded by 0006
0003 Durable memory ships as an opt-in CLI surface, unwired from the spine playbooks Superseded by 0006
0004 Recovery position after commit 655c6ac deleted docs/ Accepted
0005 Audit guards authored-document presence, not authored-document truth Superseded by 0006
0006 v0.15 deleted the derived index; live authority is ARCHITECTURE + CONTRACT Accepted
0007 Playbooks and WORKFLOW.md fresh-overwrite; three-way merge narrows to PROJECT.md and the AGENTS.md block Accepted
0008 Ownership is recorded, not inferred; stash restore is a transaction Accepted
0009 One revision selector for every guard; completed plans are validated like active ones Accepted
0010 A local failure ledger is maintainer-owned and optional for consumers Accepted
0011 update drops three-way merge: hash-guarded AGENTS block, write-once PROJECT.md Accepted
0012 Plans have five sections; update migrates one nine-section active plan, Validation bytes unchanged Accepted
0013 The installer follows symlinks at directory components; deferred to its own initiative Accepted

Writing a new one

Number it sequentially, name it NNNN-kebab-case-title.md, and add a row above. Keep the same five headings: Status, Context, Decision, Consequences, Authority. Every structural claim carries a path:line citation that resolves at merge time.