docs(create-objectstack): re-anchor the dead tracker citations in packages/create-objectstack/src to the commits that decided them - #20748
Merged
objectstack-fleet[bot] merged 2 commits intoSep 30, 2026
Conversation
…kages/create-objectstack/src to the commits that decided them Stage 11 of the domain:cli lane of the dead-citation sweep. 25 comment sites that cited a tracker number answering 404 now cite, in ruling C+D's form C, the commit in this repository's history that decided what the line describes: cec9d23 (the banner reads its own version), 8d21f7a (Next steps names the detected package manager), c27e160 (the boot-probe neighbour reports why it did not come up), fd75728 (the skills bundle is installed for one agent), 21756b3 (scaffold docs converge on the canonical host), cc986c9 (the escaping-relative-path MONOREPO_ONLY pattern), 4998efa (the blank template's CI workflow) and 675ab57 (the two benign peer skews are declared). Comments only; every file keeps its line count; no tracker number is added. Claude-Session: https://claude.ai/code/session_local_1d2a197c-c20e-4e90-9be8-413d4d432289 Co-authored-by: Claude <noreply@anthropic.com>
…eate-objectstack-citations
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 11 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
objectstack-fleet
Bot
deleted the
claude/issue-20594-create-objectstack-citations
branch
September 30, 2026 02:37
This was referenced Sep 30, 2026
Merged
os-warren
pushed a commit
that referenced
this pull request
Sep 30, 2026
The recogniser admits only its one exact shape and refuses a pull_request / push / merge_group term, a negation and every live mixed if:; the derivation refuses a shared, a listed and an untellable name; the measured #20748 head judges 0 with its raw-named canary and 4 with a genuinely unexpected skip beside it, both in-process and through the CLI on a payload file. Claude-Session: https://claude.ai/code/session_01KTZmMfzVzjNvyaLyQ8mHvg Co-authored-by: Claude <noreply@anthropic.com>
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 free
to 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.
Part of #20594
Clause-②: no
What changed
This is stage 11 of the
domain:clilane of the dead-citation sweep:packages/create-objectstack/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 10 of this card (PR #20624, PR #20632, PR #20656, PR #20673, PR #20689, PR #20703, PR #20713, PR #20723, PR #20735, PR #20741) are the precedents. The card stays open for the lane's remaining packages, so this PR saysPart of.That is 25 sites on 25 lines in 10 files, covering 9 numbers, rewritten to 8 distinct commits:
src/banner.ts2,src/index.ts1 (2 numbers);*.test.ts; stages 1 to 10 took test comments too):starter-comments-self-contained.test.ts9,scaffold-e2e-boot-probe.test.ts3,banner-version.test.ts2,blank-readme-validate-disclosure.test.ts2,scaffold-next-steps-pm.test.ts2,template-consistency.test.ts2,scaffold-skills-single-copy.test.ts1,template-ci-workflow.test.ts1.Only comments changed: 25 lines out, 25 in, every one of them a site (no companion line), and every touched file keeps its line count (147 / 67 / 58 / 617 / 910 / 261 / 357 / 328 / 221 / 745), so no line citation into these files moves. No citation number is added: the added lines carry no tracker number at all, 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 9 decisions (a grep for the 9 numbers there reads 0 hits; the control number#7329reads 2 in the same tree), so every anchor is a commit.No changeset;
skip-changeset. The rewritten comments do not reach the publisheddist(measured below), as in stages 5 and 7 (PR #20689, PR #20713).Scaffold output is untouched. No site sits inside a template literal or in a file the scaffolder copies:
src/templates/**carries zero tracker citations in either projection, and all 25 sites are//or JSDoc comment prose outside any string. A real scaffold run at base and at head emits a byte-identical project (below).Census:
packages/create-objectstack, 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/create-objectstack/. Both runs enumerated the whole board.allocated-but-absent01e78dceef, run 2026-09-30T01:14:08Z to 01:19:48Z4ed638093d, run 01:30:22Z to 01:35:31ZThe whole-repo drop of 3 is exactly these sites: a site-by-site diff of the two JSON outputs has 3 findings gone (
banner.ts:10,banner.ts:17,index.ts:441) and none added. The other three tallies (resolves33,014,resolves-as-pull-request1,984,cross-repo-unjudged995) are equal in both runs.packages/create-objectstackis byte-identical at4ed638093dand at the head (the one merge brought no file under it).Supplementary scan (test files, strings and files outside
src/included). The gate's exportedextractCitationsandclassifyCitationover all 53 tracked files of the package (CHANGELOG.mdexcluded), comment-prose and whole-file projections, with the board from the gate's ownprobeBoard: 77 citations and 33 dead before, 52 and 8 after. Undersrc/: comments 3 dead to 0, test comments 23 to 1, test strings 7 unchanged;src/templates/**0 citations of any kind. Outsidesrc/, one citation (vitest.config.ts:24,#10374) answers 200. Its before list ofsrc/comment sites equals the census's. The 8 left are 7 test strings and 1 test comment with no deciding commit (see "The site left" and Acceptance notes).Per-number 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.#10325banner.ts:10;banner-version.test.ts:3cec9d239d: the startup banner reads the real version frompackage.jsonthrough the newrenderVersionBanner(), and sizes the box from the version's plain length, widening and never truncating, instead of the hardcodedv6.x. Both lines blame to it; its message carries the closing trailer for this number. New anchor.#10322banner.ts:17;index.ts:441;banner-version.test.ts:17;blank-readme-validate-disclosure.test.ts:3,:50;scaffold-next-steps-pm.test.ts:3,:78d21f7a76: detect the package manager once, up front, and name it in the install line, the install-failure remedy and every "Next steps" line (labels padded to the longer of the two instead of hand-kerned fornpm), and namevalidatein the blank README's "Getting started". Its message carries the closing trailer for this number.index.ts:441and the two test headers blame to it;banner.ts:17andbanner-version.test.ts:17blame tocec9d239d, whose message calls this "the sibling bug fixed one function away in the same file";scaffold-next-steps-pm.test.ts:7blames toc6c7feccd, a re-wrap that keeps the sentence. New anchor.#19424scaffold-e2e-boot-probe.test.ts:397,:679,:816c27e16059: the boot-probe neighbour announces its own listener (or its bind error), asks the kernel for its port withlisten(0), and the harness names five distinct outcomes instead of one "never came up"; the controls block pins each. All three lines blame to it; its message carries the closing trailer for this number. New anchor.#16331scaffold-skills-single-copy.test.ts:3fd75728bc: install the skills bundle for one agent (--skill '*' --agent claude-code -y) so a scaffolded project's first commit stages it once, with no symlinks. The line blames to it, and its diff is what added the number; its message names none. New anchor.#10990starter-comments-self-contained.test.ts:41,:28321756b325: converge the shipped template files on the ruled canonical docs origin and pin that convergence as assertion 4 overshippedFiles(). Both lines blame to it; its message carries the closing trailer for this number. New anchor for this number.#11022starter-comments-self-contained.test.ts:50,:91,:122,:22121756b325: rewrite the blank README's two monorepo-only references, add the fifthMONOREPO_ONLYpattern (the framework's own name next to a "repo" word), retire the self-retiringEXCLUDEDentry and add the README's two RATIONALE facts. All four lines blame to it. Stage 3 (PR #20656) gave this number the same anchor.#15150starter-comments-self-contained.test.ts:72,:133,:141cc986c913: the sixthMONOREPO_ONLYpattern, for a reference written as a relative path that climbs out of the project, anchored on bare../rather than on a depth judgement. All three lines blame to it; its diff is what added the number (8 times, across both scaffolders' pins), its message names none. New anchor.#16330template-ci-workflow.test.ts:3;template-consistency.test.ts:3764998efa71: ship.github/workflows/ci.ymlin the blank template (the template's first dot-directory) so a scaffolded project has gates from its first push. Both lines blame to it; its diff added the number, its message names none. New anchor.#10326template-consistency.test.ts:498675ab574e: declare the two benign peer skews a clean first install reported as scoped pnpmallowedVersionsinside the scaffold. The line blames to it. Stage 3 (PR #20656) gave this number the same anchor.Anchor checks. Every cited sha matches exactly one object (
git rev-parse --disambiguate, count 1 for each of the 8), is a commit, has one parent, and is an ancestor ofmain(merge-base --is-ancestoragainst01e78dceef, exit 0 for all 8). The checkout is not shallow. The control leg2aca1bc4c0(the parent of the oldest anchor675ab574e, 2026-08-20) exits 0 against the base, and the negative control (the base as an ancestor of675ab574e) exits 1. Two anchors reuse the landed stages' (21756b325,675ab574e); six are new.Numbers. All 9 dropped numbers answer 404 by REST (probed 2026-09-30T01:11:14Z and again at 01:50:21Z). The one number kept on a line beside the changed ones,
#9779(scaffold-e2e-boot-probe.test.ts:673), answers 200. The anchor commits' own PR numbers are not cited: three of them (#11030, #11013, #11191) answer 404 as well, which is the reason the ruling cites commits.The site left
No deciding commit (1 site, a test comment, so not in the census):
template-consistency.test.ts:153(#11048): "admitting them is a support decision (#11048), not a value to drift here". The number names an open support decision (whether to admit pnpm 10.0 to 10.4). The only commit naming it,568de194e, files it unassigned; no later commit decides it, and the floor is still pnpm 10.15 or later at the base. Stage 3 (PR #20656) left the sibling sitepackages/cli/src/commands/init.ts:267for the same reason.Mechanical guard: no code token moves, and nothing emitted moves
H2 holds on both readings: the parser-token diff is empty, and the emitted
distand the scaffolded project are byte-identical.Token guard. It compares the TypeScript parser's leaf tokens (TypeScript 6.0.3,
getChildrenwalk, JSDoc nodes excluded) of the 10 touched files at base01e78dceefand at4ed638093d. Controls mutate the head text in memory only.StringLiteral, exit 1.All 50 changed lines (25 out, 25 in) are
//or*comment lines.Emitted
dist.pnpm --filter create-objectstack buildat base (before any edit) and at4ed638093d, after the same dependency build. All 24distfiles (index.js,chunk-ZIUW7UEA.js,created-summary.js,created-summary.d.tsand the 20 copied template files) have equal sha256 at base and head, anddiff -ris empty. None of the dead numbers appears in the basedistat all: tsup drops these comments.scripts/ablation-replace.mjs, wrap mode, anchorDependency installation failed.hit 1 to 0, planted marker 0 to 1, blobb68538942c96to860de8778f10;scripts/ablation-dist-preflight.mjsfound the marker indist/index.js):index.jsdiffers from the head build. The blob was restored to HEADb68538942c96withgit diff HEADempty,distwas rebuilt, the preflight in--absentmode reads the marker absent from all 24 files with a clean tree, and the 24 sha256 values equal the first head build.create-objectstack'sdistequal to the same 24 values.Scaffold output.
node packages/create-objectstack/bin/create-objectstack.js demo-app --skip-install --skip-skills, run in an empty directory from the base build and again from the head build: both emit the same 21 files with equal sha256,diff -ris empty, and the printed output differs only in the absolute target directory line.A raw scan of the 10 changed files for ASCII control bytes finds none (a positive probe on a scratch file with one such byte reads 1), and
check:nul-bytesexits 0.Changeset
None;
skip-changeset. The package'sfiles[]isdist,README.mdandCHANGELOG.md; the build above emits a byte-identicaldistat base and head, and the code-mutation control proves that build does move when code moves. The two other shipped files are untouched, so this diff publishes nothing.Gates (head
a84b73af13)This host has no
flock, soos-verify-lock.shran in its declared unlocked mode. Its official wording, verbatim (printed by every run; the command line differs per run and is listed in the verdicts below):Its verdict line from each run (the closure build and the base build at
01e78dceef; the head build, the first whole-workspace build, the tests, the boot-probe file and the typecheck at4ed638093d; the second whole-workspace build, tests and typecheck at this head after the merge):create-objectstack's dependency closure (@objectstack/spec, its only workspace dependency), then the package, then the whole workspace,turbo run build --filter=./packages/* --filter=./packages/*/* --concurrency=2, 71 of 71 tasks, before and again after the merge. The tree was clean after each.vitest run --maxWorkers=2: 16 files, 247 tests: 233 passed and 14 skipped, at this head and at4ed638093d. The 14 skipped are the whole ofscaffold-e2e-boot-probe.test.ts(run alone: 1 file skipped, 14 tests skipped), which its ownRUNNABLEgate (process.platform === 'linux', plusbash,curl,openssl) skips on this macOS host. NOT MEASURED locally:scaffold-e2e-boot-probe.test.ts, reason: Linux-only by its own gate; CI runs it. Its diff is 3 comment lines with identical parser tokens.pnpm --filter create-objectstack typecheck(tsc --noEmit) exits 0 at this head and at4ed638093d.--listFilesreaches 26src/files outsidesrc/templates/, including all 16 tests and all 10 touched files.origin/main's one incoming commit nor this diff touchespackages/spec.pnpm lint(eslint . --no-inline-config) exits 0 at this head (2026-09-30T02:00:09Z to 02:00:43Z), and at4ed638093d(01:49:31Z to 01:50:04Z).origin/main(697845d19f),node scripts/check-issue-citations.mjs --base origin/mainreports "no issue citations added against 697845d (2 file(s) read)" (exit 0).node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 52 families, the same list at4ed638093dand at this head. All 52 exit 0 at this head in one pass, and--ranwith the exit-coded record reads "52 derived, 52 run, 0 NOT-MEASURED, 0 UNRUN" (a derived zero). Among them:check:issue-citations,check:doc-authoring,check:nul-bytes,check:published-files,check:cross-package-test-inputs,check:dts-closure,check:dual-build-cjs-loads,check:type-check-debt,check-changeset-no-major.check:scaffold-emission-policyand the three the derivation marks as keeping their roster under one of this diff's paths (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)
01e78dceefthe filtered census answers 3 sites on 3 lines, 2 numbers, 2 files, as on the seat's0be898499f. The whole-repo count is 1,077.packages/create-objectstack. No census site was left for an open PR (the file lists of all open PRs were read at 2026-09-30T01:21:44Z and again at 01:52:53Z, 8 PRs each time: only the Version Packages PR chore: version packages #20639 touches the package, inCHANGELOG.mdandpackage.json) or for an unfound anchor. The one site left for an unfound anchor is a test comment, outside the census.distand the scaffolded project are byte-identical at base and head, with a code-mutation control that changesdist.Acceptance notes
src/:banner-version.test.ts:66and:96(#10325),blank-readme-validate-disclosure.test.ts:25(#10322),scaffold-e2e-boot-probe.test.ts:829(#19424),scaffold-next-steps-pm.test.ts:173and:197(#10322),template-consistency.test.ts:503(#10326). They stay on the card for its form-D stage; no string moved here. None is an assertion text or scaffold output.src/**: nothing dead. The one citation there,vitest.config.ts:24(#10374), answers 200;README.mdandbin/carry none.#4902(index.ts:165,:239;rewrite-identity.ts:36;runtime-image.ts:140;rewrite-identity.test.ts:3, and the test title at:123) was written by8d41998b0, whose own message names#4926(the remote-template object-name rewrite being silently skipped), andf2f09e4e3repeated it atruntime-image.ts:140;#4902itself is an unrelatedinit-serviceguard PR.#3120(template-copy.ts:20;template-consistency.test.ts:259) was written by3b6ef8a32(the scaffolded.gitignore), and#3120is an unrelated approvals-docs PR. The census reads both asresolves-as-pull-request, a reading and not a finding, and this card is about 404s, so neither moved here. Noted, not filed.banner-version.test.ts:13,blank-readme-validate-disclosure.test.ts:3). They cite no dead number, so they were left, as the landed stages left theirs.origin/main. The branch mergedorigin/mainonce (a84b73af13, merging697845d19f: PR docs(service-package): re-anchor the dead tracker citations to the commits that decided them #20742, theservice-packagecitation re-anchoring). Nothing underpackages/create-objectstackorpackages/specchanged, so the package's tests, typecheck, every derived gate, the roster rows and lint were rerun at the merge head and all read as before.Deviations
check:dual-build-cjs-loads,check:lean-entry-closureandcheck:type-check-debtexited 3 (PREREQUISITE NOT MET: built output absent) in the first pass, before the whole-workspace build. Rerun after it, each exits 0, and all 52 exit 0 in the single pass at this head.ablation-replace.mjsrefused it (anchor 1 to 1, exit 1) and restored the blob to HEAD before anything was built. The second attempt, with a replacement that does not contain the anchor, is the one reported above.os-verify-lock.sh. On this host that wrapper runs unlocked anyway, so nothing was serialized either way.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