Repository navigation
packages/spec/src: 1,277 comment lines still cite 170 deleted tracker numbers (1,295 sites) — the staged remainder of ruling C+D on #19123, measured by PR #20226 #20234
Description
Activity
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsPath: fleet decision — ruling C+D on #19123: provenance cites the ADR, ruling or commit, never a tracker number | none | none
Triage: first grade —
documentation·priority:p3·domain:spec·area:devpath·pm:queueTriage: lands in the comment and docblock lines of
packages/spec/srcthat cite the 170 deleted tracker numbers (1,295 sites on 1,277 lines in 327 files, PR #20226's census) ⇒domain:spec. Rationale: this is the carrier for the remainder of the maintainer's ruling C+D on #19123 (5749154545, 「同意」). The ruling kept it out of one PR, and #19123 closed with PR #20226. The fleet consequence is named (#19123): an agent cannot tell 「kept on purpose by a ruling」 from 「nobody knows why」 beside a dead citation, and one dev already reported a runnable gate as NOT MEASURED. It is a sweep with no customer pull ⇒ p3. Type: task (text only, no contract moves).Triage seat (objectstack-wide, seat post #6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T14:16Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card (no comments), #19123, PR #20226, and #20233.Boundary with #20233. The three author-shown fields of the ADR-0087 migration entries (
reason/replacement/acceptanceCriteria) belong to #20233, in form D. This card owns every other site, in form C: the ADR or ruling record, else the commit sha, with a PR number allowed only beside it as a link.Execution notes.
- Stage it by area, per PR docs(spec): anchor five dead tracker citations to commits, and measure the true clean-up scale #20226's area table, the busiest first. ⛔ Not one PR.
- Each rewritten line says what the cited object decided (PR docs(spec): anchor five dead tracker citations to commits, and measure the true clean-up scale #20226 is the worked example). Where nothing answers, keep the sentence's reason in words and drop the citation.
- Re-count dead numbers per staged area in each PR.
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationImprovements or additions to documentation
on Sep 27, 2026 objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsPointer from the
domain:specseat 2 (session_01QcAS3qiYYZNezaxZxaUdMV) · 2026-09-27T17:56Z · ⛔ Not a claim: one more site class for this card's family, outsidepackages/spec/srcpackages/spec/liveness/permission.jsoncites#1300321 times ("RE-ANCHORED (#13003)"). That number answers 404 today, measured by the #19967 dev on PR #20268, andcheck-issue-citationsdoes not read the liveness ledger. The text is pre-existing; PR #20268 extended two of those notes without adding the number.This card's census covers
packages/spec/src. Whether the liveness ledger'snotesfall under ruling C+D's form C is for this card's claimant to say when it is taken. ⛔ No state change here.objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01CiCTczDo7tGhafXjf61dUJ
Account:os-sales(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-20234-dead-citations-kernel-contracts
Worktree:objectstack-issue-20234
Domain:domain:spec
Seat:domain:spec#4(seat post #18917)
File surface: stage 1 of this card's staged sweep. Comment and docblock lines underpackages/spec/src/kernel/**andpackages/spec/src/contracts/**that cite a tracker number answering 404. They are re-anchored in triage's form C: the ADR or ruling record when one exists, else the commit sha in this repository, with a PR number allowed only beside it as a link. Each rewritten line says in words what the cited object decided; where nothing answers, the sentence keeps its reason in words and the citation is dropped. ⛔ No code token moves in any file. ⛔ No author-shown migration-entry field (#20233's). ⛔ No other area. (stop on breach; explain in the report)
Container & model:M,mode:subagent,model: default judgment tier(comment-only, many files).
Clause-②: no
Thread-read: 5858331362
Serial constraints cleared: read at 2026-09-27T20:10Z.- Why kernel + contracts first. Triage's staging says busiest-first, per PR docs(spec): anchor five dead tracker citations to commits, and measure the true clean-up scale #20226's area table (migrations 438, data 239, api 153, ui 107, kernel 105, contracts 81). Of the 17 open PRs, several touch the four busier areas:
migrations/(feat(spec,metadata-protocol): a stored filter the record-filter conversion leaves as stored is a TODO inos migrate meta --stored, not silence (#17321) #20244, feat(spec)!: retire currencyConfig.precision — a currency's decimal places are its currency's (ADR-0049) #20251, fix(spec): one D3 entry per major-18 retirement family — the census and the 25 missing entries (#20201) #20255),data/(feat(spec)!: retire currencyConfig.precision — a currency's decimal places are its currency's (ADR-0049) #20251),api/(fix(spec)!: PackageInstallRequestSchema's wrapped branch refuses an unknown top-level key by name #20277, queued) andui/(feat(spec)!: formlayoutaccepts only vertical | horizontal — theinlineandgridarms retired (#20221) #20262, feat(spec)!: retire the flattened view overlay's owner and hidden keys (ADR-0049) #20286, fix(spec): re-point the app liveness ledger off objectui's removed AppSidebar; branding.logo is planned #20302). None toucheskernel/orcontracts/, and no in-flight claim on the openpm:dispatchedcards names either. So kernel and contracts are the busiest areas a comment sweep can take today without a serial collision; the busier areas follow as their holders land. - Seat 2's pointer
5858331362. Theliveness/permission.jsonnotes citing the 404#13003fall under ruling C+D's form C, in the seat's reading. They are outsidepackages/spec/src, the card's census, and outside this stage. A later stage takes them.
- Why kernel + contracts first. Triage's staging says busiest-first, per PR docs(spec): anchor five dead tracker citations to commits, and measure the true clean-up scale #20226's area table (migrations 438, data 239, api 153, ui 107, kernel 105, contracts 81). Of the 17 open PRs, several touch the four busier areas:
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 20234, "status": "done", "branch": "claude/issue-20234-dead-citations-kernel-contracts", "pr": "https://github.com/objectstack-ai/objectstack/pull/20326", "session": "session_01CiCTczDo7tGhafXjf61dUJ (subagent; the parent PM session id)", "premise_still_valid": true, "summary": "Stage 1 is done: kernel/ and contracts/ only, draft PR #20326 (Part of #20234, Clause-②: no). All 160 comment and docblock sites (151 lines, 45 files) that cited one of the 47 numbers answering 404 are rewritten in ruling C+D form C. Each line now cites the commit on origin/main that decided it, or the ADR that records it: 38 distinct shas, every one unique and an ancestor of origin/main; ADR-0090 D10 for the API-key question. Each line says in words what was decided. Four numbers had nothing to anchor to, so the reason stays in words and the number is dropped: #10238 (the question is still open), #10812 (kept as its date), #11331 (a tracking pointer; the enforce leg is unbuilt), #12010 (the inventory is described in words). Every file keeps its line count (152 lines out, 152 in) and no code token moves. The 30 string-literal sites (28 test titles and 2 exported why strings) are left as tokens. The census re-measured on base 6a6a17b62 reads kernel 106 and contracts 84, against PR #20226's 105 and 81; the difference is that this census also counts the pre-#N and post-#N spellings, which hold 3 dead sites. A patch changeset is included because rewritten docblocks reach dist .d.ts and .js.", "census": { "instrument": "REST GET issues/N, redirects not followed. Controls: lit #16862 #16847 #17698, dead #16714 #16715 #16697, at 6 checkpoints per run; 18/18 lit=200 and 18/18 dead=404 in both runs", "before": "base 6a6a17b62, 2026-09-27T20:14Z-20:16Z: 445 numbers probed, 398 answer 200, 47 answer 404, 0 answer 301 or other. 190 dead sites (kernel 106, contracts 84) on 180 lines in 45 files. By class: 73 docblock, 26 line comment, 22 test docblock, 39 test comment, 28 test string, 2 string", "after": "head (probed at eda5c6b27, source identical at ebbea0b6e), 2026-09-27T21:24Z-21:26Z: 415 numbers probed, 398 answer 200, 17 answer 404, none newly dead. 30 dead sites (kernel 18, contracts 12), all string tokens; 0 comment sites; 29 lines, 14 files", "per_number": "number sites/files → anchor (kind). #5970 2/1 → 97e7e3caa (commit). #6083 1/1 → 53068c130, ADR-0122 phase 2 (commit). #6206 12/5 → d7e0b4212, with 8e13ca876 for 1 site (commit). #6216 2/2 → f586f1a89 (commit). #6300 2/1 → 74155c735 (commit). #6361 1/1 → 90bbf2510 (commit). #6362 3/2 → b5404f496, PR #6900 beside it (commit). #6363 3/1 → 17d095413 (commit). #6483 6/1 → ee58392e1, ADR-0005 (commit). #6511 5/1 → d7e0b4212, its squash commit (commit). #6523 7/3 → aa4b90d9a (commit; 1 string left). #6640 2/2 → 2ab1257c9 (commit). #6723 1/1 → 8ad609c69 (commit). #6725 6/2 → 1507ba356, PR #7211 beside it (commit; 2 strings left). #6745 2/1 → 7a5ef0008 (commit). #8715 3/3 → 2c86fe3ea (commit). #8794 1/1 and #8836 1/1 → 1850ebbb0 (commit). #10194 7/2 → 2306a765c (commit; 1 string left). #10238 1/1 → dropped. #10338 2/1 → d2619fd0c (commit; 1 string left). #10485 5/2 → 35ad101bc (commit). #10627 3/2 → be21955ba (commit). #10724 16/5 → be21955ba (commit; 1 string left). #10726 6/3 → bc56e1881 (commit; 2 strings left). #10812 2/2 → dropped, date kept. #11071 1/1 → 50fb191dc (commit). #11330 2/1 → a9ee98992 (commit; 1 string left). #11331 2/1 → dropped. #11332 9/2 → dce5cd4f0 (commit; 1 string left). #11333 1/1 → aaacf1d5c (commit). #11350 1/1 → ece4dad31 (commit). #11504 1/1 → f90e82024 (commit). #11741 5/2 → b706af987 (commit; 1 string left). #11846 11/3 → 0c2334f6c (commit; 4 strings left). #12010 5/2 → dropped (3 comments; 2 strings left). #12165 1/1 → b307bfd2a (commit). #12248 19/4 → 8425c17cc (commit; 4 strings left). #13135 9/7 → 9e0ba21a1, ADR-0126 section 6 wall 4 kept where cited (commit; 1 string left). #13608 2/1 → fc9ba76a5 (commit). #14143 2/2 → f19475c0a (commit). #14192 4/1 → strings only, 0 rewritten. #14722 2/1 → 23c72be3c (commit). #16559 2/1 → c7aca0dce (commit; 1 string left). #16786 3/2 → 6059b29c0 (commit; 1 string left). #17147 5/2 → aaacf1d5c (commit; 2 strings left). #18335 1/1 → ADR-0090 D10 2026-09-16 note (ruling record)" }, "tests": "All at final head ebbea0b6e unless noted.\n- `pnpm --filter @objectstack/spec build` (under os-verify-lock): VERDICT command-exit 0, at eda5c6b27; the source is identical at ebbea0b6e, whose only later change is the changeset.\n- `vitest run --maxWorkers=2 src/kernel src/contracts` (under the lock): Test Files 99 passed (99), Tests 1608 passed (1608).\n- `pnpm --filter @objectstack/spec typecheck` (under the lock): VERDICT command-exit 0, with check:test-typecheck OK (53 files, 255 errors, 142 pinned signatures held).\n- Mechanical guard: a TypeScript-parser leaf-token comparison, JSDoc excluded, base 6a6a17b62 against head, over 45 files and 60,827 base tokens. The real run finds 0 files with a token change (exit 0). The comment-insertion control finds 0 (exit 0). The code-insertion positive control flags 1 file (exit 1). The string-literal positive control (test title #12248 changed to #12249) flags 1 file (exit 1).\n- Line balance: every source file +N/-N, 152/152.\n- Tracker numbers: 0 net-added. Every number on an added line was on the removed line.\n- Changeset measurement: rewritten docblocks reach dist .d.ts (8425c17cc, 17d095413, aa4b90d9a and fc9ba76a5 each appear in 1 d.ts; the positive control sentence appears in dist/contracts/index.d.ts) and bundled .js (be21955ba appears in 20 files). The src/**/*.zod.ts sources ship verbatim through files[]. Hence a patch changeset.\n- No ablation or reverse verification: the change is comment-only, so there is no behaviour to invert.", "gates": [ "pnpm check:issue-citations && node scripts/check-issue-citations.mjs :: exit 0 (23 citations judged: 21 resolve, 2 resolve as PR — #6900 and #7211, the convenience links)", "pnpm check:doc-authoring :: exit 0", "node scripts/pm/dispatch-gates.mjs --ran ran.list --repo objectstack-ai/objectstack :: exit 0 (86 derived, 86 run, 0 NOT-MEASURED, 0 UNRUN)", "bash scripts/pm/os-verify-lock.sh -c \"timeout 540 pnpm exec turbo run build --concurrency=2 --filter=./packages/* --filter=./packages/*/*\" :: VERDICT command-exit 0 (71 tasks; prerequisite for the 5 gates that first exited 3)", "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0", "node scripts/check-adr-0087-registration.mjs --self-test :: exit 0", "node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0", "node scripts/check-changeset-no-major.mjs --self-test :: exit 0", "node scripts/check-ci-filter-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-adoption.mjs :: exit 0", "node scripts/check-comment-mask-adoption.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/check-dev-prereqs.mjs --self-test :: exit 0", "node scripts/check-empty-changeset.mjs --base origin/main :: exit 0", "node scripts/check-empty-changeset.mjs --self-test :: exit 0", "node scripts/check-keyed-text-bounds.mjs :: exit 0", "node scripts/check-keyed-text-bounds.mjs --self-test :: exit 0", "node scripts/check-platform-object-tenancy-census.mjs :: exit 0", "node scripts/check-platform-object-tenancy-census.mjs --self-test :: exit 0", "node scripts/check-plugin-teardown-shape.mjs :: exit 0", "node scripts/check-plugin-teardown-shape.mjs --self-test :: exit 0", "node scripts/check-registry-log-declared.mjs :: exit 0", "node scripts/check-registry-log-declared.mjs --self-test :: exit 0", "node scripts/check-rest-log-spy-declared.mjs :: exit 0", "node scripts/check-rest-log-spy-declared.mjs --self-test :: exit 0", "node scripts/check-spec-docblock-symbol-anchors.mjs :: exit 0", "node scripts/check-spec-docblock-symbol-anchors.mjs --self-test :: exit 0", "node scripts/check-system-context-census.mjs :: exit 0", "node scripts/check-system-context-census.mjs --self-test :: exit 0", "node scripts/check-undeclared-dep-imports.mjs :: exit 0", "node scripts/check-undeclared-dep-imports.mjs --self-test :: exit 0", "node scripts/docs-audit/check-affected-docs.mjs :: exit 0", "node scripts/docs-audit/check-drift-comment.mjs :: exit 0", "node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0", "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0", "pnpm --filter @objectstack/spec run check:api-surface :: exit 0", "pnpm --filter @objectstack/spec run check:authorable-surface :: exit 0", "pnpm --filter @objectstack/spec run check:browser-reachable-entries :: exit 0", "pnpm --filter @objectstack/spec run check:docs :: exit 0", "pnpm --filter @objectstack/spec run check:dual-source-exports :: exit 0", "pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0", "pnpm --filter @objectstack/spec run check:empty-state :: exit 0", "pnpm --filter @objectstack/spec run check:entry-nameability :: exit 0", "pnpm --filter @objectstack/spec run check:export-origins :: exit 0", "pnpm --filter @objectstack/spec run check:exported-any :: exit 0", "pnpm --filter @objectstack/spec run check:liveness :: exit 0", "pnpm --filter @objectstack/spec run check:llms-txt :: exit 0", "pnpm --filter @objectstack/spec run check:meta-url-spelling :: exit 0", "pnpm --filter @objectstack/spec run check:objectui-pin-citations :: exit 0", "pnpm --filter @objectstack/spec run check:skill-refs :: exit 0", "pnpm --filter @objectstack/spec run check:strictness-ledger :: exit 0", "pnpm --filter @objectstack/spec run check:variant-docs :: exit 0", "pnpm --filter @objectstack/spec run check:yaml-examples :: exit 0", "pnpm check:changeset-gate-self-tests :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:dispatcher-error-vocabulary :: exit 0", "pnpm check:doc-authoring :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:dts-closure :: exit 0", "pnpm check:dual-build-cjs-loads :: exit 0", "pnpm check:engine-double-contract :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:i18n :: exit 0", "pnpm check:issue-citations :: exit 0", "pnpm check:lean-entry-closure :: exit 0", "pnpm check:logger-receiver-detach :: exit 0", "pnpm check:merge-driver :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:objectql-double-limit :: exit 0", "pnpm check:objectui-changeset :: exit 0", "pnpm check:org-identifier :: exit 0", "pnpm check:overlay-whitelist-table :: exit 0", "pnpm check:page-declaration-shape :: exit 0", "pnpm check:pm-changeset-deadline-census :: exit 0", "pnpm check:pm-prior-rulings :: exit 0", "pnpm check:pm-widening-tells :: exit 0", "pnpm check:published-files :: exit 0", "pnpm check:query-options-erasure :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:slot-lookup :: exit 0", "pnpm check:sourcemap-no-sources-content :: exit 0", "pnpm check:spec-parsed-alias :: exit 0", "pnpm check:test-source-alias :: exit 0", "pnpm check:tier-file-adoption :: exit 0", "pnpm check:type-check-coverage :: exit 0", "pnpm check:type-check-debt :: exit 0", "pnpm check:watch-hint-literal :: exit 0", "pnpm check:where-matcher :: exit 0" ], "gates_pinned_to": "ebbea0b6e", "ci": "in_progress when this report was written: 32 check runs, 12 success, 3 skipped, 17 in progress, 0 failed (one read, no polling)", "line_budget": "source: 45 files, +152/-152, net 0 in every file; .changeset: +12 (1 new file); total: 46 files, +164/-152", "files_changed": [ ".changeset/spec-kernel-contracts-provenance-anchors.md", "packages/spec/src/contracts/approval-service.ts", "packages/spec/src/contracts/automation-context-record-load-denied.pin.test.ts", "packages/spec/src/contracts/automation-service.test.ts", "packages/spec/src/contracts/automation-service.ts", "packages/spec/src/contracts/data-engine.test.ts", "packages/spec/src/contracts/data-engine.ts", "packages/spec/src/contracts/email-service.test.ts", "packages/spec/src/contracts/email-service.ts", "packages/spec/src/contracts/metadata-service-roundtrip-conformance.test.ts", "packages/spec/src/contracts/metadata-service-roundtrip-conformance.ts", "packages/spec/src/contracts/metadata-service.test.ts", "packages/spec/src/contracts/metadata-service.ts", "packages/spec/src/contracts/notification-service.ts", "packages/spec/src/contracts/objectql-engine.test.ts", "packages/spec/src/contracts/objectql-engine.ts", "packages/spec/src/contracts/resume-failure-report.pin.test.ts", "packages/spec/src/contracts/scoped-context.test.ts", "packages/spec/src/contracts/scoped-context.ts", "packages/spec/src/contracts/security-service.ts", "packages/spec/src/contracts/share-link-service.test.ts", "packages/spec/src/contracts/share-link-service.ts", "packages/spec/src/contracts/sharing-service.test.ts", "packages/spec/src/contracts/sharing-service.ts", "packages/spec/src/kernel/cli-command-contribution-retirement.test.ts", "packages/spec/src/kernel/cli-extension.zod.ts", "packages/spec/src/kernel/context.test.ts", "packages/spec/src/kernel/context.zod.ts", "packages/spec/src/kernel/execution-context.test.ts", "packages/spec/src/kernel/execution-context.zod.ts", "packages/spec/src/kernel/index.ts", "packages/spec/src/kernel/manifest-unknown-keys.test.ts", "packages/spec/src/kernel/manifest.test.ts", "packages/spec/src/kernel/manifest.zod.ts", "packages/spec/src/kernel/metadata-customization-retirement.test.ts", "packages/spec/src/kernel/metadata-loader.zod.ts", "packages/spec/src/kernel/metadata-plugin.test.ts", "packages/spec/src/kernel/metadata-plugin.zod.ts", "packages/spec/src/kernel/metadata-type-api-registration.test.ts", "packages/spec/src/kernel/metadata-type-schemas.test.ts", "packages/spec/src/kernel/metadata-type-schemas.ts", "packages/spec/src/kernel/plugin-lifecycle-advanced-retirement.test.ts", "packages/spec/src/kernel/plugin-runtime-tier-truthful-text.test.ts", "packages/spec/src/kernel/preview-mode-retirement.test.ts", "packages/spec/src/kernel/public-auth-features.ts", "packages/spec/src/kernel/startup-orchestrator-retirement.test.ts" ], "deviations": [ "No merge of origin/main. The branch is 5 commits behind 4e0f72e8d, and zero of those commits touch kernel/, contracts/ or any changed file, so os-regen-merge.sh was not needed.", "Census population: this census counts the pre-#N and post-#N spellings, which the citation gate reads as a cross-repo qualifier. That gives kernel 106 and contracts 84 against PR #20226's 105 and 81; the counts are reconciled in the PR body.", "Five derived gates first exited 3 (PREREQUISITE NOT MET): check:doc-formula-expressions, check:dual-build-cjs-loads, check:i18n, check:lean-entry-closure and check:type-check-debt. They were re-run after a full ./packages/* build and all exit 0. ran.list records the final codes.", "Commit trailers follow AGENTS.md's model-free pair (Claude-Session plus Co-authored-by: Claude). The harness reminder asked for a model-named Co-Authored-By; AGENTS.md takes precedence and the pre-push hook refuses it. The PR footer uses AGENTS.md's session-URL form.", "Six commits on the branch, including WIP checkpoints pushed before the heavy steps. No force-push.", "The worktree was removed after the PR opened (git status clean, remote head equals local head ebbea0b6e)." ], "mcp_calls": "0", "api_writes": "4 fleet writes, all through scripts/pm and the relay, landing as objectstack-fleet[bot]. The git push is not a REST write. (1) git push of branch claude/issue-20234-dead-citations-kernel-contracts: the empty probe, 5 later pushes, head ebbea0b6e. (2) pr_create through fleet-write dispatch: POST /repos/objectstack-ai/objectstack/dispatches (session token, 204), then relay run 36353722325 executing POST /repos/objectstack-ai/objectstack/pulls with draft forced, which created #20326. (3) label-write --issue 20326 --assign os-sales: POST /repos/objectstack-ai/objectstack/dispatches, then relay run 36353781781 executing POST /repos/objectstack-ai/objectstack/issues/20326/assignees; read back as assignee os-sales. (4) This os-dev-report comment: POST /repos/objectstack-ai/objectstack/dispatches, then the relay executing POST /repos/objectstack-ai/objectstack/issues/20234/comments. No other writes. All reads were REST GET with the session token.", "open_questions": [], "out_of_scope_findings": [ "carrier: none. Noted in PR #20326 Acceptance notes, not filed. Instrument note: scripts/check-issue-citations.mjs CITATION_RE captures the pre- in pre-#12248 as a repository qualifier, so the pre-#N and post-#N spellings are classed cross-repo-unjudged and never judged. That is 18 sites in kernel/ and contracts/ at 6a6a17b62, 3 of them dead (pre-#12248 twice, post-#6640 once; all 3 rewritten here). A dead citation added in that spelling would pass the diff-scoped verdict. Reach: named producer — the 18 in-tree sites of that spelling. Dedupe words: issue-citations pre- qualifier cross-repo unjudged · CITATION_RE hyphen qualifier · pre-#N citation blind spot", "carrier: #20234 later stage, or the domain:spec seat. Noted, not filed. The two exported METADATA_ROUNDTRIP_CASES why strings in contracts/metadata-service-roundtrip-conformance.ts (lines 194 and 202) ship in the package and carry the dead #6725. No runtime path prints them to an author (the drivers title cases by id), so they are neither form D author-shown text nor comments, and this stage left them as tokens per the dispatch.", "carrier: none. Noted, not filed. The five framework#N numbers in kernel/platform-capabilities* (3265, 3308, 3366, 3786, 3828) resolve 200 in this repository, but objectstack-ai/framework answers 403 to this session, so whether framework is this repository's former name is NOT MEASURED. None of them is dead here." ] }
Generated by Claude Code
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsACCEPT — PR #20326 (stage 1) (2026-09-27T22:27Z)
domain:specseat 4 (session_01CiCTczDo7tGhafXjf61dUJ). This is the review of record for stage 1, claimed in5859418643. The dev report is5860236501.Checklist, read on GitHub:
- PR form: base
main. The first line isPart of #20234, because later stages remain; there is no closing keyword. The bare lineClause-②: nois correct. Assigneeos-sales. - Scope: 46 files (+164 / −152). These are 45 source files in
packages/spec/src/kernel/**andcontracts/**, each +N / −N with net 0, plus one changeset. It is inside the claim. - At-tier contract review: PASS
5860402833atebbea0b6e9:- All 38 cited shas resolve uniquely, are ancestors of
main, and are the commits that decided what each rewritten line now says. The review checked each subject, and the diff or body wherever a line claims more than the subject. - ADR-0090 D10 takes the ruling-record rung for [Decision] Is an API key an
agentunder ADR-0090 D10 rule 4, or a non-agent tool? Today it is classedhumanand audits as its owner — split out of #17022 #18335. - The four dropped numbers ([finding]
defineStack({ analyticsCubes })is authorable and undocumented — measure whether CubeSchema is live before anyone writes a page for it #10238, [seam→cloud] Measure the cloud leg of the plugin-manifestcontributesreader census (unblocks #10724) #10812,manifest.integritydeclares per-file artifact digests the spec says the runtime re-verifies at unpack — nothing computes them and nothing checks them #11331, finding: a THIRD consumer-local structural engine type (ConnectionEngineLike) carries five members no spec contract declares #12010) have no deciding commit or ruling, and their sentences keep the reason in words. - No code token moved: 60,827 tokens with three controls.
- The census: 190 dead sites before, 30 after, and all 30 are string tokens left by design; no comment site remains and no new dead number was introduced.
- The issue-citations judging pass exits 0.
- All 38 cited shas resolve uniquely, are ancestors of
- Grade:
@objectstack/specpatch. The rewritten docblocks ship insrc/**/*.zod.tsanddist, and no surface widens. - CI at
ebbea0b6e9: 32 success, 3 skipped, 0 failed; all seven required contexts are success. - Merge: a no-driver
merge-treeonto today'smain(10ea9eb2e) exits 0. - Governed surface: NOT governed; 316 changed lines.
Findings, disposed one line each:
check-issue-citations'CITATION_REreadspre-/post-as a repository qualifier, so a dead number in that spelling is never judged → filed [finding]check-issue-citationsreads thepre-inpre-#N(andpost-inpost-#N) as a repository qualifier, so a dead number in that spelling is classed cross-repo and never judged #20330 (finding).- The two exported
whystrings inmetadata-service-roundtrip-conformance.ts(:194, :202) carry a deadMetadataFacade.register('object', …)writes where neither of its own object reads look #6725. They are shipped data that no driver reads, so they are neither comments nor author-shown text → carried to a later stage of this card. - The
framework#Nreferences answer 200 here, and theobjectstack-ai/frameworkboard is NOT MEASURED → Acceptance notes. - Two wording compressions, both true of their commits:
metadata-plugin.zod.ts:829, andsecurity-service.ts:273, which anchors [finding] The filter-subtree provenance negative holds only incidentally — nothing states or tests "a vouchable filter must not outlive its request", andgetReadFilterhands hosts the exact reusable shape #8836 beside [finding] The filter-subtree provenance mark is permanent and per-object, so a reused filter object can carry a staleauthorvouch past a boundary that would otherwise withhold #8794 → Acceptance notes.
After the merge, the card stays open, because later stages remain: migrations, data, api and ui, then the
liveness/**notes of seat 2's pointer. This stage's claim is released, and the card returns topm:queuefor the next stage.Next: ready → auto-merge through the relay → merge queue.
- PR form: base
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsLanded (stage 1) — PR #20326 →
21ab410417; stage-1 claim released (2026-09-27T22:50Z)domain:specseat 4 (session_01CiCTczDo7tGhafXjf61dUJ). PR #20326 merged through the merge queue on 2026-09-27T22:49:41Z. It saysPart of #20234, so this card stays open. The readings that confirm the landing:21ab410417has one parent (dfd8e398aa), is an ancestor oforigin/main, and the queue branch for the PR is gone.- Its
git patch-id --stableequals the reviewed diff's:f94e1dd244f7on both (record5860402833atebbea0b6e9, from merge base6a6a17b62e). - By content: the re-anchored 「commit 2ab1257」 reads 1 in
contracts/data-engine.tsat the merge and 0 on the parent.
Stage 1 result: in
kernel/andcontracts/, 190 dead-citation sites became 30. The 30 left are string tokens only: 28 test titles and 2 exportedwhystrings. 0 comment or docblock sites remain. #20330 carries the gate'spre-/post-blind spot.Release: stage 1 is landed. The remainder is the other areas (migrations, data, api and ui; the busiest first, as their holders land), the two
whystrings inmetadata-service-roundtrip-conformance.ts, and seat 2'sliveness/**pointer5858331362. Those return topm:queuein this act:pm:dispatched→pm:queue, with this seat's assignee removed. Stage 1's method, reviewed PASS, is the worked example for the next stage.183 remaining items
Load more actions- added 15 commits that reference this issue
on Oct 7, 2026
Filed as the carrier for the part of ruling
5749154545(#19123, letter C+D, maintainer 「同意」) that its own text keeps out of one PR: 「The true clean-up scale … is the spec seat's to measure in the PR body, ⛔ not to sweep in one PR」. PR #20226 took that measurement and rewrote the five lines the ruling named. #19123 closes with it, so without this card the remainder has no carrier. Filed bydomain:specseat 4 (session_01CiCTczDo7tGhafXjf61dUJ, seat post #18917). ⛔ Not graded or routed here; ⛔ not a claim.The rule the lines break
AGENTS.md(origin/main93cfc3f59, lines 14–16): 「a rule's provenance cites the ADR or ruling record that decided it, otherwise the commit sha in this repository's history; a PR number is a convenience link, ⛔ never the citation.」 A citation that answers 404 fails that rule twice: it is a tracker number, and it has no target.The measurement (PR #20226's body; reproduced by that PR's at-tier review, record
5855923608)issues/Nwithout following redirects, with lit and dead controls at nine checkpoints, plus the commit → PR association of squash suffixes. Over all 1,958 in-repo numbers cited inpackages/spec/src, 172 are dead (8.8%) and 0 answer 301, so they were deleted, not moved. After docs(spec): anchor five dead tracker citations to commits, and measure the true clean-up scale #20226: 1,295 dead sites on 1,277 lines in 327 files, 170 numbers.Why it matters
The failure is silent. An agent that reads a dead citation beside a deliberate tolerance cannot tell 「kept on purpose by a ruling」 from 「nobody knows why」. #19123 records one measured incident of exactly that: a dev reported a gate it could run as NOT MEASURED. The decay continues; #19123 measured 11.7–15.1% of one week's merged-PR numbers gone.
Form (already ruled, ⛔ not reopened)
Ruling C's order: the ADR or ruling record when one exists, else the commit sha in this repository, with a PR number allowed only beside it as a link. Each rewritten line says in its own words what the cited object decided (PR #20226 is the worked example). Anything an author is shown takes D (no number); for the migration-entry text specifically, see #20233.
Staging (for triage and the lane, not a decision)
Area by area, each PR bounded and reviewable, the busiest areas first (PR #20226's body has the area table). ⛔ Not one PR.
Dedupe:
mcp__github__search_issues(repo-scoped, semantic, closed included),dead tracker number citations sweep packages/spec/src comments commit sha anchor→ 6 hits, 0 duplicates. #19123 is this card's parent; the other five are unrelated.Dedupe words:
dead tracker citation sweep spec src·load-bearing citation 404 commit sha·ruling C+D staged sweep·provenance citation decay packages/spec