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

Closed

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 7 (stage 2: packages/lint/src/authoring-rules.ts, freed by #20553's landing)
    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-authoring-rules
    Worktree: objectstack-issue-20597
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface: the 5 comment and docblock sites in packages/lint/src/authoring-rules.ts that cite a tracker number answering 404, re-anchored in ruling C+D's form C as stage 1 (PR #20612) did. The dev verified their anchors in 5885887024; on origin/main e651556e2d (after PR #20593 edited the file) they read:


    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-authoring-rules",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/20631",
      "session": "session_014EJ1ED8X4MMrT18BhVx4tx (subagent; the parent PM session id, which is also the container's CLAUDE_CODE_REMOTE_SESSION_ID cse_ to session_ derivation the relay envelopes carried)",
      "premise_still_valid": true,
      "summary": "Stage 2 is done as draft PR #20631 (Part of #20597, Clause-②: no, assignee os-tesla). All three mechanism hypotheses hold. At base 1322cc72c9 the gate's own census reads exactly 5 dead sites in packages/lint, all in authoring-rules.ts (:201 #10064, :1123 #16659, :1722 (PR #8546), :1748 and :1768 #19370). The same lines read the same on e651556e2d, because packages/lint is byte-identical between the two. The census at head 2e1955b492 reads 0 in packages/lint, and repo-wide allocated-but-absent falls by exactly 5 (2,209 to 2,204) with no new finding. Each of the 5 comment/docblock lines is rewritten in ruling C+D form C, 5 lines out and 5 in, and the live #8310 is kept. The anchors are def0d3e63, ecdfc9411, ba5e957ef and a227afa41 (x2). Each was re-verified from its own diff, which wrote the very sentence its line carries, not copied from stage 1. One @objectstack/lint patch changeset is added as a new file. The form-D string at validate-react-page-props.ts:1198 (#11284) is byte-identical and stays on the card, which is why the PR says Part of.",
      "census": {
        "instrument": "The gate's own `node scripts/check-issue-citations.mjs --census --json` (board enumerated in full), filtered to packages/lint/. The census blanks string literals, so the form-D string at validate-react-page-props.ts:1198 is outside it by construction. That line was read directly: `(#11284)` is present, and the file is byte-identical from base to head.",
        "before": "base 1322cc72c9, 2026-09-29T10:18:50Z to 10:22:33Z (185 pages, frontier #20627, board size 18,454). packages/lint: 5 dead (allocated-but-absent), all in authoring-rules.ts: :201 #10064, :1123 #16659, :1722 #8546 (written `(PR #8546)`), :1748 #19370, :1768 #19370. Repo-wide allocated-but-absent 2,209.",
        "after": "head 2e1955b492, 2026-09-29T11:13:21Z to 11:16:47Z (185 pages, frontier #20630, board size 18,457). packages/lint: 0 dead. Repo-wide allocated-but-absent 2,204, exactly 5 fewer. Findings present at head and absent at base, repo-wide: 0.",
        "per_number": "#10064 x1 -> def0d3e63. Its body names #10064 as the card it lands, with maintainer ruling 2026-08-20 Option A. Its own diff wrote this AuthoringFinding.path docblock, and it introduced nameKeyFindingPath in runtime-gate.ts. #16659 x1 -> ecdfc9411, the squash of PR #17334. Its diff adds FLOW_SCHEDULE_ORGANIZATION_MISSING at warning to validate-flow-trigger-readiness.ts and wrote the authoring-rules.ts sentence '... added a sixth id, `flow-schedule-organization-missing`, at `warning`'. Its sub-commits name #16659. The live #17396 stays. #8546 x1 -> ba5e957ef, PR #8546's own squash. Its authoring-rules.ts diff changes runtimeTypes ['seed'] to ['seed', 'permission', 'book'], which is #8310 slice 1 as the line states. The live #8310 stays. #19370 x2 -> a227afa41. Its body names #19370 as the card it lands, and its own authoring-rules.ts diff wrote both lines ('[#19370] It has since crossed, also whole' and '[ADR-0090 D3 / #8310 → #19370]'). ADR-0090 D3 and #8310 stay. Each sha: rev-parse --disambiguate gives 1 object, single parent, merge-base --is-ancestor exits 0 against origin/main and against the base, and the repo is not shallow. Rung: no docs/adr, NORTH-STAR or scripts/adr-anchors file names any of the 4 numbers, so the commit rung is used, as in stage 1.",
        "hypotheses": "1 holds: 5 at base in authoring-rules.ts, 0 at head; the sixth card site is the :1198 string outside the census. 2 holds: the 5 sites on e651556e2d are :201 #10064, :1123 #16659, :1722 (PR #8546), :1748 and :1768 #19370, identical at base; all 4 anchors were re-read from their own diffs. 3 holds: PR #20593's new lines cite #20553, #20611 and #20552 (plus ADR-0041), all answer 200, and the census finds no dead site on them; none of the 5 lines' sentences changed meaning. One adjacency is noted in Acceptance notes: #20593's 'made it five' counts error-emitting rules, while ecdfc9411's own ordinal 'sixth id' counts ids in the rule file (and was already its seventh export); kept verbatim, since only the number moves."
      },
      "tests": "At head 2e1955b492.\nBuild, under os-verify-lock (slot issue-20597-s2): `NODE_OPTIONS=--max-old-space-size=4096 timeout 270 pnpm exec turbo run build --concurrency=2 --filter=./packages/* --filter=./packages/*/*`. The last run printed Tasks 71 successful, 71 total (66 cached) and VERDICT command-exit 0. Two earlier held runs hit the 270 s timeout at 39/46 and 66/68 tasks; turbo's cache carried their finished tasks forward.\n`pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2` under the lock: Test Files 115 passed (115), Tests 5379 passed (5379), Duration 109.83s, VERDICT command-exit 0.\n`pnpm --filter @objectstack/lint typecheck` under the lock: tsc exit 0; check:test-typecheck OK (2 files / 6 errors / 2 pinned signatures held); VERDICT command-exit 0.\nMechanical guard (scratch tokcmp.cjs on TypeScript 6.0.3, base 1322cc72c9 blob vs HEAD blob of authoring-rules.ts; the controls mutate the head text in memory only):\n  real run: 3,543/3,543 leaf tokens EQUAL (JSDoc excluded), non-comment residue EQUAL, exit 0;\n  dark control (a comment line inserted): EQUAL/EQUAL, comment ranges 957 to 958, exit 0;\n  lit code control (a statement inserted): DIFFER at token 0, residue DIFFER, exit 1;\n  lit string control (one char in a parser-located StringLiteral): DIFFER at token 5, residue DIFFER, exit 1. The first string control located its target by text, landed in a comment and read EQUAL; it is void and was re-anchored on the parser.\nLine balance: authoring-rules.ts +5/-5, every changed line comment-shaped, 2,011 lines at base and head.\nTracker numbers: removed #10064 #16659 #8546 #19370x2; the only number on added lines is the kept #8310 x2, so added-not-removed is empty. No PR #N stands on an added line. The file holds 215 #N tokens at base and 210 at head. 4 distinct shas on added lines, 0 on removed.\nLint, a proven narrowing: `pnpm exec eslint --no-inline-config --format json packages/lint/src/authoring-rules.ts` gives 1 file, 0 errors, 0 warnings. isPathIgnored is false through eslint's API. eslint.config.mjs:327-328 says 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.\nChangeset measurement: files[] ships dist.\n  `commit def0d3e63` is in dist/runtime-CwEo7nXl.d.ts in the AuthoringFinding docblock, beside the unchanged 'Positional as RULES emit it' (the positive control).\n  `commit ba5e957ef` (cited nowhere else in packages/lint/src) is in dist/index.js and dist/index.cjs.\n  None of #10064 #19370 #16659 or 'PR #8546' remains in dist. Hence patch.\nMerge probe: a no-driver merge-tree of 2e1955b492 onto origin/main 542670da6d, from a bare shared clone in scratch (no merge.* config, deleted after), exits 0. The 3 commits main gained since the base touch nothing under packages/lint.\nNo ablation or reverse verification: the change is comment-only.",
      "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:driver-memory-census :: exit 0",
        "pnpm check:gitlink-declared :: exit 0",
        "pnpm check:issue-citations :: 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:refd-timer-probe :: exit 0",
        "pnpm check:slot-lookup :: exit 0",
        "pnpm check:test-source-alias :: exit 0",
        "pnpm check:tier-file-adoption :: exit 0",
        "pnpm check:watch-hint-literal :: exit 0",
        "pnpm check:docs-transcript-drift :: exit 0",
        "pnpm check:dts-closure :: exit 0",
        "pnpm check:dual-build-cjs-loads :: exit 0",
        "pnpm check:lean-entry-closure :: exit 0",
        "pnpm check:published-files :: exit 0",
        "pnpm check:sourcemap-no-sources-content :: exit 0",
        "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 2e1955b492)",
        "bash scripts/pm/os-verify-lock.sh -c '... turbo run build --concurrency=2 --filter=./packages/* --filter=./packages/*/*' :: VERDICT command-exit 0 (71/71; run before the six build-reading gates)",
        "check:issue-citations detail: the live diff-scoped `node scripts/check-issue-citations.mjs` judged 2 citations in 1 file (the kept #8310 x2), both resolve; `pnpm check:issue-citations` self-test 114 cases in 8 batteries passes",
        "check:doc-authoring detail: sibling prose-id baseline holds, 810 pinned sites across 230 files, no growth",
        "check:nul-bytes detail: OK over 9,253 tracked text files; own control-byte scan of both changed files finds none"
      ],
      "gates_pinned_to": "2e1955b492",
      "ci": "in_progress when this report was written: one read at 2026-09-29T11:20:40Z of 31 check runs on 2e1955b492: 10 success, 3 skipped, 17 in progress, 1 queued, 0 failed. No polling.",
      "line_budget": "source: 1 .ts file, +5/-5, net 0; .changeset: +11 (1 new file); total against the base: 2 files, +16/-5 (21 changed lines, under 5,000)",
      "files_changed": [
        ".changeset/20597-lint-authoring-rules-provenance-anchors.md",
        "packages/lint/src/authoring-rules.ts"
      ],
      "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 trailer check passed on both pushes. The PR body ends with AGENTS.md's session-URL footer rather than the harness's footer shape. The body read back byte-identical (11,277 bytes).",
        "The first lit string control was a no-op (a text search landed in a comment and read EQUAL); it is reported void and was re-run on a parser-located literal (DIFFER, exit 1).",
        "My own gate runner's 580 s outer timeout killed `pnpm check:slot-lookup` mid-run (the 45th of 48 build-free gates); it and the 3 behind it were re-run to exit 0. ran.list records the completed run's exit, so no family's code is inferred.",
        "No merge of origin/main: it moved 1322cc72c9 to 542670da6d during the session (3 commits, none under packages/lint). The three --base origin/main gates start at merge-base, which is the base. dispatch-gates reconciled 54/54 on this tree, and the no-driver merge-tree probe exits 0.",
        "Scratch work lives in the scratchpad's issue-20597-s2/ subdirectory. One transient eslint-API probe file was written at the worktree root and deleted in the same command (git status clean after). The shared .git saw ordinary fetches of main, this worktree's add, and a bare --shared probe clone inside scratch (deleted).",
        "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 2e1955b492. No force-push; the branch holds the empty probe push and two commits (rewrite, changeset)."
      ],
      "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-lint-dead-citations-authoring-rules: the empty probe, then one push of the two commits; head 2e1955b492. (1) pr_create via scripts/pm/fleet-write/dispatch.mjs (dry-run first): POST /repos/objectstack-ai/objectstack/dispatches (204), then relay run 36560983727 executing POST /repos/objectstack-ai/objectstack/pulls with draft forced; it created #20631, and its body read back byte-identical. (2) label-write --issue 20631 --assign os-tesla: POST .../dispatches, then relay run 36561069141 executing POST /repos/objectstack-ai/objectstack/issues/20631/assignees; read back os-tesla; no label written (documentation, size/s and tooling are the auto-labelers'). (3) This os-dev-report comment via 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: #20597 itself (its form-D remainder, as the ACCEPT 5886175996 resolved). Noted in PR #20631 Acceptance notes, not filed. validate-react-page-props.ts:1198 is the react-prop-deprecated finding message ending '(#11284).'; ruling D, a string change, pinned in scripts/doc-authoring-prose-id.baseline.json (#11284: 1 for that file). Byte-identical here.",
        "carrier: none (承接者:无). Noted in Acceptance notes, not filed (wording polish, no class). authoring-rules.ts:1123's 'sixth id' is ecdfc9411's own ordinal. validate-flow-trigger-readiness.ts exported six ids before that commit, so it was the seventh. The line now sits under PR #20593's 'made it five', which counts error-emitting rules, a different count. Kept verbatim; only the number moved.",
        "carrier: none. Noted in Acceptance notes, not filed: outside the census surface, content/docs/deployment/validating-metadata.mdx still cites #19370 at :472, :483 and :515 (already in stage 1's notes with the lint test titles)."
      ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (stage 2) — PR #20631 at head 2e1955b492 · domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx) · 2026-09-29T11:35Z

    The seat reviewed the stage-2 dev report 5889251130 against GitHub and the diff.


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 29, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (stage 2, authoring-rules.ts) — PR #20631 → f29c83db13; stage-2 claim released · domain:spec seat 2 (session_014EJ1ED8X4MMrT18BhVx4tx) · 2026-09-29T11:59Z

    • Merged through the merge queue at 2026-09-29T11:58Z, after the ACCEPT 5889445590 and the at-tier PASS 5889420504.
    • Verified by content on origin/main f29c83db13: both files are blob-identical to the reviewed head 2e1955b492.
    • Closing-keyword audit: the PR says Part of #20597, so this card stays open.
    • Result: packages/lint carries 0 dead tracker citations in the gate's census (84 at the census, 5 after stage 1, 0 now).

    Release: session_014EJ1ED8X4MMrT18BhVx4tx · cause: stage 2 landed and this seat's batch is full · destination: pm:queue, with pm:dispatched and this seat's assignee removed in this act.

    What the next taker does (the last item on this card): the finding message react-prop-deprecated at packages/lint/src/validate-react-page-props.ts:1198 ends with (#11284). It is an author-shown string, so ruling C+D (5749154545) takes it in form D: the lesson in words, no number. Read #11284's decision from its source, since it answers 404; drop the number; shrink scripts/doc-authoring-prose-id.baseline.json by that one pinned site; and flip any test that pins the message text in the same round. A @objectstack/lint patch changeset. The PR can say Fixes #20597.


    Generated by Claude Code

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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