Uh oh!
There was an error while loading. Please reload this page.
docs(rest): qualify the three residual ADR-0112 citations to the code axis - #12700
Merged
Merged
Conversation
… axis PR #12453 qualified nine sites; three carried the unqualified attribution still — one because it was fenced by an in-flight PR at the time, two because they sat outside that card's declared file surface. Each now echoes the form `error-response.ts`'s docblock states in full: ADR-0112 D4 governs the semantic-CODE channel, the producer names the condition on the CODE axis, and the ADR rules no HTTP status for an undeclared throw. Comment text only — the emitted JS is byte-identical under a `removeComments` transpile. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UjujZN219uFzBhSYfMykCd
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 13 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-litant
marked this pull request as ready for review
August 27, 2026 11:05
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#12454
PR #12453 qualified nine ADR-0112 citation sites to the code axis. Three still carried the
unqualified attribution — one was fenced by an in-flight PR when it was measured, two sat
outside that card's declared file surface. This is the other half, and all three land together.
Each site now echoes the form
error-response.ts'sresolveThrownHttpErrordocblock statesonce in full: ADR-0112 D4 governs the semantic-CODE channel — the producer names the
condition on the CODE axis, and the ADR rules no HTTP status for an undeclared throw — with a
pointer to that docblock for why the phrase is that file's own prose and not an ADR quotation.
No fourth wording is introduced. Amending ADR-0112 itself stays out of scope (governed
docs/adr/**maintainer path), and the qualification holds under either outcome of that openquestion.
The census: the wrap-tolerant grep is a candidate pool, not a worklist
Measured on my own ref —
origin/main@2805e5299, branch headd2f8ef944. No line numberswere reused from the card or from triage; both sets had drifted.
rest-hook-refusal-message-parity.test.ts:630, the canonical form from #12280package-door-declared-code.test.ts:337describes a producer shape;service-analytics/.../objectql-strategy.ts:693uses "names" in an unrelated sense ("a key no older producer names")The three sites changed, at the ref above:
packages/rest/src/rest-sandbox-declared-status.test.ts:130packages/rest/src/rest-server.ts:9651packages/rest/src/rest.test.ts:2486For contrast at the same ref, the contiguous form the card marks as under-counting returns 6
lines in 6 files — it sees neither
rest-sandbox-declared-status.test.tsnorrest.test.ts,both of which wrap the phrase across a comment line boundary.
How the verdicts are recomputable
Each pool hit is judged over a +/-8 line window: no
ADR-0112in the window ⇒ NOT A CITATION;otherwise a window naming the axis (
CODE axis,semantic-CODE channel,own prose,rules no HTTP status,ruled the status axis) ⇒ QUALIFIED; else UNQUALIFIED. The classifieris calibrated in both directions: forcing the qualifier marker absent drives all 12
citations to UNQUALIFIED, forcing it always-present drives all 12 to QUALIFIED — so neither
verdict is an artifact of a dead branch.
After the fix, the same grep and the same classifier: pool still 14 hits / 13 files
(nothing added, nothing deleted), NOT A CITATION still 2, UNQUALIFIED 0, QUALIFIED 12.
Positive control for that zero: with the marker forced absent the same post-fix run still
reports 12 UNQUALIFIED, so the branch that would report a miss is still live.
The pool is complete, and the out-of-scope idiom never enters it
A fully multiline regex (
producer[\s*/#]*names[\s*/#]*the[\s*/#]*condition, slurped per file,so the phrase is caught under any wrapping) hits 11 files, every one already inside the
13-file pool, and no file outside it. Positive control: the same harness with a term known
present (
ADR-0112) returns 509 files.The
"ADR-0112 envelope (code + status)"idiom is explicitly a different usage and was notswept: it measures 314 lines across 223 files, and its intersection with the pool is 0 lines
— it is disjoint from the pool's regex, not merely excluded by judgement. Positive control for
that zero: pool intersected with itself returns 14.
Comment-only, proven
removeCommentstranspile (typescript 6.0.3) of each file before and after, sha256 over theemitted JS:
Instrument calibrated per file, both directions: appending a comment token leaves the hash
unmoved; appending
const __calibration_token = 1;moves it. All three edits are//commenttext — none is a string literal or a test title.
Verification
19 gate families run at
d2f8ef944, each exit code captured before any pipe, all green:check:nul-bytes,check-comment-mask-adoption.mjs,check:route-envelope,check:dispatcher-error-vocabulary,check:engine-double-contract,check:where-matcher,check:test-source-alias,check:cross-package-test-inputs,check:objectql-double-limit,check:authz-resolver,check:page-declaration-shape,check:published-files,check:slot-lookup,check:type-source-resolution,check:query-options-erasure,check:type-check-coverage,check-ci-filter-parity.mjs,check-plugin-teardown-shape.mjs,docs-audit/check-affected-docs.mjs. Family list derived withnode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, not recalled. Everyheavy run went through
scripts/pm/os-verify-lock.sh.Declared narrowing — the suite and the repo-wide lint.
packages/rest's suite andcheck:type-check-debtneed a 25-package build closure, and on this diff they can onlyre-measure
origin/main: the emitted JS is byte-identical (above), and the diff adds or removes0 compiler/lint directive comments (
@ts-expect-error,@ts-ignore,@ts-nocheck,triple-slash
referencedirectives,eslint-disable,prettier-ignore, …) — positivecontrols: the same regex matches 136 files in the tree and matches a synthetic planted line.
pnpm lint(eslint . --no-inline-config) was narrowed to the three files: eslint's own configlinted all 3 (none ignored), 0 errors / 0 warnings, and this repo's single
eslint.config.mjsnever enables type-aware linting for any file (its own comment at line 328 records the
measurement), so a comment-only diff cannot move the verdict of a file it does not touch. CI
runs both farms in full regardless.
No changeset: comment text only, nothing released —
skip-changesetapplies.Generated by Claude Code