Skip to content

chore(devx): state the react-page-adapter rot record as data and retire its held allowance row (#15765) - #15844

Merged
baozhoutao merged 1 commit into
mainfrom
claude/issue-15765-react-page-adapter-rot-record
Sep 5, 2026
Merged

chore(devx): state the react-page-adapter rot record as data and retire its held allowance row (#15765)#15844
baozhoutao merged 1 commit into
mainfrom
claude/issue-15765-react-page-adapter-rot-record

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Part of #15765 — the card stays open: the second held allowance row (scripts/check-adr-0087-registration.mjs) is behind governed PR #15724 and is deliberately untouched here.

PR #15806 landed the scripts/** symbol-anchor corpus with two dated HELD_FILE_ALLOWANCES rows for files that live PRs held. PR #15770 landed at 08:08Z, so one of them is now free — and an allowance nobody retires is an exemption wearing a date. This PR retires it.

What changed

1. scripts/check-react-page-adapter-contract.mjs — the rot record is now stated as DATA, not as anchors.

The paragraph's four dated readings are moved into a small table whose file and line are separate cells, so no path:NNN token remains:

the reading file line
the citation as first written packages/client/src/index.ts 310
the #15094 census found it at packages/client/src/index.ts 392
triage read, the same day packages/client/src/index.ts 390
the second citation, as written content/docs/api/client-sdk.mdx 659

No number is repaired or repointed. They are readings taken on a date; the paragraph's argument (one cross-file line citation rotted twice inside a single day, which argues against citing a line at all rather than for repointing it) is unchanged, and its ⛔ line still declares every number a record rather than a pointer. Only the spelling changed.

One clause was updated because the corpus made it false: the paragraph used to say scripts/** is outside every symbol-anchor corpus so nothing resolves these for you. Since #15806 something does — which is precisely why the anchor spelling had to go — so the paragraph now says that, and says an anchor-shaped number here is judged and reds. Its file-level anchors resolve (packages/client/src/index.ts and content/docs/api/client-sdk.mdx are both tracked).

2. scripts/check-scripts-symbol-anchors.mjs — the row is deleted. The scripts/check-adr-0087-registration.mjs row stays, dated and named to PR #15724. The header does not count rows, so no header text needed changing.

3. The self-test battery floor moves 34 → 30, and the reason is recorded next to the number. Four of the battery's cases are registered per allowance row (the exactness loop runs four check()s over each row), so retiring a row lowers the floor by exactly 4. That is now written beside the literal as the only admissible reason to lower it — any other drop is cases that stopped running. This is a mechanical consequence of the mandated deletion: without it --self-test cannot be green, which the ruling requires.

Measurement

Exit codes captured before any pipe (cmd > file 2>&1; E=$?), verdict lines quoted from the runs themselves.

(a) Base (cc5b3dd0c), row present — green.

⏳ [line-anchor] scripts/check-react-page-adapter-contract.mjs:133  packages/client/src/index.ts:310
      a line number is not an anchor form — cite the symbol (`packages/client/src/index.ts#symbol`) or drop to a file-level anchor
      ALLOWED, dated 2026-09-05 — held by PR #15770 (#15599). Delete the row when the citation goes.
✅ check-scripts-symbol-anchors: 2730 anchors across 218 scripts resolve — … 0 line anchors on tracked targets survive (99 citations name no tracked file and are not judged; 2 dated allowance finding(s)).

EXIT=0

(b) ABLATION — row deleted, paragraph UNREWRITTEN: the gate reds and names the file. Trap-guarded (trap restore EXIT INT TERM), absolute paths resolved from git rev-parse --show-toplevel, mutation proved on disk before the run and restore proved byte-identical after, never by an exit code.

  • on-disk proof, before → after: rows naming check-react-page-adapter-contract.mjs 1 → 0; the adr-0087 row still 1; anchor-form citations in the target paragraph 1 (unrewritten). Blob dd894c71…914c7a80… (a no-op mutation would have aborted the run).
  • ablated production run, ABLATED_EXIT=1:
❌ check-scripts-symbol-anchors: 1 finding(s) across 218 scripts.

  [line-anchor] scripts/check-react-page-adapter-contract.mjs:133  packages/client/src/index.ts:310
      a line number is not an anchor form — cite the symbol (`packages/client/src/index.ts#symbol`) or drop to a file-level anchor
  • ablated --self-test, ABLATED_SELFTEST_EXIT=1 — and this is where the floor reading came from:
❌ check-scripts-symbol-anchors --self-test: self-test battery "check-scripts-symbol-anchors self-test" registered 30 case(s), below its pinned floor of 34 — cases that used to run no longer do.
  • restore: RESTORED=dd894c71217803ded4ef95d1bfd8736f5d350952 (equal to the HEAD blob), git diff HEAD empty → RESTORED-OK.

(c) Final tree — all four runs green.

✅ check-scripts-symbol-anchors: 2736 anchors across 218 scripts resolve — 21 symbol (21 declaration, 0 literal), 2714 file-level, 0 cross-repo, 1 exempt, 2 continuation. 0 line anchors on tracked targets survive (96 citations name no tracked file and are not judged; 1 dated allowance finding(s)).

EXIT=0 — one allowance finding left, the governed one, still printed and still counted.

✅ check-scripts-symbol-anchors --self-test: every finding class provoked, comment-prose projection wired, declined shapes counted not missed, allowance rows exact both ways, population live (2736 live anchors)

EXIT=0 — including check 5, which reds if a row names a file that no longer carries a judged finding.

The edited file is itself a gate, so it was run too:

✓ check-react-page-adapter-contract: 21 app-showcase page module(s) + 1 content/docs react-page sample(s) (from 396 doc file(s), 1958 fenced block(s)) — every adapter query option is $-prefixed, every row read is off `data`, and no find() result is tested for array-ness.

EXIT=0

✓ check-react-page-adapter-contract --self-test: 51 assertions — all THREE detectors observed FIRING and observed silent, …

EXIT=0

Deltas between (a) and (c) are all in the expected direction: 2730 → 2736 anchors (the table's file paths resolve as file-level anchors), 99 → 96 citations naming no tracked file (the three bare readings stop being citations at all), 2 → 1 dated allowance findings.

The rest of the battery

node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstackEXIT=0, change set 2 paths vs merge base cc5b3dd0c, 31 commands derived and every one run and MEASURED GREEN — 0 NOT-MEASURED, 0 UNRUN, reconciled by the tool itself rather than by arithmetic over my own list:

✓ dispatch-gates --ran: 31 derived famil(ies) accounted for — 31 run, 0 NOT-MEASURED.

Two commands did not measure on the first pass and neither was reported as a result:

  • seven were dependency-blocked in a fresh worktree (PREREQUISITE NOT MET, exit 3, and one ERR_MODULE_NOT_FOUND) — check-reference-carrier-shape (+self-test), check-ci-filter-parity, check-closing-keyword-parity (+self-test), check-comment-mask-corpus, check:driver-memory-census. pnpm install --offline (5.7s) then measured all seven green, e.g. ✓ comment-mask corpus sweep [scripts/js-comment-mask.mjs]: 5996 files, 0 disagree, 0 unparseable, 63.5s (comparator self-test: 17 cases pass). — the one that reads the very comment prose this PR edits.
  • pnpm check:pm-dispatch-gates first read EXIT=124. That was my own 300s cap, not a verdict; re-run uncapped on its own recorded PID it reaches ✓ dispatch-gates self-test: 1493 cases pass. EXIT=0.

Other readings:

  • pnpm check:nul-bytes EXIT=0, plus an independent grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]' over both edited files, exit 1 (no matches).
  • node scripts/pm/check-governed-merges.mjs --test <final file list>✅ NOT governed — ordinary queue landing applies to a PR with exactly this file list. (0 of 2 path(s) hit the register), run on the FINAL list.
  • git merge-tree --write-tree origin/main HEAD after a fresh fetch → EXIT=0, clean (against origin/main 6c439f2b4).
  • Collisions: all 31 open PRs enumerated via GET /pulls/N/files; none touches either edited file. PR feat(devx): accept a dotted member path in ADR-0087 type-surface-only references #15724, whose held row stays, touches scripts/check-adr-0087-registration.mjs only.
  • Verify lock read before starting: state: lock is free, queue: empty. No lock-eligible run was needed — this card builds and tests nothing.

Scripts-only diff, nothing published from any released package → skip-changeset, applied additively and read back.

🤖 Generated with Claude Code

https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk


Generated by Claude Code

…re its held allowance row (#15765)

The `scripts/**` symbol-anchor corpus (#15806) landed with two dated
`HELD_FILE_ALLOWANCES` rows for files live PRs held. PR #15770 landed, so the
row for `scripts/check-react-page-adapter-contract.mjs` is free — and an
allowance nobody retires is an exemption wearing a date.

The four dated readings in that gate's rot-record paragraph are now stated as
DATA — a small table with the file and the line number in separate cells —
never in `path:NNN` anchor form. The NUMBERS ARE NOT REPAIRED OR REPOINTED:
they are readings taken on a date, the paragraph's argument is unchanged, and
its ⛔ line still declares every number a record rather than a pointer. The one
substantive addition is that the paragraph no longer claims nothing resolves
citations in `scripts/**` — since #15806 something does, which is why the
anchor spelling had to go.

The self-test battery floor moves 34 → 30 because four of its cases are
registered PER allowance row; the reason is recorded next to the number so a
later reader cannot mistake the drop for cases that stopped running.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
@claude

claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Flipped ready + auto-merge enabled (10:59Z, method: MERGE). All seven required contexts on a0f83ec5c read non-failing: Lint & Repo Gates, TypeScript Type Check, Test Core, Dogfood Regression Gate, Governed Surface Queue Guard success; Build Core, Temporal Conformance (live PG + MySQL) skipped; no other red. git merge-tree --write-tree origin/main <branch> → EXIT=0 against fd3333738; governed test re-read on the final file list → NOT governed. Watched; Part of #15765 — the card stays open for the check-adr-0087-registration.mjs row (behind #15724, now queued by a human).


Generated by Claude Code

@baozhoutao
baozhoutao added this pull request to the merge queue Sep 5, 2026
Merged via the queue into main with commit 59953d5 Sep 5, 2026
36 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-15765-react-page-adapter-rot-record branch September 5, 2026 11:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants