Repository navigation
docs(adr): ADR 0004 cites retired paths, ADR 0005 omits the RUNNER_BUSY asymmetry, ADR 0026 status undecided #2892
Description
Purpose
Three ADRs describe code that no longer exists, or omit behavior the code now has. A maintainer or agent reading them as the decision of record is led to a retired path or a retired policy. This issue is prose maintenance, not a gate request.
Citations are at f47e9c9ef4.
Findings
- ADR 0004 cites superseded paths.
docs/adr/0004-ios-snapshot-backend-strategy.mdnamessrc/snapshot/**in five places. Those modules moved topackages/capture-kit/src/snapshot/**in refactor(capture-kit): complete ADR 0019 end state — relocate snapshot and recording zones #2385 (1f9d940bff), and the screenshot-overlay directory is now flatpackages/capture-kit/src/screenshot-overlay*.ts. The paths are not merely stale, they are reconstructible-as-wrong: following them lands on a directory that no longer exists. - ADR 0005 omits a shipped asymmetry. It documents runner occupancy and drain well (
docs/adr/0005-ios-runner-interaction-lifecycle.md:60-66), but never records that a read-only request waits outRUNNER_BUSYand is resent (packages/platform-apple/src/runner/__tests__/runner-command-busy-resend.test.ts:75) while a mutating command meetsRUNNER_BUSYonce with no status probe and no resend (:226). Its sentence at:70, "refuses every command until it drains", is scoped to close and pooling, but reads as a direct contradiction to anyone who arrives from the resend code. That policy is keyed on the TSreadOnlyfact named in fix(ios-runner): app-launch policy is decided by the retry flag; querySelector launches a stopped app #2890, so the omission hides a load-bearing classification from the people editing it. - ADR 0026 is still
Proposed. Its step 2 (typed ejection dispositions) sits behind Snapshot membership step 5: inventory suppressNode ejections and give them typed dispositions #2754 while steps 1, 3 and 4 landed. The status is a decision to make, not a defect to fix; record whichever it is.
Required behavior
- Replace restated implementation paths with links to the declaration site.
AGENTS.mdalready mandates this ("Link to executable registries instead of duplicating their rules"); ADR prose is the remaining offender. - ADR 0005 gains a short paragraph on the read-only/mutating
RUNNER_BUSYasymmetry, naming the fact it is keyed on, and the existing:70sentence gets its close-and-pooling scope made explicit. - ADR 0026 status is set explicitly, with the reason, rather than left ambiguous between accepted and deferred.
Explicitly not requested
No new checker that fails an ADR citing a nonexistent path. Such a gate cannot detect the two failures that actually cost us time — omitted behavior and undecided status — and a low-value gate erodes trust in the ones that matter. check:command-docs is the only docs gate today; leave it that way. Prefer a migration-time reference search when a module moves.
Completion conditions
- No ADR cites a path that does not exist at the merge commit.
- ADR 0005 describes the shipped
RUNNER_BUSYasymmetry and its keying fact. - ADR 0026 status matches reality, with a one-line reason.
- Docs-only: no runtime validation applies;
pnpm check:command-docsand any docs lint selected bypnpm check:affected --runpass.
Dependencies
Found by the #2803 audit. Coordinate the ADR 0005 wording with #2890, which changes the classification that asymmetry is keyed on.
Activity
docs(adr): repair 0004 paths, record the RUNNER_BUSY asymmetry, settl…