docs(qa): re-anchor the dead tracker citations in packages/qa to the commits that decided them - #20723
Conversation
…commits that decided them Twelve comment sites under packages/qa/*/src cited six tracker numbers that now answer 404. Each now cites the commit in this repository's history that decided what the line describes (ADR-0122 stays beside its phase-2 commit), and keeps saying in its own words what it decided. Comment lines only; every touched file keeps its line count. Claude-Session: https://claude.ai/code/session_local_1d2a197c-c20e-4e90-9be8-413d4d432289 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 3 package(s): 2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin a53e99418bb29d604cfe438b39fd6754d78dfd9a && git checkout a53e99418bb29d604cfe438b39fd6754d78dfd9a
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 3711e0b763d4bb597a52cb08b04950cace6821b1 06b8fbc2d30099f06da76052977d56920874da49 && git checkout -B drift-repro 3711e0b763d4bb597a52cb08b04950cace6821b1 && git merge --no-ff 06b8fbc2d30099f06da76052977d56920874da49
node scripts/docs-audit/affected-docs.mjs --json 3711e0b763d4bb597a52cb08b04950cace6821b1
|
Part of #20594
Clause-②: no
What changed
This is stage 8 of the
domain:clilane of the dead-citation sweep:packages/qa.packages/qais a directory of five private workspace packages, not one package, so the surface ispackages/qa/*/src/**. Every comment site there that cited a tracker number answering 404 now cites, in ruling C+D's form C (comment 5749154545 on #19123), the commit in this repository's history that decided what the line describes. Each line still says in its own words what that commit decided. PR #20533 is the method, and stages 1 to 7 of this card (PR #20624, PR #20632, PR #20656, PR #20673, PR #20689, PR #20703, PR #20713) are the precedents. The card stays open for the lane's remaining packages, so this PR saysPart of.That is 12 sites on 12 lines in 5 files, covering 6 numbers, rewritten to 6 distinct commits:
downstream-contract/src/additional-domains.fixtures.ts(2),http-conformance/src/adapter.ts(4) andvitest-filter-preflight/src/index.ts(2), 5 numbers;http-conformance/src/(the census leaves*.test.tsout; stages 1 to 7 took test comments too).Only comments changed: 12 lines out, 12 in, and every touched file keeps its line count, so no line citation into these files moves. No citation number is added. Over the 12 line pairs, added-minus-removed numbers is empty, and no PR number stands newly on any line. The two numbers still on changed lines (
#17978,#14554) were already on them, and both answer 200.Two numbers have an ADR beside them, and both ADRs stay.
#6083's line already cited ADR-0122 phase 2. The ADR's own amendment records phase 2, so the line now reads "ADR-0122 phase 2, commit 53068c1", the same pair spec stage 1 wrote incontracts/data-engine.ts.#10485's line cites ADR-0049, the enforce-or-remove principle it was retired under. No ADR records the theme retirement itself, so the commit is the anchor, and the ADR stays beside it, as in the landed stages.None of the other four numbers appears in
docs/adr/orscripts/adr-anchors/. The grep reads 0 hits for them. The control,#5551, reads 1 hit in ADR-0122.No changeset, and
skip-changeset. None of the three touched packages publishes anything (see Changeset below).Census:
packages/qa, before and afterInstrument. The gate's own
node scripts/check-issue-citations.mjs --census --json, read-only and unchanged, run underwith-fleet.sh --readfor the token. The count is itsallocated-but-absentfindings underpackages/qa/. Both runs enumerated the whole board.allocated-but-absentpackages/qasites679f95ec5c, run 2026-09-29T21:05:44Z to 21:09:44Z30aae6a3e6, run 21:18:38Z to 21:22:42ZThe whole-repo drop of 8 is exactly these sites. A site-by-site diff of the two JSON outputs has 8 findings gone, all under
packages/qa/*/src, and none added. The other three tallies are equal in both runs:resolves32,982,resolves-as-pull-request1,984 andcross-repo-unjudged995.packages/qa/*/srcis byte-identical at30aae6a3e6and at the head; the two later commits are merges oforigin/mainthat touch nothing inpackages/qa.Supplementary scan (test files and everything outside
src/included). The gate's exportedextractCitationsandclassifyCitationran over all 221 tracked files underpackages/qa(CHANGELOG.mdexcluded), with the board from the gate's ownprobeBoard. The totals are 1,678 citations and 139 dead before, and 1,666 and 127 after.src/, before: src comments 40 / 8 dead, test comments 42 / 4, src strings 1 / 0, test strings 9 / 0.src/, after: src comments 32 / 0, test comments 38 / 0, strings unchanged. Nothing dead is left under anysrc/, strings included, so there is no form-D residue in this stage's surface.src/**(see Acceptance notes).Per-site table
git blameat the base ties each line to the commit that wrote it. Each anchor was read in its message, changeset or diff, not only its subject. Where the pull request that landed an anchor still answers, its body's first line names the dead number, and that is noted.#6083downstream-contract/src/additional-domains.fixtures.ts:1153068c130, ADR-0122 phase 2: the bare type name becomes the AUTHOR state (z.input) and theXInputsynonyms retire. The same commit moved these frozen fixtures' annotations onto the bare names without touching a literal, which is what the paragraph says. The line blames to it, and its subject carries the number. The PR that landed it answers 404, and spec stage 1 gave the number this anchor.#10485downstream-contract/src/additional-domains.fixtures.ts:13335ad101bc: retires thethemescarrier key andThemeSchemawhole, under ADR-0049, and dropsDcThemefrom these fixtures. The line blames to it, and its subject carries the number. The spec, rest, runtime and cli stages gave the number this anchor.#6143http-conformance/src/adapter.ts:32,:189,:257,:346;http-conformance/src/fallback-seam.conformance.test.ts:4,:2712298c7d6, which does two things:NodeHttpServerimplements the optionalsetFallbackHandlerout of its own router, as a field consulted in the route-miss branch, with the 405 answer extracted for its second call site; and the cross-adapter suite asserts the contract's four guarantees on both adapters. All six lines blame to it. PR #6851, which landed it, names #6143 on its first line.#6307http-conformance/src/query-multiplicity.conformance.test.ts:76,:296293476148: refuses a repeated?version=onGET/DELETE /packages/:id, and addspackage-routes-query-multiplicity.test.ts. Its changeset records the measured read: onDELETE, a repeated value skipped the full-uninstall branch, and the call still reported success. The lines blame to the later68feaadd6and7cdbcbb30, which cite this earlier work by number. PR #6895, which landed the anchor, names #6307 on its first line. The rest stage gave the number this anchor.#17853vitest-filter-preflight/src/index.ts:508f5f0e5a: a vitest file filter that selects nothing says so, even when the rest of the run selects something. This is the first implementation, inpackages/cli. The line blames toc667d8c80, the shared port for all eight project-declaring packages; its number is#17978, which answers 200 and stays. PR #17965, which landed the anchor, names #17853 on its first line.#13504vitest-filter-preflight/src/index.ts:27344813ba57: splitspackages/cli's suite into the namedunitandintegrationtiers, decided on behaviour, with the partition pin. That is half of the "tier walk" this sentence names, and its diff heads the new section with this number.#14554, the derived-population half, answers 200 and stays. The only commit whose subject carries#13504is55519d503, the comment-only measurement half: PR #13872 says it lands only that half. So that commit is not the anchor for this sentence. The PR that landed44813ba57answers 404.Anchor checks. Every cited sha matches exactly one object (
git rev-parse --disambiguate, count 1 for each of the 6). Each is a commit with one parent, and each is an ancestor ofmain(merge-base --is-ancestoragainstcbaf04c1fd, exit 0 for all 6). The checkout is not shallow. The control leg3cc8676e1(2026-08-08, the parent of the oldest anchor53068c130of 2026-08-08) exits 0, and the negative control, this branch's own06b8fbc2d3, exits 1. Three anchors reuse the landed stages' (53068c130,35ad101bc,293476148), so each number carries one anchor across the tree. Three are new (12298c7d6,08f5f0e5a,44813ba57).Numbers. All 6 dropped numbers answer 404 by REST (probed 2026-09-29T21:16:49Z). The numbers kept on changed lines (
#17978,#14554) answer 200. No slash-joined citation group stands inpackages/qa/*/src.Mechanical guard: no code token moves
H2 holds on the parser-token reading. The emitted-
distreading does not apply, because none of these packages has a build (see Changeset below).Token guard. It compares the TypeScript parser's leaf tokens (TypeScript 6.0.3,
getChildrenwalked to the leaves, JSDoc nodes excluded) of the 5 touched files at base679f95ec5cand at30aae6a3e6. Controls mutate the head text in memory only.'vitest'import specifier infallback-seam.conformance.test.tsflipped): exactly 1 differingStringLiteral, at token 11 of that file (exit 1).Every one of the 24 changed lines is a
//or*comment line. A raw scan of the 5 changed files for control bytes finds none (a positive probe on a scratch file matched).Changeset
None, and
skip-changeset. There is no@objectstack/qapackage. The three touched packages are@objectstack/downstream-contract,@objectstack/http-conformanceand@objectstack/vitest-filter-preflight. Each is"private": true, has nobuildscript, nofiles[]and nodist/..changeset/config.jsonversions private packages but never tags or publishes them. This diff therefore publishes nothing from any released package, so there is nodistto compare and no code-mutation control to run. The measurement is the packages' own manifests.Gates (head
06b8fbc2d3)This host has no
flock, soos-verify-lock.shran in its declared unlocked mode. Its disclosure, verbatim, from each run at this head, and from the closure build at527d5dca06(the first merge;packages/qais byte-identical between the two):30aae6a3e6and again at527d5dca06. Then the whole workspace was built withturbo run build --filter='./packages/*' --filter='./packages/*/*': 71 of 71 tasks at this head, 66 of them cache hits. The tree was clean after each build.vitest run), at this head and at both earlier commits:downstream-contract: 3 files, 31 tests passed;http-conformance: 8 files, 102 tests passed;vitest-filter-preflight: 3 files, 111 tests passed.typecheckscripts exit 0;downstream-contract's is also one of CI's consumer-gate type-check lanes.http-conformance'scheck:test-typecheckholds: 3 files, 27 errors, 10 pinned signatures.tsc --listFilesshows every touched file compiled:downstream-contract/tsconfig.json: 11 files, 3 of them tests;http-conformance/tsconfig.test.json: 11 files, all 8 tests, including both touched test files andadapter.ts;vitest-filter-preflight/tsconfig.json: 6 files, 3 of them tests.pnpm lint(eslint . --no-inline-config) exits 0 at this head (2026-09-29T21:48:59Z to 21:49:26Z), and at527d5dca06before the second merge.node scripts/check-issue-citations.mjs --base origin/main, withorigin/mainatcbaf04c1fdand merged, judges 2 citations on the changed lines of 3 files (the kept#17978and#14554). Both resolve, and the run exits 0. The pinned merged base of the first merge (--base 1ab98926b0, at527d5dca06) gives the same 2 citations and also exits 0.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 53 families, identical at527d5dca06and at this head. All 53 exit 0 at this head.--ranwith the exit-coded record reads "53 derived, 53 run, 0 NOT-MEASURED, 0 UNRUN" (a derived zero). Among them:check:issue-citations;check:doc-authoring(808 pinned sites, no growth);check:nul-bytes(9,342 text files, no raw control bytes);check:published-files,check:type-check-coverageandcheck:type-check-debt.check:authz-resolver,check:error-code-casing,check:filter-alias-parity). The other three need a pull request's context; they are run against this PR once it exists, and the results are reported on the card. The 18 self-test-only rows grade their checkers' fixtures and cannot judge this diff.Hypotheses (measured first)
679f95ec5cthe filtered census answers 8 sites on 8 lines, 5 numbers, in 3 files, as on the seat's0be898499f. The whole-repo count is 1,185.packages/qa. No site was left for an open PR or for an unfound anchor. The file lists of all 12 open PRs were read at 2026-09-29T21:13:53Z: only the Version Packages PR chore: version packages #20639 touchespackages/qa, inCHANGELOG.mdandpackage.json.distreading is not available, because none of the packages has a build.Acceptance notes
packages/qaoutsidesrc/**, a later stage of the card. The census surface ispackages/**/src/**, andpackages/qa/dogfoodhas nosrc/at all. The supplementary scan counts 127 dead sites left inpackages/qaoutsidesrc/**:dogfood/test/**anddogfood/vitest.config.ts: 122 sites, 27 numbers, 28 files (94 comments, 28 strings);downstream-contract/test/contract.test.ts:46(#10485, a comment);vitest-filter-preflight/test/config-wiring-sweep.test.ts:6andtest/filter-preflight.test.ts:5(#17853, comments);vitest-filter-preflight/package.json:6(#17853, in the packagedescription);http-conformance/test-typecheck-debt.json:2(#13470, in the generated_comment, whose producer isscripts/check-test-typecheck.mts; that producer is scripts/check-test-typecheck.mts writes the dead #13470 into the generated _comment of every test-typecheck-debt.json (19 files): re-anchor at the producer and regenerate #20715's, and it is never fixed by hand).None of them is in this stage's surface, and none moved.
ADR-0122's own status line and amendment heading cite
#6083(404).docs/adr/**is a governed surface and one of the gate's deferred surfaces, so it is noted here, not touched.Card-word residue, cited nowhere.
vitest-filter-preflight/src/index.ts:117says "this card" about 150 lines from either rewritten line. It cites no number, so it was left, as the landed stages left theirs.The moving
origin/main. The branch mergedorigin/maintwice. The first merge (527d5dca06) took1ab98926b0(a spec retirement, nothing inpackages/qa). After it, the shared ref advanced tocbaf04c1fd, the plugin-approvals re-anchor (PR docs(plugin-approvals): re-anchor the dead tracker citations to the commits that decided them #20717). Against that moved ref,--base origin/mainthen read the old plugin-approvals lines as this branch's additions: it judged 31 citations and exited 2, because the diff was two-dot. That run is not a measurement of this change. The pinned base answered exit 0. The second merge (06b8fbc2d3) tookcbaf04c1fd, and every gate above was re-run on it. CI judges the merge ref.Deviations
packages/qa/src/**and@objectstack/qado not exist as spelled. The surface was read aspackages/qa/*/src/**, the census's own reading ofpackages/**/src/**. The changeset measurement was taken per touched package.Claude-SessionplusCo-authored-by: Claude), and the pre-push trailer check passed on every push. The harness's attribution reminder asked for a model-named trailer and a different PR footer, and AGENTS.md overrides it. The two merge commits carry git's default message.Generated by Claude Code