docs(adr): repair 0004 paths, record the RUNNER_BUSY asymmetry, settle 0026 status - #2909
Conversation
…atus ADR 0004 cited `src/snapshot/**`, retired by the capture-kit move (#2385). The ownership and boundary sentences now point at the `snapshot-policy` declaration in scripts/layering/architecture-ownership.ts, and the three policy bullets name the paths that exist. ADR 0005 documented runner occupancy and drain but never recorded the shipped asymmetry: a read-only request waits out `RUNNER_BUSY` and is resent, while a mutating one is attempted once with nothing replayed. Both decisions are keyed on the daemon-side `RUNNER_COMMAND_TRAITS` read-only trait, not on a runner-side classification. The close-and-pooling sentence keeps its scope so it no longer reads as contradicting that policy. ADR 0026 was still `Proposed` after #2758 and #2759 shipped its ownership decision. It is `Accepted`, with the two open #2754 steps named as open work rather than as the decision. Closes #2892
Recording ADR 0026 as Accepted made two unshipped rules read as current: the "every removed source" row and the ejection ledger in Contracts. Both now name #2754 step 5 as the open contract, and the `ScrollArea` passages record the decision #2759 shipped instead of asking for one. ADR 0004's boundary sentence said the gate covers the facet; it covers only the roots `snapshot-policy` declares, so the overlay modules beside that tree are now named as outside it. ADR 0005's keying sentence claimed the runner reports nothing; it is the runner-side classification of the command that plays no part, while the refusal code selects the budget.
|
Reviewed at 79157ed and it looks clean. CI is green, and the docs-only change touches nothing in the failing jobs' path. Not blocking: ADR 0026 (lines 57-60 and 132-135) cites eligibility-parity.test.ts as pinning both the ScrollArea outcome and the label-less under-clip row, but that test only asserts the ScrollArea node is absent and its own comment at eligibility-parity.test.ts:135 says it pins survival only, not the under-clip; you can leave this as is or tighten the citation to "pins survival of each shape and the TS/Swift pair," and maybe follow up with a I did not check #2759's merge status or trace the ScrollArea/content-bearing claims through eligibility-parity.test.ts myself, so I'm taking the ADR's description of that test at face value from the PR body and issue context. |
|
thymikee
left a comment
There was a problem hiding this comment.
Reviewed at 79157ed. Docs-only pass. The capture-kit ownership and gate-scope checks are accurate against the current tree. One added sentence says the opposite of the code, and there are two adjacent docs fixes worth folding into the same ADR cleanup.
| facet: nothing under `src/snapshot/` may import `src/daemon/`. It carries a positive control, | ||
| because a filter that stopped matching would look identical to a boundary being obeyed. | ||
| overlay for one of them covers, live in `packages/capture-kit/src/screenshot-overlay*.ts`. The | ||
| daemon keeps approved artifact and ref assembly only: ranking, projection to screenshot pixels, |
There was a problem hiding this comment.
As written, the colon list reads as an appositive to what the daemon keeps, i.e. the daemon keeps ranking/projection/drawing/PNG IO. That is the inverse of the code and of the preceding sentence. Split the clauses: The daemon keeps approved artifact and ref assembly only. Ranking, projection to screenshot pixels, drawing, and PNG IO do not live here.
Summary
ADR prose only, 4 files.
src/snapshot/**citations retired by refactor(capture-kit): complete ADR 0019 end state — relocate snapshot and recording zones #2385 are gone. The boundary sentence points atsnapshot-policyinscripts/layering/architecture-ownership.tsand names what that gate really covers — the declared snapshot tree, not the overlay modules beside it.RUNNER_BUSYasymmetry: a read-only request waits the drain out and is resent, a mutating one is attempted once with nothing replayed. It is keyed on the daemon-sideRUNNER_COMMAND_TRAITSread-only trait, so fix(ios-runner): give app launch its own policy axis #2899's Swift rename cannot invalidate it. "Refuses every command until it drains" now carries its close-and-pooling scope.Acceptedfor the ownership rule fix(ios): read scroll indicator ownership from the parent edge #2758/test(ios): enforce scroll-eligibility parity and settle ScrollArea for macOS #2759 shipped, two open Make snapshot membership loss attributable: scroll clip authority + ejection dispositions #2754 steps named; the macOSScrollAreatext records what test(ios): enforce scroll-eligibility parity and settle ScrollArea for macOS #2759 decided.Left to a maintainer:
Acceptedis my reading of "status matches reality". To keep 0026Proposeduntil Make snapshot membership loss attributable: scroll clip authority + ejection dispositions #2754 closes:Proposed (2026-09-22). Ownership shipped in #2758/#2759; the ejection-disposition contract remains open in #2754.src/snapshot/ios-snapshot-runtime.ts, and 0003/0008/0012/0018–0020 carry more. Auditing those is separate work.Closes #2892.
Validation
Tested SHA
79157ed94e.pnpm check:affected --run: no local checks selected, 4 docs files ignored, all runnable checks passed.pnpm check:command-docs: 12 passed. Docs-only — no code, tests, fixtures, registries or gates touched, so device/runtime validation does not apply; no checker added. A hostile review pass fixed the gate-scope and unshipped-rule overclaims it found, and proposed editing ADR 0023, declined above.docs/adr/0014(#2899's file) is untouched.