ADR 0301: The improvement coach closes the checkpoint loop
Amendments.
- ADR 0303 — graduation route: the empty-graduation-registry consequence below is superseded — the shipped checkpoint set carries a graduation route.
Status: accepted; builds on the shared question vocabulary in ADR 0295, the observation charter in ADR 0300, the advisory boundary in ADR 0160, and the recommendation evidence bar in ADR 0276.
Context
§Checkpoints guard the flow: a trigger serves a question as a matching change completes. improvement audits the stock: what already exists. After the vocabulary extraction the two shared prose but not a loop — the improvement audit did not know which questions the boundary guards, nothing recommended promoting a recurring finding into a checkpoint, and the conversion rule ("a question becomes a checkpoint exactly when diffs introduce its violations") lived only in decision records, where no test could hold it.
Decision
§The conversion rule is structural vocabulary, and the coach renders the loop from the same sources the gate uses.
- Every canonical question declares how its violations arise:
diff-introducedoraccrued(src/shared/questions.ts). The registry guard forbids an accrued question in the checkpoint membership, and a graduation route to one refuses construction — the stock-versus-flow line is machine-checked, not lore. - A configured checkpoint serving a canonical question verbatim (a built-in reference without a question override) marks that catalog review boundary-guarded. An overridden question is an authored one: the mark would claim protection the boundary does not give, so it never appears.
- Every other configured checkpoint renders as an improvement review row in the
checkpointscategory. Both surfaces project id, question, teach, and trigger summary fromresolveCheckpoints— parity withdiscern checkpointsis by construction, and the resolver takes an injectable seed set so tests prove enrolment before the shipped built-ins land. - Recommendations are evidence-backed owner decisions (
data.recommendations): a frequently-varied checkpoint (the economics reader's shared bar — the same predicate the hygiene detector runs) earns a review of its trigger, question, or mode; a recurring finding class routed throughGRADUATION_ROUTESearns a capture-as-checkpoint decision, suppressed once the question is guarded. No qualifying evidence, no recommendation. Variance prose preserves the declared-unmet conclusion. - With the objective baseline clear, the first recommendation leads
next_actionas thedecidekind. This deliberately narrows the old "findings never touchnext_action" contract: a finding may now back the led decision, while score,ok,--min-score, reviews, and rule verdicts still never read the logbook, and no reader gates a verb. - The
checkpoints.opportunityreview is the placement ladder's teaching home; the ladder itself is shared vocabulary with one prose projection, and the same teach points a mechanically decidable question at the set-the-standard outlaw procedure.
Consequences
§- An owner running
improvementsees which questions have flow protection, which are audit-only, what evidence would justify promoting one, and which checkpoints repeatedly land under variance. - A built-in checkpoint added to the registry enrols in the improvement audit, the marking, and the parity guards with no further wiring; an accrued pairing fails the gate.
- The graduation registry ships empty: no current detector evidences a diff-introduced class honestly, and a forced mapping would breach the evidence bar. The machinery is proven with synthetic routes.
- One more surface reads the full logbook stream (variance evidence in
buildContext), accepted because a bounded tail would censor the rare, cross-effort events the bar needs.
Alternatives considered
§- Classify questions in the memberships instead of the vocabulary. Rejected: how violations arise is a fact about the question, and the precondition for a membership decision — recording it on the member would let two memberships disagree.
- Mark reviews guarded whenever a shipped seed exists for the question. Rejected: a seed no entry enables protects nothing; the mark must mean this project's boundary.
- Fire the review recommendation from the hygiene detector's routed findings. Rejected: the detector is batch-tier by design; rerouting it would widen every inline surface. Sharing the predicate keeps one bar with two presentations.
- Let a graduation recommendation name an unshipped built-in id. Rejected: the coach would be recommending content that does not exist; routes bind to canonical questions instead.