Skip to content

dead tracker citations in the domain:spec packages (84 sites, 21 numbers, 23 files): the ruling C+D stage for this lane (from #20556) #20597

Description

@objectstack-fleet

Filing gate: ① a family with a named population. Class (a): shipped source cites a tracker number that answers 404, the rot that ruling C+D on #19123 (5749154545, maintainer 「同意」) set out to remove. reach: source comments in published packages. The census was measured, not estimated.

Filed by the triage seat (objectstack-wide, seat post #6015, session_01AavokzJ5DndAwitDXvKy4U) as step 2 of #20556. That card is the carrier for dead citations outside packages/spec/src, and its first deliverable, the split by lane, is 5884031174 (domain:spec seat 2).

The population (census 5884031174, origin/main f11b5f20a2)

  • This lane: 84 dead sites (allocated-but-absent), 21 distinct numbers, in 23 files.
  • Largest packages: packages/lint only (the lane table anchors packages/lint to domain:spec).
  • Instrument: node scripts/check-issue-citations.mjs --census --json, the gate's own, read-only. Its declared surface is comment prose in packages/**/src/**/*.{ts,tsx}, with string literals blanked. A site outside it is not swept, and that is not the same as clean.

Control set (the pre-#N sites PR #20554 made visible, all 404)

The line numbers are from #20556's filing. The census found some one or two lines off after tree drift.

Direction (triage's grade, on the first comment)

Dedupe: #20556 (the carrier), #20234 (the packages/spec/src stages) and #19123 (the ruling). No other card carries this lane's sites.

Activity

  1. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 6
    Session: session_014EJ1ED8X4MMrT18BhVx4tx
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-20597-lint-dead-citations
    Worktree: objectstack-issue-20597
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface: comment and docblock lines that cite a tracker number answering 404, re-anchored in ruling C+D's form C as #20234 applies it. The files are the 23 packages/lint/src/ files of the census 5884031174 (84 sites at f11b5f20a2):


    Generated by Claude Code

  2. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 20597,
      "status": "done",
      "branch": "claude/issue-20597-lint-dead-citations",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/20612",
      "session": "session_014EJ1ED8X4MMrT18BhVx4tx (subagent; the parent PM session id, also the relay envelope session derived from the container)",
      "premise_still_valid": true,
      "summary": "The packages/lint stage is done as draft PR #20612 (Part of #20597, Clause-②: no, assignee os-tesla). Hypothesis 1 holds exactly: the gate's own --census --json at the tip 7a1faf1a5d reads 84 dead sites, 21 numbers, 23 files, equal per file to the claim. PR #20593 was still open at every read (last 07:39Z), so authoring-rules.ts (5 sites) stays at its base blob and the PR says Part of, not Fixes: those 5 sites remain on the card, with anchors already verified for the follow-up. In the other 22 files all 79 census sites plus one slash-joined #5775/#6629 the grammar does not read are rewritten in ruling C+D form C (81 comment lines out, 81 in), to 19 distinct commit shas, each unique, an ancestor of main, single-parent, naming the number in its own message or diff, and deciding the rule its line states. No code token, string, message, hint or rule id moves; 0 tracker numbers are net-added; no generated page projects from these docblocks, so nothing was regenerated; one @objectstack/lint patch changeset. Head census: 84 -> 5 (all in authoring-rules.ts); the pre-#8404 control at validate-searchable-fields.ts:312 is listed dead before and gone after. One dead number sits inside an author-shown string (validate-react-page-props.ts:1198, #11284) and is left byte-identical as form D.",
      "census": {
        "instrument": "The gate's own `node scripts/check-issue-citations.mjs --census --json` (board enumerated in full), filtered to packages/lint/. Cross-checked by my own raw instrument in scratch (census-raw.mjs + probe.sh): every #N (2-6 digits) in the 23 files, classed by the TypeScript 6.0.3 parser as comment/string/code with its joined qualifier, and every distinct number of 100 or more probed by REST GET issues/N without following redirects. Controls: lit #16862 #16847 #17698, dead #16714 #16715 #16697 at the start, every 100 numbers and the end.",
        "before": "base 7a1faf1a5d, gate census 2026-09-29T06:42:03Z-06:45:24Z (185 pages, frontier #20606): 84 dead sites (allocated-but-absent) in 23 files, 21 numbers, per file equal to the claim. Raw cross-check 06:47:36Z-06:50:11Z: 1,323 sites (1,259 comment, 64 string, 0 code); 360 numbers probed, 339 answer 200, 21 answer 404, 0 other; the same 21 numbers; its dead comment sites are the gate's 84 plus one slash-joined #6629 at validate-page-field-bindings.ts:208; one dead string site, validate-react-page-props.ts:1198 (#11284). Controls 15/15 lit=200 and 15/15 dead=404 over 5 checkpoints.",
        "after": "head 0c7b847f18, gate census 2026-09-29T07:28:22Z-07:31:52Z (185 pages, frontier #20611): 5 dead sites, all in the excluded authoring-rules.ts (:198 #10064, :1117 #16659, :1687 #8546, :1713 and :1733 #19370); 0 in the 22 edited files. Raw cross-check 07:32:03Z-07:34:35Z: 1,243 sites, 344 numbers, 339 answer 200 (the same 339), 5 answer 404 (#8546 #10064 #16659 #19370 in authoring-rules.ts comments, #11284 in the :1198 string); no number at head absent at base; none newly non-200; controls 15/15 and 15/15 over 5 checkpoints.",
        "per_number": "number sites -> anchor (evidence). #13681 x9 -> 8ed9c54b4 (lands the per-iteration containment rule pair and its measured minimal catch; its diff wrote all nine lines; #14394 kept). #8663 x13 -> 192213f66 (three write rules ask anchor provenance; body names #8663; diff wrote the [#8663] lines in all three files). #13657 x3 -> b003cf2e8 (post-hook declared-field door; diff wrote the lines). #10064 x6 -> def0d3e63 (name-keyed wire paths; body: #10064 maintainer ruling 2026-08-20 Option A). #19370 x5 -> a227afa41 (security-role-word crosses whole; its body names #19370 as the card it lands, ruling batch #203 item 3 letter B). #9798 -> c7655d472 (its body names #9798: restores the sys_comment unscoped multi-delete refusal that could not fire, the declared-but-unenforced fail-open; #9261 and ADR-0110 D3 kept). #8404 x6 -> b849e6911 (searchable-field-unprovisioned warning and its optional provenance index). #10001 x8 -> f1b5ad39a (the ViewItem RECORD rung). #6290 x5 -> e9b526597 (current_user into SCOPE_ROOTS, the field-level rule, option visibleWhen walked; #6584 is its own PR and is kept). #11284 x4 -> 5383fa670 (deprecate-first convergence; changeset names #11284, ruling 2026-08-23). #6629 x3 (2 census + slash-joined :208) -> cd584d559. #8664 x2 -> 8798cd2a6 (diff wrote both lines). #14700 x3 -> de3c52beb (diff wrote all three). #6124 -> b3c1f3cd5 (#6124's own squash commit, leg 1). #10262 x3 -> 2aca1bc4c (the test seam; diff wrote all three). #11060 x2 -> 815585513 (body: Maintainer ruling on #11060 (2026-08-23): option A). #13653 x4 -> 36d287803 (hook-body ctx.api readonly gate, shares buildReadonlyIndex). #12950 -> 225e7690f (created validate-component-types.ts; stage 5's anchor for the number). #6528 -> 3510e4a25 (#6528's own squash commit; the line read PR #6528).",
        "hypotheses": "1 holds: 84/21/23 at the tip, per file equal to the claim. 2 holds: only comment/docblock lines moved; the one dead string (a finding message at validate-react-page-props.ts:1198) stays byte-identical; 85 repository string/regex literals carrying the 21 numbers read no rewritten line. 3 holds and conditions the card: PR #20593 open at 06:40Z, 07:34Z and 07:39Z, so authoring-rules.ts is excluded; at 07:34Z the 9 open PRs' full file lists and the newest Claim: on all 11 pm:dispatched cards name none of the other 23 paths (PR #20593's files: authoring-rules.ts, index.ts, validate-flow-trigger-readiness.ts and its test). 4 holds: validate-searchable-fields.ts:312 pre-#8404 dead before, gone after. 5 holds with nothing to regenerate: no page under content/docs/references names any of the 19 numbers and no generator reads packages/lint/src; no release page touched."
      },
      "tests": "At head 0c7b847f18 unless noted.\nClosure build under os-verify-lock: `timeout 570 pnpm exec turbo run build --concurrency=2 --filter=./packages/* --filter=./packages/*/*` -> Tasks: 71 successful, 71 total; VERDICT command-exit 0 (held 4m32s on a shared box). Before the merge, `turbo run build --filter=@objectstack/lint...` -> 4 successful, VERDICT 0.\n`pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2` under the lock -> Test Files 115 passed (115), Tests 5363 passed (5363); then `pnpm --filter @objectstack/lint typecheck` -> exit 0, check:test-typecheck OK (2 files / 6 errors / 2 pinned signatures held); VERDICT command-exit 0. The same two runs passed with the same counts at the pre-merge head 2ce32f6b48. No consumer run is owed: no public surface byte moves beyond comments.\nMechanical guard (scratch tokcmp.mjs: TypeScript 6.0.3 leaf tokens, JSDoc kinds excluded, controls mutate the head text in memory only), merge base c96beb2707 vs HEAD over 22 files (byte-identical at 7a1faf1a5d and at the merge base), 54,508 base tokens. Real run: filesWithTokenChange=0, exit 0. Comment-insertion control (runtime-gate.ts): 0, exit 0. Code-insertion positive control (validate-hook-body-writes.ts): DIFFER at token 216, exit 1. String positive control (a parser-located StringLiteral in validate-react-page-props.ts): DIFFER at token 5, exit 1.\nLine balance: every touched .ts file +N/-N, 81/81 over 22 files; every changed line comment-shaped; line counts equal at base and head.\nTracker numbers: added-not-removed empty in every file; 80 sites and 19 numbers net-removed (79 census + the slash-joined #6629); no PR #N on an added line; the numbers kept on added lines (#5659 #5775 #8310 #8340 #9261 #9313 #12183 #13390 #14253 #14394 #19143 as issues, #6584 as a pull request) all answer 200.\nShas: 19 distinct on added lines, 0 on removed lines. Each `rev-parse --disambiguate` count is 1; each `merge-base --is-ancestor` exits 0 against origin/main and against the base; each is single-parent; the repo is not shallow; control leg e9584681a4 exits 0. The commit's own message names the number for 15 of 19, its own diff for 17 of 19, one or the other for 19 of 19.\nLint, a proven narrowing: `eslint --no-inline-config --format json` over the 22 touched .ts files -> 22 files, 0 errors, 0 warnings. isPathIgnored false for all 22, read through eslint's API. eslint.config.mjs:327-328: type-aware linting is never enabled, so a comment edit cannot move an untouched file's verdict. The repo-wide pnpm lint is CI's run.\nChangeset measurement: files[] ships dist; 12 of the 19 shas appear in the built dist (8ed9c54b4 and def0d3e63 in index.d.ts, b849e6911 in index.js and index.d.ts, and others); positive control: the unchanged sentence 'the near-miss shape: a `try_catch` that declares no `catch`' of an exported docblock is in index.d.ts. Hence patch.\nMerge probe: a no-driver merge-tree of 0c7b847f18 onto origin/main 0f6dcac5e9, from a bare shared clone in scratch (no merge.* config), exits 0; the two commits main gained after the merge touch none of the 23 files.\nNo 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 (self-test 114 cases in 8 batteries; the live diff-scoped run judged 18 citations across 22 files, 17 resolve as issues and 1 as a pull request, the kept #6584)",
        "pnpm check:doc-authoring :: exit 0 (sibling prose-id baseline holds: 810 pinned sites across 230 files, no growth)",
        "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.list :: exit 0 (54 derived, 54 run, 0 NOT-MEASURED, 0 UNRUN, a derived zero, at 0c7b847f18)",
        "bash scripts/pm/os-verify-lock.sh -c 'timeout 570 pnpm exec turbo run build --concurrency=2 --filter=./packages/* --filter=./packages/*/*' :: VERDICT command-exit 0 (71/71 tasks; run before the derived gates)",
        "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-empty-changeset.mjs --base origin/main :: exit 0",
        "node scripts/check-empty-changeset.mjs --self-test :: exit 0",
        "node scripts/check-issue-citations.mjs :: 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-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/spec run check:duration-unit-keys :: exit 0",
        "pnpm check:changeset-gate-self-tests :: exit 0",
        "pnpm check:cross-package-test-inputs :: exit 0",
        "pnpm check:doc-authoring :: exit 0",
        "pnpm check:docs-transcript-drift :: 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:gitlink-declared :: exit 0",
        "pnpm check:issue-citations :: exit 0",
        "pnpm check:lean-entry-closure :: exit 0",
        "pnpm check:logger-receiver-detach :: exit 0",
        "pnpm check:nul-bytes :: exit 0",
        "pnpm check:objectui-changeset :: exit 0",
        "pnpm check:org-identifier :: exit 0",
        "pnpm check:page-declaration-shape :: exit 0",
        "pnpm check:pm-changeset-deadline-census :: exit 0",
        "pnpm check:published-files :: 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:test-source-alias :: exit 0",
        "pnpm check:tier-file-adoption :: exit 0",
        "pnpm check:watch-hint-literal :: exit 0"
      ],
      "gates_pinned_to": "0c7b847f18",
      "ci": "in_progress when this report was written (2026-09-29T07:40:47Z): 31 check runs on 0c7b847f18, 11 success, 3 skipped, 17 in progress, 0 failed (one read, no polling)",
      "line_budget": "source: 22 .ts files, +81/-81, net 0 in every file; .changeset: +11 (1 new file); total against origin/main: 23 files, +92/-81 (173 changed lines, under 5,000)",
      "files_changed": [
        ".changeset/lint-provenance-anchors.md",
        "packages/lint/src/data-model-rules.ts",
        "packages/lint/src/flow-template-grammar.ts",
        "packages/lint/src/lint-flow-patterns.ts",
        "packages/lint/src/lint-liveness-properties.ts",
        "packages/lint/src/reference-integrity-suite.ts",
        "packages/lint/src/runtime-gate.ts",
        "packages/lint/src/validate-action-body-writes.ts",
        "packages/lint/src/validate-component-types.ts",
        "packages/lint/src/validate-empty-combinators.ts",
        "packages/lint/src/validate-expressions.ts",
        "packages/lint/src/validate-flow-node-writes.ts",
        "packages/lint/src/validate-hook-body-writes.ts",
        "packages/lint/src/validate-list-view-field-refs.ts",
        "packages/lint/src/validate-page-field-bindings.ts",
        "packages/lint/src/validate-react-page-props.ts",
        "packages/lint/src/validate-readonly-action-writes.ts",
        "packages/lint/src/validate-readonly-flow-writes.ts",
        "packages/lint/src/validate-readonly-hook-writes.ts",
        "packages/lint/src/validate-searchable-fields.ts",
        "packages/lint/src/validate-security-posture.ts",
        "packages/lint/src/validate-sortable-fields.ts",
        "packages/lint/src/validate-translation-references.ts"
      ],
      "deviations": [
        "PR first line is `Part of #20597`, not `Fixes`: PR #20593 had not landed at any read, so authoring-rules.ts (5 of the card's 84 sites) is excluded at its base blob and those sites stay on the card. Its anchors are verified for the follow-up: :198 #10064 -> def0d3e63; :1117 #16659 -> ecdfc9411 (added flow-schedule-organization-missing); :1687 '(PR #8546)' -> ba5e957ef (that PR's squash commit); :1713 and :1733 #19370 -> a227afa41.",
        "Two changed lines beyond the census's sites. validate-page-field-bindings.ts:208 carried '#5775/#6629', a slash-joined dead number the citation grammar does not read; it now reads 'the same #5775 residue class (commit cd584d559)', stage 5's precedent for the slash-joined #9972. runtime-gate.ts:780 is the other half of the rewritten :779 sentence and held no number.",
        "validate-expressions.ts:770 quotes packages/formula's SCOPE_ROOTS docblock ('the last one this list was missing (#6290)'); the quote now stops before the number, verbatim, with the commit outside the quotation. validate-expressions.ts:571 keeps #6584 (live, the anchor commit's own PR) beside e9b526597, so the gate reads it as resolves-as-pull-request.",
        "Merged origin/main once (0c7b847f18, merging c96beb2707): the first derivation at 2ce32f6b48 read STALE TREE because scripts/sdui-manifest.record.json changed on main. Clean merge, no driver-routed path, no lockfile change, none of the 23 files; install, closure build, tests and gates re-ran after it. origin/main then moved two more commits (ba4648dadf, 0f6dcac5e9 = stage 6's PR #20606), neither touching this diff; the no-driver merge-tree onto 0f6dcac5e9 exits 0, so no second merge.",
        "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 trailer check passed on every push. The PR body ends with the session-URL footer; its body read back byte-identical (17,054 bytes).",
        "The branch has the empty probe push, two commits (rewrite, changeset) and one merge commit; no force-push. The shared .git saw ordinary fetches of main, this worktree's add, and a bare --shared probe clone inside this issue's scratch (deleted). Scratch work lives in the scratchpad's issue-20597/ subdirectory.",
        "Cleanup: the worktree's node_modules and the worktree itself are removed right after this comment is read back; the remote head equals the local head 0c7b847f18."
      ],
      "mcp_calls": "0",
      "api_writes": "3 fleet REST writes, all through scripts/pm and the fleet-write relay, landing as objectstack-fleet[bot]; git push is not a REST write. (0) git push of branch claude/issue-20597-lint-dead-citations: the empty probe, then 3 pushes; head 0c7b847f18. (1) pr_create through scripts/pm/fleet-write/dispatch.mjs (dry-run first): POST /repos/objectstack-ai/objectstack/dispatches (session token, 204), then relay run 36537921994 executing POST /repos/objectstack-ai/objectstack/pulls with draft forced; it created #20612, whose body read back byte-identical. (2) label-write --issue 20612 --assign os-tesla: POST /repos/objectstack-ai/objectstack/dispatches, then relay run 36538005099 executing POST /repos/objectstack-ai/objectstack/issues/20612/assignees; assignee os-tesla read back; no label written (documentation, size/m and tooling are the auto-labelers'). (3) This os-dev-report comment through post-stamped.mjs: POST /repos/objectstack-ai/objectstack/dispatches, then the relay executing POST /repos/objectstack-ai/objectstack/issues/20597/comments. No other writes; the card's assignee was never written. All reads were plain REST GET with the session token.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: #20597 itself, after PR #20593 lands. Noted in PR #20612 Acceptance notes, not filed. authoring-rules.ts keeps 5 dead sites (:198 #10064, :1117 #16659, :1687 #8546, :1713 and :1733 #19370); anchors verified above.",
        "carrier: none (承接者:无), needs a form-D carrier; noted in Acceptance notes, not filed. validate-react-page-props.ts:1198 is the react-prop-deprecated finding message, ending 'is removed after the deprecation window (#11284).' An author sees it, so it takes ruling D (no number); scripts/doc-authoring-prose-id.baseline.json pins it (#11284: 1 for this file). Removing it is a string change, outside this comment-only scope.",
        "carrier: none. Noted in Acceptance notes, not filed: surfaces the census does not sweep still cite these dead numbers. packages/lint/src/*.test.ts titles and comments (#6290, #8404, #8663, #10001, #10064, #10262, #13681, #19370 and others); hand-written docs content/docs/automation/hook-bodies.mdx (#8663, #13657), content/docs/automation/flows.mdx (#11060), content/docs/deployment/validating-metadata.mdx (#19370).",
        "carrier: the lane stage card that owns packages/formula (one of #20594 / #20595 / #20596; the census counts its 4 sites). Noted, not filed. packages/formula/src/cel-engine.ts cites the dead #6290 at :120, :147, :160 and :173, including the docblock validate-expressions.ts:770 quotes; e9b526597 is the verified anchor."
      ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #20612 at head 0c7b847f18 · domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx) · 2026-09-29T08:02Z

    The seat reviewed the dev report 5885887024 against GitHub and the diff.


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (the packages/lint sweep, 22 of 23 files) — PR #20612 → aa23e2c8fd; parked on #20553 · 2026-09-29T08:31Z

    domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx). PR #20612 merged through the merge queue at 2026-09-29T08:30Z, after the ACCEPT 5886175996 and the at-tier PASS 5886146186. It says Part of #20597, so this card stays open.

    Parked: pm:dispatched → pm:blocked, with this seat's assignee removed and Blocked-by: #20553 prepended to the body.


    Generated by Claude Code

  5. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlocked: #20553 closed (PR #20593 → e651556e2d) · domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx) · 2026-09-29T09:20Z

    This releases the park in 5886592368, the latest state transition on this card. No PR has merged on this card since it.


    Generated by Claude Code

  6. 11 remaining items

  7. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 7 (stage 3, the last: the form-D finding message)
    Session: session_014EJ1ED8X4MMrT18BhVx4tx
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-20597-react-prop-deprecated-message
    Worktree: objectstack-issue-20597
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface: the last item the stage-2 landing record 5889811174 names, nothing wider.

    This is the last stage: the PR says Fixes #20597.


    Generated by Claude Code

  8. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 20597,
      "status": "done",
      "branch": "claude/issue-20597-react-prop-deprecated-message",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/20641",
      "session": "session_014EJ1ED8X4MMrT18BhVx4tx (subagent; the parent PM session id, also the session the relay envelopes carried, derived from the container)",
      "premise_still_valid": true,
      "summary": "Stage 3, the card's last item, is draft PR #20641 (Fixes #20597, Clause-②: no, assignee os-tesla). The react-prop-deprecated finding message at validate-react-page-props.ts:1198 no longer ends with '(#11284)', a number that answers 404. It now says in words what that decision was, read from the surviving record: the lint CHANGELOG entry for 5383fa6 (maintainer ruling 2026-08-23), whose commit also wrote this line. The react tier converges on the metadata-tier vocabulary, so the deprecated spelling keeps working through the deprecation window and is removed after it. The tag, prop and dep.replacedBy interpolations, the rule id, the severity and the hint are byte-identical. scripts/doc-authoring-prose-id.baseline.json loses exactly that one pin: the gate's own --census-ledger differs from the checked-in file by that single line, and the gate now reads 809 sites across 230 files, against 810 at stages 1 and 2. One @objectstack/lint patch changeset. All three hypotheses hold. The third holds with zero pins: no test, snapshot, doc or skill asserts the message text, so nothing was flipped and nothing was added.",
      "hypotheses": "1 holds: :1198 read exactly '... is removed after the deprecation window (#11284).'. GET issues/11284 answers 404, with control issues/5583 at 200. The CHANGELOG entry 5383fa6 records the decision (react tier converges on the metadata-tier spelling, deprecate-first, maintainer ruling 2026-08-23), and commit 5383fa670's own diff wrote this message line. 2 holds: the baseline pinned '#11284': 1 for this file only. The regenerated ledger differs by exactly that line; the file keeps '#5583': 1, and no other (file,id) pair moves. The gate reads 809/230 (was 810/230). 3 holds with an empty result. git grep at base for 'deprecation window (#11284)', 'removed after the deprecation window' and 'deprecated spelling of the metadata-tier' hits only the source line (the grep is not blind), and at head the first two exit 1. The rule id REACT_PROP_DEPRECATED / react-prop-deprecated appears only in the source, the index.ts barrel, two release-owned CHANGELOGs and validate-react-page-props.test.ts. That test asserts the rule id (the pastDeprecation filter, toEqual([]) at :116 and :204) and never the message. The sibling objectui at b120b66 has 0 hits (git grep exit 1; control 'deprecat' hits). No pin existed to flip. A new wording pin was not added: wording is not pinned unless a consumer parses it, and none does.",
      "tests": "At head 6c463cec86.\nUnder bash scripts/pm/os-verify-lock.sh (slot issue-20597-s3; VERDICT command-exit 0, held 578s on a shared box, acquired after 68s on the resumed slot):\n- NODE_OPTIONS=--max-old-space-size=4096 timeout 480 pnpm exec turbo run build --concurrency=2 --filter=./packages/* --filter=./packages/*/*: Tasks 71 successful, 71 total, BUILD_EXIT=0.\n- pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2: Test Files 115 passed (115), Tests 5379 passed (5379), TEST_EXIT=0.\n- pnpm --filter @objectstack/lint typecheck: TYPECHECK_EXIT=0; check:test-typecheck OK (2 files / 6 errors / 2 pinned signatures held).\nThe ratchet, both arms, as one-time controls (nothing left behind):\n- Stale arm: git restore --source=f29c83db13 of the baseline only (working tree; its blob fad4260e0b equals the base blob) over the new message. node scripts/check-doc-authoring.mjs exits 1 with 'STALE' listing exactly one pair, 'packages/lint/src/validate-react-page-props.ts #11284 (1 pinned, 0 measured)'. Restored with git checkout HEAD --; blob af8a33d216 equals HEAD and git diff HEAD is empty.\n- Growth arm: node scripts/ablation-replace.mjs put the old tail back over the new baseline (anchor x1 to x0, replacement x0 to x1). The blob became f5684f0774, which equals the base blob. The gate exits 1 with 'validate-react-page-props.ts #11284 (0 pinned, 1 measured)' at :1198. The tool proved the restore (blob 55de478256 equals HEAD, git diff HEAD empty), and a trap-armed git checkout HEAD -- re-checked it.\nTracker numbers: the only #N on a changed source line is the removed #11284; none added. Control-byte scan of the three changed files and the PR body: none.\nLint, a proven narrowing: pnpm exec eslint --no-inline-config --format json packages/lint/src/validate-react-page-props.ts reports 1 file, 0 errors, 0 warnings. Through eslint's API, isPathIgnored is false and calculateConfigForFile carries no parserOptions.project or projectService. eslint.config.mjs:327 says type-aware linting is never enabled, so a string edit cannot move an untouched file's verdict. The repo-wide pnpm lint is CI's.\nChangeset measurement: files[] = dist, README.md, CHANGELOG.md. The new sentence is in dist/index.js, index.cjs, runtime.js and runtime.cjs, one each; 'deprecation window (#11284)' is in none. The positive control 'Likely a typo of a contract prop. Fix it or remove it.' is in all four. Hence patch.\nMerge probe: a driver-free merge-tree of 6c463cec86 onto origin/main f1e921ab8e, from a bare --shared clone in scratch with no merge.* config (deleted after), exits 0. The 4 commits main gained since the base touch none of the 3 paths.\nNo behavioural ablation is owed, since no behaviour changes. No consumer sweep is owed: no export, type or rule id moves, and no consumer parses the text.",
      "gates": [
        "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands :: exit 0 (62 commands, change set 3 paths vs merge base f29c83db1)",
        "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.list :: exit 0 (62 derived, 62 run, 0 NOT-MEASURED, 0 UNRUN, a derived zero, at 6c463cec86)",
        "all 62 derived commands :: exit 0 each, the 56 build-free ones before the build and the 6 build-reading ones after it (check:docs-transcript-drift, check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:published-files, check:sourcemap-no-sources-content)",
        "pnpm check:doc-authoring :: exit 0 (sibling prose-id baseline holds: 809 pinned sites across 230 files, no growth, no burn-down unrecorded; was 810/230)",
        "pnpm check:issue-citations :: exit 0 (self-test 114 cases in 8 batteries); node scripts/check-issue-citations.mjs :: exit 0 ('no issue citations added against f29c83db1')",
        "pnpm check:nul-bytes :: exit 0",
        "rosters under a touched directory, run as well: node scripts/check-changeset-fixed.mjs, node scripts/check-published-list-mirrors.mjs (and --self-test), node scripts/check-dts-references.mjs --self-test, pnpm check:authz-resolver, check:console-injection, check:engine-double-contract, check:error-code-casing, check:filter-alias-parity, check:i18n-stale-fill :: exit 0 each; pnpm check:published-readme-exports :: exit 3 (prerequisite, before the build), then exit 0 after the build",
        "NOT MEASURED, as the derivation itself declares (a value from the workflow): check-issue-citations --census, check-shard-attestation --emit, check-test-completeness; CI's own path-scheduled jobs and type-check lanes are CI's"
      ],
      "gates_pinned_to": "6c463cec86",
      "ci": "in_progress at the one read (2026-09-29T12:40:31Z): 31 check runs on 6c463cec86, 9 success, 3 skipped, 19 in progress, 0 failed. No polling.",
      "line_budget": "3 files, +15/-2 (17 changed lines, under 5,000): validate-react-page-props.ts +1/-1, doc-authoring-prose-id.baseline.json +0/-1, .changeset +14 (1 new file)",
      "files_changed": [
        ".changeset/20597-react-prop-deprecated-message-words.md",
        "packages/lint/src/validate-react-page-props.ts",
        "scripts/doc-authoring-prose-id.baseline.json"
      ],
      "deviations": [
        "Commit trailers follow AGENTS.md's model-free pair (Claude-Session plus Co-authored-by: Claude), not the model-named Co-Authored-By the harness reminder asked for; the pre-push check:commit-card-trailers passed. The PR body ends with AGENTS.md's session-URL footer rather than the harness's emoji footer. The body read back byte-identical (8,627 bytes).",
        "The first locked run returned VERDICT queue-timeout (exit 99, never acquired): it waited its 540 s budget at the head of the queue while pid 6314 (issue-20233-s10's tests-inner.sh) held the lock for 20+ min. That run is NOT MEASURED, not a failure. The kept slot resumed at once and acquired after 68 s. The build-free gates ran during the wait.",
        "Two void first attempts, re-run correctly. (1) The first dist positive control ('is retired — the contract') read 0 because the bundle escapes the em dash as \\u2014; it was replaced by an ASCII control, which hits in all four files. (2) The first merge-tree probe failed to fetch abbreviated shas into the bare probe (no reading); it was re-run with full shas and exits 0.",
        "No merge of origin/main: it moved f29c83db13 to f1e921ab8e (4 commits), none touching the 3 paths or the baseline, and the driver-free merge-tree exits 0.",
        "The roster runs are recorded in a separate list, outside ran.list, so --ran reconciles exactly the 62 derived families.",
        "Scratch work lives in the scratchpad's issue-20597-s3/ subdirectory. The shared .git saw ordinary fetches of main, this worktree's add, and a bare --shared probe clone inside scratch (deleted). No force-push: the branch holds the empty probe push and one commit (6c463cec86). Cleanup: the worktree's node_modules and the worktree itself are removed right after this comment is read back; the remote head equals the local head."
      ],
      "mcp_calls": "0",
      "api_writes": "3 fleet REST writes, all through scripts/pm and the fleet-write relay, landing as objectstack-fleet[bot]; git push is not a REST write. (0) git push of claude/issue-20597-react-prop-deprecated-message: the empty probe, then one push of 6c463cec86. (1) pr_create through scripts/pm/fleet-write/dispatch.mjs (dry-run first): POST /repos/objectstack-ai/objectstack/dispatches (204), then relay run 36569517147 executing POST /repos/objectstack-ai/objectstack/pulls with draft forced. It created #20641, whose body read back byte-identical. (2) label-write --issue 20641 --assign os-tesla: POST .../dispatches, then relay run 36569619930 executing POST /repos/objectstack-ai/objectstack/issues/20641/assignees. Read back: os-tesla. No label was written (size/s, documentation and tooling come from the auto-labelers, and the dispatch named none). (3) This os-dev-report comment through post-stamped.mjs: POST .../dispatches, then the relay executing POST /repos/objectstack-ai/objectstack/issues/20597/comments. No other writes; the card's assignee was never written. All reads were plain REST GET.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (承接者:无). Noted in PR #20641 Acceptance notes, not filed (dormant, no class). react-prop-deprecated cannot fire today. The built REACT_BLOCKS carries 0 props with deprecated (4 blocks, 37 interactions), and the only deprecated spellings there ever were, ListView objectName / viewType, now sit in REACT_RETIRED_OVERLAY_PROPS and report react-prop-retired. The mechanism stays for a future deprecation. Dedupe words: react-prop-deprecated dormant, REACT_BLOCKS deprecated empty, deprecate-first mechanism.",
        "carrier: none (承接者:无). Noted in Acceptance notes, not filed (a stale test comment, outside the claim's surface). The header comment of validate-react-page-props.test.ts (:32 to :36) says every objectName ListView fixture 'carries exactly one deprecation warning' and that the warning 'is pinned in the vocabulary describe block below'. The assertions at :116 and :204 expect zero, and the describe block below pins react-prop-retired, not a deprecation warning. The same file still cites the dead #11284 in the comment at :77 and in the describe title at :83; that is the test-title family stage 1 already noted. Dedupe words: pastDeprecation stale comment, react-page-props test header.",
        "carrier: none (承接者:无). Noted in Acceptance notes, not filed. The same file's other author-shown id: the REACT_CHART_AGGREGATE_INVALID hint at :458 contains 'objectstack#5583 ruled that …'. #5583 answers 200, so it is not a dead citation and not on this card. Ruling D would still take it, and it stays in the prose-id baseline among the 809 adjudicated sites. Dedupe words: objectstack#5583 hint, chart aggregate groupBy hint tracker id, prose-id baseline burn-down."
      ]
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (stage 3, the last) — PR #20641 at head 6c463cec86 · domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx) · 2026-09-29T12:54Z

    The seat reviewed the stage-3 dev report 5890531733 against GitHub and the diff.

    • PR shape: draft, base main, first line Fixes #20597, Clause-②: no, assignee os-tesla. 3 files (+15 / −2):
      • packages/lint/src/validate-react-page-props.ts (+1 / −1);
      • scripts/doc-authoring-prose-id.baseline.json (−1);
      • a @objectstack/lint patch changeset.
      • NOT governed. The driver-free merge probe against origin/main exits 0.
    • Result: the REACT_PROP_DEPRECATED finding message no longer ends with (#11284), a number that answers 404. It says in words what that decision was: the react tier converges on the metadata-tier vocabulary, deprecate-first, so the deprecated spelling keeps working through the window and is removed after it. The prose-id baseline loses exactly that one pin.
    • Evidence (dev):
      • The ratchet was checked in both directions. The old baseline over the new text reads STALE, naming exactly this pair. The old text over the new baseline reads growth, at :1198.
      • No test, snapshot, doc or skill asserts the message text, so nothing needed flipping.
      • The build ran 71 of 71 tasks; @objectstack/lint passed 115 files / 5,379 tests and its typecheck.
      • 62 derived gate families, all run with exit 0.
    • At-tier contract review: 5890702936 on the PR, at CONTRACT_REVIEW_TIER, on this head — PASS.
      • The message's prefix, interpolations, rule id, severity and hint are byte-identical. The new tail restates the decision as its surviving record states it (the CHANGELOG entry 5383fa6 and commit 5383fa670, which wrote this line).
      • Shrinking the baseline is the landing author's remedy under the gate's own header.
      • No consumer parses the message; objectui reads this rule only by id.
      • The card's population reads 0 after this, and nothing else is owed by the card.
      • patch with Clause-②: no is right.
      • The seat checked its transcript: served at tier, read-only, one write (that comment).
    • Findings:
    • Landing: when every check on this head is green or a roster skip (4 were still running at this stamp), this seat runs the pre-landing checks, flips it ready and arms auto-merge. Fixes #20597 closes the card with the merge.

    Generated by Claude Code

  10. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (stage 3, the last) — PR #20641 → c6b37cd08d; card closed · domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx) · 2026-09-29T13:43Z


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Post-landing census for #20636, step 4 of triage's 5889747311 · domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T01:49Z

    Instrument: node scripts/check-issue-citations.mjs --census --json (the gate's own, read-only), run twice on the same tree, origin/main f8178ffece. One run used the extractor PR #20989 landed (merge a5bce40888); the other used the extractor of its first parent, 315888d66. Both enumerated the same board: 189 pages, frontier #21014. Repo-wide, dead (allocated-but-absent) goes from 740 to 754: 14 newly visible, 0 lost. The seat re-probed six of the cited numbers over REST, all 404, with lit controls #5286 and #12624 at 200.

    This lane (packages/lint (domain:spec)): 0 newly visible. The lane's dead total on this tree is 0 with the old extractor and 0 with the new one.

    Nothing newly visible in this lane, and the lane's dead total is 0 with either extractor. No follow-up stage is owed.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions