docs(client): re-anchor the dead tracker citations in packages/client/src to the commits that decided them - #20703
Conversation
…/src to the commits that decided them Every comment site in packages/client/src that cited a tracker number GitHub no longer serves now cites the commit in this repository's history that decided what the line describes, and keeps saying in its own words what that commit decided (ruling C+D, form C): 19 sites in src/index.ts and 24 in test-file comments, 13 numbers onto 12 commits, plus one companion line that completes a rewritten sentence. Comment lines only: 44 out, 44 in, and every touched file keeps its line count. No code token, string literal or test assertion moves. Claude-Session: https://claude.ai/code/session_local_1d2a197c-c20e-4e90-9be8-413d4d432289 Co-authored-by: Claude <noreply@anthropic.com>
…client docblocks The rewritten docblocks ship: the emitted dist (index.d.ts, index.d.mts, index.js, index.mjs) carries them, so the change publishes and takes a patch changeset in the form the earlier stages used. 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 1 package(s): 8 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 3 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 15 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 b940fa9c220b1374fc23319ea783a61cc266b569 && git checkout b940fa9c220b1374fc23319ea783a61cc266b569
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin a8acee28dd57b203789349f51a222e6d69f43b40 afa654081f46e1b144020b31fbac22a4238d74a9 && git checkout -B drift-repro a8acee28dd57b203789349f51a222e6d69f43b40 && git merge --no-ff afa654081f46e1b144020b31fbac22a4238d74a9
node scripts/docs-audit/affected-docs.mjs --json a8acee28dd57b203789349f51a222e6d69f43b40
|
Contract reviewServed-tier: Reviewed PR #20703 (stage 6 of #20594, ① Derived judgmentsAccept-set and public-surface changes the diff implies: none. Every one of the 88 changed lines in the 7 source files is a comment line (44 removed, 44 added; each payload begins (1) Comment-only: yes. Named tokens that moved: none. The only line beyond the 43 sites is (2) Anchors. 12 distinct shas stand on added lines (
No wrong or unsupported anchor. Two wording wobbles, not defects: (3) Numbers. The 13 dropped numbers (#12195, #12176, #12194, #12181, #14879, #14313, #14312, #14314, #6361, #9934, #6239, #8480, #13208) each answer 404 by REST at this read. The three numbers on changed lines that answer 200 (#8326, #12104 x3, #13155) are kept on their added lines; per-hunk set difference added-minus-removed is empty in every hunk, so no number is added, and the numbers in context lines (#16675, #15451, #11095, #3821, #11713, #13023, #7735, #4451, #11712, #3563, #11391, #3587) answer 200 and are untouched. Right. (4) Line counts. From the file list, additions equal deletions for every source file (1/1, 1/1, 10/10, 19/19, 3/3, 2/2, 8/8; the changeset is +10/-0). From the fetched files, base and head line counts are equal per file (332, 367, 3178, 8187, 112, 633, 1480). Right. (6) Check-runs on the head at 2026-09-29T19:18:56Z (newest run per name, 32 names, no re-runs): 27 ② Semver level
(5) Judged right. The dispatch ( Clause-②: no, judged right. ③ Boundary flags
Implemented-by: VERDICT: PASS |
Part of #20594
Clause-②: no
What changed
This is stage 6 of the
domain:clilane of the dead-citation sweep:packages/client/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, and keeps saying in its own words what that commit decided. PR #20533 is the method and stages 1 to 5 of this card (PR #20624, PR #20632, PR #20656, PR #20673, PR #20689) are the precedents. The card stays open for the lane's remaining packages, so this PR saysPart of.That is 43 sites on 43 lines in 7 files, covering 13 numbers, rewritten to 12 distinct commits:
src/index.ts(8 numbers);*.test.ts; stages 1 to 5 took test comments too).One more line changed:
client.test.ts:2198, the second half of the:2197sentence ("byte-identical to the pre-(number) behavior" now reads "byte-identical to the behavior before commit cf74a11").Only comments changed: 44 lines out, 44 in, and every touched file keeps its line count, so no line citation into these files moves. No citation number is added: over the 44 line pairs, added-minus-removed numbers is empty, and no PR number stands on an added line. No ADR or ruling-record file in
docs/adr/orscripts/adr-anchors/records any of these 13 decisions, so every anchor is a commit.A
patchchangeset for@objectstack/clientrides along, because the rewritten docblocks reachdist(measured below).Census:
packages/client, before and afterInstrument. The gate's own
node scripts/check-issue-citations.mjs --census --json, read-only and unchanged, run with the fleet token. The count is itsallocated-but-absentfindings underpackages/client/. Both runs enumerated the whole board.allocated-but-absentpackages/clientsites3b47a693c7, run 2026-09-29T18:31:09Z to 18:35:42Zsrc/index.ts)221a3f5e63, run 18:39:47Z to 18:44:31ZThe whole-repo drop of 19 is exactly these sites: a site-by-site diff of the two JSON outputs has 19 findings gone, all in
packages/client/src/index.ts, and none added.packages/client/srcis byte-identical at221a3f5e63and at the head.Supplementary scan (test files included). The gate's exported
extractCitationsandclassifyCitationover all 53.tsfiles undersrc/, with the board from the gate's ownprobeBoard: 963 citations and 61 dead before (src comments 19, test comments 24, src strings 0, test strings 18), 920 and 18 after (0, 0, 0, 18). Its before list of src comment sites is identical to the census's. The 18 left are test titles, the form-D stage (see Acceptance notes).Per-site table
git blameat the base ties each line to the commit that wrote it, and each anchor was read in its message, changeset or diff, not only its subject.#12195index.ts:684,:728,:1834,:2021;client.test.ts:2869;meta-automation-descriptors.test.ts:297986d973f, stage 3 of the compound-name retirement: un-mounts the three:sectionarities and unifies the SDK's URL spelling onencodeURIComponent. All six lines blame to it.#12176client.test.ts:357;meta-automation-descriptors.test.ts:317986d973fas well: the lines say the card "retired compound-name addressing", and that commit completes the retirement. Both lines blame to it, and the landed stages give this number the same anchor.#12194index.ts:738,:1838,:2026;client.test.ts:360;meta-automation-descriptors.test.ts:43311433f6b, stage 1: the item-name grammar, refused at the publish door.#12181index.ts:799,:820,:911,:1866;meta-delete-item-carriers.test.ts:4,:265cf71d73f8:meta.deleteItemsends the reset door'sIf-Matchpin and?state=drafton both declarations. Its changeset also records the withholding of?dropStoragethat:820and the test's:265describe. All six lines blame to it; stage 3 gave the number the same anchor.#14879index.ts:3479,:3552,:3635,:7536;client.data-prefix.test.ts:4;client.metadata-prefix.test.ts:7;client.test.ts:2165,:2197cf74a1128: the SDK reads the CRUD data prefix from discovery instead of restating/data(_dataPrefix()). Six lines blame to it;index.ts:3552andclient.metadata-prefix.test.ts:7blame to032452a54, the metadata-prefix sibling, and name the data-prefix change as their precedent.#14313index.ts:4911;return-type-precision.test.ts:1031b1b978c8d: binds theauth.*family to the wire shapes better-auth sends, and deliberately leavesauth.deleteUserunbound (the member:4911describes). Both lines blame to it.#14312return-type-precision.test.ts:891,:973,:981,:1130e944fdb24: binds fouroauth.*methods and deliberately leavesoauth.applications.deleteunbound, the "open decision":973and:981name.:891blames to it;:973and:981blame to the later delete binding (7beaaa32c) and:1130tob1b978c8d, and each refers back to what theoauth.*card did.#14314return-type-precision.test.ts:11387092d63e4: binds theorganizations.*family. The line blames to it.#6361index.ts:6379;client.test.ts:878,:139090bbf2510: retires the notification-listcursoron both halves.:1390blames to0b4022b41, which applies the same retirement one door over and names this one as its precedent. Stages 1 and 2 and the spec lane gave the number this anchor.#9934index.ts:7406;client.test.ts:2779c46da90: the producer-sideuserMessagemarking. Both lines blame to it; the anchor the landed stages give this number.#6239index.ts:8122f549a0d4a: the ADR-0049 retirement sweep that deletedViewProtocoland its schemas. The line blames to it; the spec lane's stage 2 gave the number this anchor.#8480client.test.ts:512caaae2cca: the typedsecurity.explain()request gains therecordIdsbatch spelling. The line blames to it, and its changeset names the card.#13208return-type-precision.test.ts:1394,:141574049254d:DeleteMetaItemResponseSchemadeclaresseqandprojectionApplied.#13208was the pull request that landed as this commit (its subject carries the number), and it answers 404 too.#13155, the issue beside it, answers 200 and stays.Anchor checks. Every cited sha matches exactly one object (
git rev-parse --disambiguate, count 1 for each of the 12), is a commit, has one parent, and is an ancestor ofmain(merge-base --is-ancestoragainst31ed067639, exit 0 for all 12). The checkout is not shallow. The control leg6f657f4f5(2026-08-07, the parent of the oldest anchorf549a0d4aof 2026-08-08) exits 0, and the negative control, this branch's own221a3f5e63, exits 1. Six anchors reuse the landed stages' (7986d973f,311433f6b,cf71d73f8,90bbf2510,79c46da90,f549a0d4a), so each number carries one anchor across the tree; six are new (cf74a1128,b1b978c8d,e944fdb24,7092d63e4,caaae2cca,74049254d).Numbers. All 13 dropped numbers answer 404 by REST (re-probed 2026-09-29T18:59Z). The three numbers kept on changed lines (
#8326,#12104,#13155) answer 200. Five slash-joined numbers stand inpackages/client/src, which the citation grammar does not read (#11925/#12036,#3431/#3455,#2567/#3963,#5449/#5546,#5674/#5787); their second halves all answer 200, so none is dead.Wordings to check, each true of its commit:
index.ts:820"Maintainer-seat ruling, landed by commit cf71d73": that commit's changeset states the withholding in the same terms ("no caller was measured needing it from this client").index.ts:3552now reads "The defect commit cf74a11 fixed, one key over";client.metadata-prefix.test.ts:7reads "thecrud.dataPrefixdefect commit cf74a11 fixed".index.ts:738keeps "Stage 1" beside the commit, and its "this stage" is the docblock's own commit, tagged7986d973fat:728.return-type-precision.test.ts:891,:1031,:1138keep "card N of 3 of A sixth client-SDK erasure spelling, larger than the other five combined: 43 exported methodsreturn res.json()directly, whose lib.dom type isPromise< any >#12104" (that number answers 200).Mechanical guard: no code token moves
H2 holds on the comment-stripped reading; the emitted
distis NOT byte-identical, because the docblocks ship.Token guard. It compares the TypeScript parser's leaf tokens (TypeScript 6.0.3, JSDoc nodes excluded) of the 7 touched files at base
3b47a693c7and at221a3f5e63. Controls mutate the head text in memory only.'token'to'tokeN'in the code literal atindex.ts:4895): exactly 1 differingStringLiteral, at token 14,882 ofindex.ts(exit 1).Emitted
dist.pnpm --filter @objectstack/client buildat base (the base tree ofpackages/client/srcrestored in place with a trap-armed restore; blob-equal to HEAD andgit diff HEADempty afterwards) and at the head, with the same dependency builds:index.d.ts,index.d.mts,index.jsandindex.mjsdiffer;index.js.mapandindex.mjs.mapare equal.distfiles reads 0 differing tokens (12,637 / 12,637 / 25,487 / 25,184), so the wholedistdelta is comment text. Its code control (a code line appended toindex.mjs) reads COUNT DIFFERS. A first try at that control appended the line onto the file's last line, which is thesourceMappingURLcomment with no trailing newline, so it landed inside a comment, read 0, and was void; it was redone after a newline.dist: for example "commit cf74a11" appears 4 times inindex.d.tsandindex.js.scripts/ablation-replace.mjs, anchorsearchParams.set('token'hit 1 to 0, blob restored to HEAD19305adddb,git diff HEADempty): changesindex.jsandindex.mjs.distwas rebuilt to the head bytes andscripts/ablation-dist-preflight.mjsreads the marker absent from all 6 files with a clean tree.A raw scan of the 8 changed files for control bytes finds none (a positive probe on a scratch file matched).
Changeset
patchfor@objectstack/client(.changeset/client-provenance-anchors.md), in PR #20632's form.@objectstack/client'sfiles[]isdist,README.mdandCHANGELOG.md, and the build above emits differentindex.d.ts/index.d.mts/index.js/index.mjsat base and head, so this diff publishes.check-changeset-no-major,check-empty-changeset,check-adr-0087-registrationandcheck-changeset-fixedall exit 0.Gates (head
afa654081f)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 twodistbuilds:@objectstack/client's closure (35 of 81 workspace projects), then the whole workspace,turbo run build --filter='./packages/*' --filter='./packages/*/*', 71 of 71 tasks, after the merge.vitest run: 50 files, 641 tests passed (every*.test.tsundersrc/;tests/integration/**needs a running server and is excluded by the package's own config).pnpm --filter @objectstack/client typecheckexits 0.tsc --listFiles:tsconfig.jsoncompiles the 3 non-testsrcfiles,tsconfig.test.jsonall 53 including the 50 test files.check:test-typecheck: 0 files, 0 errors, 0 pinned signatures.pnpm lint(eslint . --no-inline-config) exits 0 (2026-09-29T18:57:45Z to 18:58:13Z).origin/main(31ed067639),node scripts/check-issue-citations.mjs --base origin/mainreports "no issue citations added against 31ed067 (1 file(s) read)" (exit 0); pinned--base 31ed067639reads the same.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 61 families. All 61 exit 0, and--ranwith the exit-coded record reads "61 derived, 61 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,315 files, no raw control bytes),check:published-files,check:type-check-debt.check-changeset-fixed,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 reported on the card. The 18 self-test-only rows grade their checkers' fixtures and cannot judge this diff.Hypotheses (measured first)
3b47a693c7the filtered census answers 19 sites on 19 lines, 8 numbers, all insrc/index.ts. The whole-repo count is 1,298, as on0be898499f.packages/client. No site was left for an open PR (the file lists of all open PRs were read at 18:36:50Z, 11 PRs, and at 19:01:46Z, 8 PRs: only the Version Packages PR chore: version packages #20639 touchespackages/client, inCHANGELOG.mdandpackage.json) or for an unfound anchor.distreading. The parser leaf-token diff is empty with its controls firing. The emitteddistdiffers, and the difference is comment text only (token-identicaldistwith a code control). That is why the changeset ships.Acceptance notes
packages/client/src(describeandittitles, no assertion text):#121956,#121815,#148794,#99341,#84801,#63611. They stay on the card for its form-D stage; no string moved here.src/**, a later stage of the card:packages/client/tsconfig.json:8andpackages/client/vitest.config.ts:33cite#12181(404), andpackages/client/test-typecheck-debt.json:3cites#6083(404). The other citations inpackages/clientoutsidesrc/**(CHANGELOG.mdexcluded) answer 200.origin/main. The branch mergedorigin/mainonce (afa654081f, merging31ed067639:lint,metadata-protocolandservice-datasource). A later fetch advanced the shared ref toa8acee28dd, two commits inpackages/specand a generated reference page, none touchingpackages/client. There was no second merge; CI judges the merge ref.Deviations
client.test.ts:2198) beyond the 43 sites, the second half of the:2197sentence.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 merge commit carries git's default message.Generated by Claude Code