docs(cli): re-anchor the dead tracker citations in packages/cli's files outside src to the commits that decided them - #20883
Merged
objectstack-fleet[bot] merged 1 commit intoSep 30, 2026
Conversation
…es outside src to the commits that decided them Stage 14 of the domain:cli lane's dead-citation sweep: comment prose in packages/cli's test/**, vitest.config.ts and tsconfig.test.json. Every comment site that cited a tracker number answering 404 now cites, in ruling C+D's form C, the commit in this repository's history that decided what the line describes. 154 sites on 149 lines in 56 files, 51 numbers, 50 distinct commits; one companion line moves a stale present tense into the past (generate-skill.e2e.test.ts:35). Five sites have no deciding commit and are left as they were (#10149, #11048, #14874 x3). Comments only: 150 lines out, 150 in, every file keeps its line count. Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 25 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-outside-src-citations
branch
September 30, 2026 15:40
This was referenced Sep 30, 2026
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 14 of the
domain:clilane's dead-citation sweep. It covers the lane packages' tracked files outsidesrc/**, the card's one remaining stage (claim5911994187):README.md,tsconfig*.json,vitest.config.*,tsup.config.*and each package'stest/**.The census at the stage's base
660a9b247ecounts 270 dead comment sites on that surface. That is over the claim's 40-site line, so this stage takes the largest package,packages/cli. Every other package is listed below with its count.In
packages/cli, every comment site on that surface that cited a tracker number answering 404 now cites a commit instead. Following ruling C+D's form C (comment5749154545on #19123), it is the commit in this repository's history that decided what the line describes. Stages 1 to 13 of this card are the precedents; the latest are PR #20767 and PR #20842.vitest.config.ts,tsconfig.test.jsonand 54 files undertest/**: 50 test files,helpers/serve-process.tsand 3 fixtures.generate-skill.e2e.test.ts:35, "both pass" becomes "both passed".3c418c498, rewrote the two@exampleblocks the sentence is about. A present tense beside that citation would contradict it.@ts-expect-error退役 pin 在packages/spec里是幽灵检查:tsconfig 把**/*.test.ts排除出唯一的tsc --noEmit#5286, component.zod.ts 的 I18nLabelSchema 键声明为纯字符串,但 3 个平台页在 31 处授权内联多语言 map #5728, Hook-body build gates: @capabilities override dead through os build; require() pattern dead; default build silently bundles forbidden patterns #10678, The first-party SDK'smeta.saveItemsends no query string at all, so the?force=truethe destructive 409 prescribes is unreachable through@objectstack/clienton either REST door #11391,os build --jsondrops the undeclared-authoring-key warnings thatos validate --jsoncarries #11643,os build --json's failure payloads carry nowarnings, so the truncation notice's--jsonpointer is a dead end when a later gate fails #11772,os validate --jsondrops advisory lists it has already computed on all five of its failure exits #12047, Queue-flake anchor: test/serve-publishes-bound-port.e2e.test.ts #13158, Queue-flake anchor: test/vitest-tiers-partition.test.ts #14554, cli: retireos create example— it is a weakeros initplus a README; docs point atos init(item 2 of #15531) #16483, fix(cli):os initwrites alintscript into all three scaffold templates, and a pin holds the two scaffolders equal #16888 (kept as a convenience link beside its commit) and [finding] the silent partial-filter drop #17853 fixes in packages/cli is live in the seven other packages that declare vitestprojects#17978.docs/adrandscripts/adr-anchorsfinds 0 hits for the 54 numbers and 0 for the 50 shas. The control7329finds 1 file in the same tree. So every anchor is a commit.#13504, the tier half only), read by pairing the landed stages' removed and added lines. The other 18 anchors are new.Census, per package
Instrument. The card's gate does not read these files. Its declared surface is
packages/**/src/**, andsurfaceForanswers null for all 56 touched paths; the controlpackages/cli/src/commands/init.tsanswerspackage-docblocks. So the census is taken by hand, with the gate's own grammar:src/**,CHANGELOG.mdexcluded. That is 534 files.extractCitationsfromscripts/check-issue-citations.mjs, whole-file. Its comment-prose projection decides comment versus string.GET /repos/objectstack-ai/objectstack/issues/N.Probes:
660a9b247e, 2026-09-30T13:15:23Z to 13:16:12Z: 889 numbers. 794 answer 200 and 95 answer 404.fda0702246, 15:00:12Z to 15:01:16Z: 864 numbers. 794 answer 200, 69 answer 404, and one answered 502. That one was e2e tests that spawn a realos serveunder vitest inheritTEST=true, which makes better-auth silently skip origin/CSRF validation regardless ofNODE_ENV#11267; re-probed twice at 15:01:23Z, it answers 404.Dead sites per package. "Comment" is this stage's surface. "String" means a string, a
describe/ittitle or a message on the same file list; those belong to #20752 (form D) and are untouched. "Off-list" means files outside the claim's file list; they are untouched and listed below.cliqa/dogfoodplugin-hono-serverplugin-devclientqa/vitest-filter-preflightcloud-connectionmcpqa/downstream-contractrestruntimetypesverifyqa/http-conformanceobservability,client-react,create-objectstack,adapters/hono,qa/refd-timer-testkittsconfig*.jsonstring values: none. Every dead site in atsconfig*.jsonsits in a//comment, and these files are JSONC.tsconfig.test.json:1.verify/tsconfig.test.json:1(packages/verifyhides its own tests from itstypecheckscript and carries frozen TEST_DEBT instead of thetsconfig.test.jsonwiring 23 other packages use #15145),plugin-dev/tsconfig.test.json:3and:56, andplugin-hono-server/tsconfig.test.json:3and:61(@objectstack/plugin-securityexcludes**/*.test.tsfrom its only tsc program — 89 test files unchecked, 11 standing type errors behind a greentypecheck#13176),plugin-hono-server/tsconfig.typecheck.json:12(Three plugin-manifest blocks —capabilities,configuration,extensions— have zero reads of the container itself, so all 8 keys beneath them are inert (configuration.properties.secretpromises encryption/masking) #11332, Retire the nine dead members of the plugin-manifestcontributesblock (events/menus/themes/translations/actions/drivers/fieldTypes/functions/commands) — tombstone route,kindssurvives #10724), andclient/tsconfig.json:8(meta.deleteItemsends none of the three carriers the REST reset door reads — noIf-Match, no?state=draft, no?dropStorage, on either declaration #12181).README.mdin any lane package cites a dead number.Per-number anchors
sitescounts the rewritten sites for each number. Each anchor was checked by blame, and in its message or its diff. The "what it decided" column is what the lines describe.#62172b641ddd4--jsonreserves stdout for the payload across thebootSchemaStackfamily (its message closes the card)#10152ad492e7fd#103235a616d558create-objectstackderives "Created files" from the finished project#10324ecd06f613starter-comments-self-contained.test.ts#10326675ab574e#1035915b63e85aos g agent(stage 3's anchor)#10366bbe643c08#10498,#104996d441e41f#10504ff5733e03UI: 0 Appsinstead of a dropped row; records the triage ruling#10557818e02700create-objectstackalias#10763c2b97c2a1os package publishprints the server's reason (stage 3's anchor)#109177940de5e0@capabilitieshook-body directive#10926d173125fb#10931afe1c4e0a@better-auth/utilspeer skews#1094346d34ab7cfallbackImportbecomes a caller-supplied parameter#109520d4bd93e7#10953be7262e72os validate --json#1102221756b325MONOREPO_ONLYpattern#110251c3a46f87os g skillwritesNAME.skill.ts#110263c418c498skill.zod.ts's two@exampleblocks offtriggerPhrases; its changeset names the number#1107150fb191dcos generatefilename from the registry (its message closes the card, and measures the loader)#11157a4cb7817fservehands the host importer its own base#1117205181e8ccRuntime:row and stops counting an unrendered metric#11174ab23c67abos validate --json --strictexits 1#112671ddda1d00childEnv(), the measurement table andserve-process-child-env.e2e.test.ts; its message names the card twice#11268918988ad3turbo.jsonto@objectstack/cli#testdependsOn: ["build"]#1167109b4f4e4e#12125,#1228579cf692b0conversionson every failure exit.#12285is this commit's own PR. Its message withholds the fold question, which is what 3 of the lines say#122979fd45a952os lintsurfaces conversion notices (stage 3's anchor)#12964e6fd1caf7#131098b236c826translatePage's#13112e7191ce71typestargets in the dual-build packages; its changeset names the number#13193faff497fdos servewrites the state file before it announces the port#13218c45d8e6b4#1350455519d503importterm per file (vitest.config.ts:82,:261,:263,:359)#1350444813ba57unit/integrationsplit and the partition pin (:496,:541,:677,:831andvitest-tiers-partition.test.ts:5; the qa stage's anchor)#13651ada3834ad#1433679c71d29dos validateaccepts#1471095fdf627bcheck:test-typecheck#14715accb9231c#148118ad872ba3os explaincatalog entry; its diff adds this heading#148175529a374e#14824cf6b67164os createemits a project that installs outside the monorepo (stage 3's anchor)#148580c5e97368#15150cc986c913MONOREPO_ONLYpattern (the create-objectstack stage's anchor)#163304998efa71lint(the create-objectstack stage's anchor)#1635068aee4c99os initwrites alintscript; its diff adds the pin that cites the number (PR #16888 kept beside it)#1672151ae73123LiteKernel.use()enforces the plugin contract (the plugin-hono-server stage's anchor)#170808b4890343spec-changes.jsonsection (its message closes the card)#1785308f5f0e5aAnchor checks:
git rev-parse --disambiguate, count 1 for each of the 50).merge-base --is-ancestoragainst660a9b247eexits 0 for all 50.8e13ca8764(the parent of2b641ddd4, 2026-08-08), exits 0. The negative control, the base as an ancestor of2b641ddd4, exits 1.Wordings to check, each true of its commit:
vitest.config.ts:263,:359and:541, andpublished-subpath-hook-body.pin.test.ts:28.os validate --jsonandos build --jsondrop theconversionsfield on every failure exit, the same waywarningswas dropped #12125 fold question: "the same question commit 79cf692 left open", "commit 79cf692 explicitly withheld an answer". The commit's message reads: "warningsandconversionsare deliberately NOT folded: whether they should become one field is a live question the ruling did not address."platform-page-i18n-parity.test.ts:163keeps its ruling date as "(the 2026-08-30 ruling)".commands.test.ts:181, which keeps a 2-character rule and grows by 6.The sites left
No deciding commit (5 sites). The claim says to list them, not guess.
vitest.config.ts:221(merge queue 关键路径回归:Test Core 最慢分片 16m28s、Dogfood 11m43s —— #4859 的两条验收判据均已不成立,且 #5401 方向 C 的触发条件已满足(实测) #10149): "the outer fan-out ... is a property of the shard, decided inci.yml".cc21aad8edis a measurement that says "Part of" and leaves the decision to the maintainer.d18bc32770cites the card's recorded reasoning.ad492e7fd) only cites it.test/init.test.ts:189([Decision] Withpackages: []shipped, theengines.pnpm >=10.15floor is now what refuses pnpm 10.0–10.4 — measured: they install with a lower floor, but never read the scaffold's build allowlist #11048): "Admitting that band is a support decision".published-entry-stderr-error-listener.test.ts:11and:150, andpublished-subpath-hook-body.pin.test.ts:35(The PUBLISHED CLI puts its own stdout/stderr on the blocking write path every time it spawns a child with inherited stdio #14874): "npm packs abintarget regardless offiles".95d5cbb31,b3ef687c0) only cite it.5023630b1's changeset records the same measurement but names no number, so the link is not proven.Not in this stage
domain:clipackages carry tracker numbers (114 messages in 8 packages, 254 ledgered ids): this lane's share of the #20513 A/A burn-down #20752, not moved):cli, 42 sites in 24 test files. Examples:describe('#12125 — ...')inbuild-json-failure-conversions.e2e.test.ts:300,:459and:557, anddescribe('[#11025] ...')ingenerate-skill.e2e.test.ts:203.qa/dogfood, 28 sites in 13 test files, includingauthz-conformance.matrix.ts:429(3 numbers in one string).cli:bin/run-dev.js6 andbin/run.js4 (comments;bin/run.jsships).scripts/check-app-nav-i18n.mjshas 13 comment and 14 string sites.vitest-tiers.tshas 2 andvitest-tiers.fixtures.ts1 (comments).test-typecheck-debt.jsonhas 1 (string).plugin-hono-server:objectstack.config.ts2.test-typecheck-debt.jsonstrings:rest7, and 1 each inruntime,mcp,clientandqa/http-conformance.qa/vitest-filter-preflight:package.json1 (the description string).Mechanical guard: no code token moves
The check compares the TypeScript parser's leaf tokens of the 56 changed files at base
660a9b247eagainst headfda0702246. It walks withgetChildren, excludes JSDoc nodes, and treats comments as trivia.tsconfig.test.jsonis compared by its parsed JSONC value. Controls mutate the head text in memory only.StringLiteral)StringLiteral, plus the JSON value)A raw scan of the 56 changed files for control bytes finds none. Its positive control, a scratch file holding a U+0001 byte, matches 1.
Changeset: none (
skip-changeset)@objectstack/cli's published set isfiles: ["dist", "README.md", "CHANGELOG.md"], plus thebintarget npm packs regardless offiles. No touched path is in it:distis built fromtsconfig.build.json(rootDir: "src",include: ["src"]).bin/is not touched.Measured on the built package at head, 3 phrases the change adds occur in 0 files of
dist:The positive control, a
srcdocblock phrase ("already drifted once (closed by commit 6d441e4)"), occurs indist/commands/init.js.Tests (head
fda0702246,os-verify-lockwithOS_VERIFY_LOCK_SLOT=issue-20594-outsidesrc)pnpm --workspace-concurrency=2 --filter '@objectstack/cli...' build→ VERDICT command-exit 0.pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2→ VERDICT 0, Test Files 237 passed (237), Tests 3370 passed (3370). The unit tier holds 23 of the 50 touched test files.--project integration test/published-entry-stderr-error-listener.test.ts→ 1 file, 6 tests passed.OS_TEST_TIERS=nightly, in 4 runs: 9 files / 87 tests, 6 / 74, 6 / 22 and 5 / 22, each VERDICT 0 and all passed.pnpm --filter @objectstack/cli typecheck→ VERDICT 0.tsc --noEmitand thencheck:test-typecheck, which reports "3 file(s) / 28 error(s) / 6 pinned signature(s) held in test-typecheck-debt.json". That is the ledger as it stands at the base, unchanged.pnpm exec turbo run build --filter='./packages/*' --filter='./packages/*/*' --concurrency=2→ VERDICT 0, 71/71 tasks. This was needed by the two gates that read built output.Gates (head
fda0702246)node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderives 49 families.check:dual-build-cjs-loadsrefused with exit 3 (PREREQUISITE NOT MET, nodistfor 9 packages). After the whole-workspace build it exits 0.check:query-options-erasurehit my 300 s cap on a contended box. Rerun, it exits 0 in 363 s ("ratchet holds ... none new").check:type-check-debtrefused with exit 3 (no builtobjectql). After the build it exits 0 ("none above its recorded number").--ran: 49 derived, 49 run, 0 NOT-MEASURED, 0 UNRUN.node scripts/check-issue-citations.mjs→ 0 citations added.pnpm lint(eslint . --no-inline-config, repo-wide) → exit 0, 2026-09-30T14:56:17Z to 15:00:01Z, atfda0702246.Acceptance notes
origin/mainmoved 14 commits past the base (to9905e61ca2), and the branch was not merged forward.9905e61ca2with this diff applied (a throwaway detached worktree, since removed) is the same 49 commands.print-metadata-stats-zero-row.test.ts:101says "That card" and:184"that card's head". Both now follow a commit citation and mean the card behind it.ittitle atgenerate-skill.e2e.test.ts:269says both spec@exampleblocks "still pass"triggerPhrases. That is stale since3c418c498, but it is a test string and belongs to form D.bin/run.js:225and threescripts/check-changeset-no-major.mjssites. Both are outside this surface;scripts/**is [finding] 96 of the 128 line citations inscripts/**gate headers name no tracked file, so the new symbol-anchor corpus declines them by name #15809's lane.Generated by Claude Code