docs: decide the park path stays prose in ADR 0069 - #410
Conversation
Issue #381 asks whether $quest's park path gains a WORK:TRAJECTORY composer. ADR 0069 extends ADR 0066 and answers no, re-arguing anatomy rule 2 against issue #390's observed-failure evidence rather than the four holds 0066 stood on: the defect #390 measures is hand composition as a class, and a park composer closes it on one annotation surface while leaving the four others, including the one #390 records a consequence for. Closes #381
Two independent design passes (operator-cold-resume, anatomy-rules) found four blocking factual defects across the set. The rule-2 re-argument claimed a park composer covers one of five surfaces #390 counted. #390 counts five hand-written blocks on one issue, not five annotation types, and its WORK:TRAJECTORY was a hand-off — a park composer would have corrected none of them. It also records those hand-off blocks as hand-written after publish-handoff shipped, which the record now weighs: a composer that exists does not stop hand composition. Question 2 rested on 'the handshake bytes are not in the executable', a test that does not discriminate between the shapes; the elimination moves onto question 1's verified thin-remainder ground. Question 4 claimed a partial state prose does not have — skills/quest/SKILL.md shows prose has exactly it. Consequences now separate the ordinary park, which the status: label bounds, from the interrupted park, which it does not. Adds the park-side validator to Considered & rejected, states the missing forward pointer on 0066, and ties the residual's closure to which of #390's two fix directions lands.
The scope audit found the record described a conditional reopening trigger with no confirmed owner, the shape its own rejected-alternatives section condemns. Names #380 as the residual's record until #390 lands, and resolves which reading of #390 governs: its Fix directions offer either or both, its Acceptance requires both including write-time detection, so the trigger fires only if #390 ships short of its own acceptance.
The escalated review loop refuted two load-bearing grounds. The paragraph calling itself 'the second fact that decides it' attributed to issue #390 a statement #390 does not contain: it never mentions publish-handoff and never dates the audited blocks relative to it. Two independent passes and a direct read of the issue body agree. Deleted rather than re-grounded; the rule-2 argument stands without it. Question 1 claimed a shared unit would share 'two constants and a readback'. publish-handoff's own line count refutes that - resolve_destination and resolve_head are 132 of 646 lines, and the notes validation, ADR 0068's bounded network calls, the public-safety scan and the stored-body assertions are all park-applicable. Question 1 now says the shared unit is the right composer shape, which concentrates the decision on rule 2 where it belongs. Question 2 assessed only the shapes the record rejects. It now states plainly that prose is the one shape not satisfying #381's by-construction requirement, and Consequences records that gap as the strongest argument against the verdict. Question 3 loses the 'markers and a readback' framing that the question 1 correction contradicted, and the Status-restriction consequence is attributed to the ADR convention rather than to a gate rule check-records.sh does not impose.
…cision-381 # Conflicts: # .claude-plugin/plugin.json
Operator-authorized round 6, scoped to four content items. The rule-2 re-argument conceded: a park composer would clear the performed inconsistently limb, and the retrospective-coverage test that denied it is deleted rather than reworded - a proposed script is not measured by how many past instances it would have caught. The decision now rests on CLAUDE.md's Cut before adding ladder plus issue #390's ownership of quest-log's shared annotation recipe, which reaches every hand-written type at once. The verdict is unchanged: the park path stays prose. The sibling-executable bullet is labelled verified:, so its park-applicable line count now shows the subtraction - 646 minus 132 is 514, replacing an unsourced approximation. The ordinary-park residual was understated in both the record and the spec's failure model. quest-log's latest-complete recipe selects on both markers and takes last, so a sentinel-less park note is filtered out and an earlier complete block is returned as current. That is a wrong answer, not an absent one. Question 1 restates ADR 0066's --kind rejection on its actual reachability ground rather than as call-site confusion, and explains why separate entry points meet that ground instead of dodging it; the 0066's-judgments paragraph is corrected to match. Also drops a Context sentence claiming the decision turns on the class distinction, which the reframe makes false.
The confirming pass found the shared-composition-unit bullet still said the shape was rejected because rule 2 does not warrant a composer, which the Decision now contradicts by conceding rule 2 is met. It was left as unchanged context when the Decision was rewritten. The bullet now points at the ground the Decision actually states. The sibling-executable bullet's 514 is arithmetically right but was glossed as park-applicable surface; the compose step and its handshake assertions sit inside it and question 1 excludes them. Says so.
The confirming pass found the decisive ground cited CLAUDE.md's 'Cut before adding', a section this repository's CLAUDE.md does not contain - rg over the tree matched only the record's own line. The phrase came from a private global instruction file, so a public append-only record was about to carry an unresolvable citation pointing at private configuration. Cites anatomy rule 1 instead, quoted from CLAUDE.md:13: supporting files are the exception and must be argued for. A park composer is such a file and the argument fails because a change to the shared hand-write path reaches every annotation type while a park-only composer reaches one. Substantive reasoning unchanged; only the cited authority moves. Also reconciles the consequence that called rules 1 through 3 untouched, which no longer holds now that rule 1 is the deciding ground.
|
verdict: needs-attention Forge whole-branch reviewReview exit payloadsDeferrals: none. No Rejected with evidence: none. Follow-up candidates
Remaining-findings summary from the budget stop The Outstanding notes at the exit
Review arms that ran: two design-artifact passes ( |
Adds ADR 0069, which decides whether
$quest's park path gains aWORK:TRAJECTORYcomposer.Verdict: the park path stays prose. No composer ships — not a sibling executable, not a shared
composition unit inside
publish-handoff. Issue #381 names that outcome as a legitimate result, andthis is it.
What the record decides
It answers #381's four questions and, notably, concedes anatomy rule 2 rather than arguing it.
Issue #390's audit — all five hand-written blocks on one issue missing the closing sentinel, while
the one block a program emitted carried it — establishes that a model cannot reliably emit the
sentinel. A park composer would clear rule 2's performed inconsistently limb.
The decision rests on anatomy rule 1 instead: supporting files are the exception and must be
argued for, and that argument fails on its merits. Every hand-composed block already goes through
quest-log's annotation recipe, so a check placed there reaches the park path and every other
hand-written type at once. Issue #390 owns that recipe. A park composer would add an executable to
close on one call site a defect a shared-instruction change closes on all of them.
On the four questions: 0066's
--kindrejection rests on reachability and does not forecloseseparate entry points (Q1); the absent-handshake requirement does not discriminate between composer
shapes, and prose is the one shape that does not satisfy it (Q2); the branch-state refusal would
have to be relaxed, which is a change to make if a composer is built, not a reason to build one
(Q3); the caller keeps the
status:swap (Q4).What it records against itself
against this verdict.
recipe filters a sentinel-less note out and returns an earlier complete block as current — a
wrong answer, not an absent one. The interrupted park is unbounded.
Scope
One new record, one light spec, and the mandatory
versionbump to5.11.2. No index row —docs/adr/README.mddeliberately carries no table. ADR 0066 is byte-unchanged.#383and#385close as not planned by their own terms on this verdict, and#380stays open asthe residual's record until
#390lands. Both are the campaign orchestrator's actions, not thisPR's.
Closes #381
Review exit payloads
Deferrals: none. No
deferred-trackeddisposition was taken in any review run on this branch,and no
docs/debt/record was written.Rejected with evidence: none.
Follow-up candidates
.claude-plugin/plugin.jsonRemaining-findings summary from the budget stop
The
$trial-looprun recorded inexit: blocked-at-budgetstopped with one unresolved blockingfinding: the rule-2 re-argument conceded that the defect tracks hand composition rather than any one
annotation type — which clears rule 2 for a park composer — and then denied the bar with a
retrospective-coverage test rule 2 does not state. It was neither rejectable nor deferrable, being
the record's central argument. The operator authorized a scoped continuation; the retrospective
test was deleted and the decision re-grounded on anatomy rule 1. A later confirming pass found the
replacement ground cited a
CLAUDE.mdsection absent from this repository, which was corrected toanatomy rule 1 quoted from
CLAUDE.md.Outstanding notes at the exit
Recorded in the record's Consequences as the strongest argument against its own verdict.
with the substantive reasoning unchanged, quoted verbatim from the repository's
CLAUDE.mdandchecked against source on both sides, with the record, public-safety and version gates re-run
over it and a sweep for sibling sentences leaning on the withdrawn ground.
note. Cutting stopped there deliberately: further reduction would have removed load-bearing text
to satisfy a number.
Review arms that ran: two design-artifact passes (
operator-cold-resume,anatomy-rules); onerouted
single-passbranch review (downstream-reader) that escalated on three in-surface blockingfindings; a
$trial-looprun of two iterations (anatomy-rules) that stopped at its budget; and oneconfirming pass after the authorized continuation. Cumulative: 6 rounds under one charter. A
$detect-evilpass did not run — the diff trips no security trigger.