Skip to content

chore(devx): respell the parseSymbolRef placeholder and retire the last held allowance row - #15876

Merged
baozhoutao merged 1 commit into
mainfrom
claude/issue-15765-adr-0087-registration-placeholder
Sep 5, 2026
Merged

chore(devx): respell the parseSymbolRef placeholder and retire the last held allowance row#15876
baozhoutao merged 1 commit into
mainfrom
claude/issue-15765-adr-0087-registration-placeholder

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #15765

Lap 3 of three, and the last thing this card was holding: the final HELD_FILE_ALLOWANCES
row is retired by repairing the citation it held, so the array is now empty.

1. scripts/check-adr-0087-registration.mjs — one comment line, no behaviour change

The one-line docblock on parseSymbolRef wrote its placeholder path-shaped, so the
scripts/** corpus added in #15806 read the illustration as a symbol anchor into a file this
tree does not have. It now uses the angle-bracket grammar that
scripts/symbol-anchors.mjs#ANCHOR_GRAMMAR already teaches.

Before (:2006):

 * `path/to/file.ts#Symbol` or `path/to/file.ts#a.b.member` -> its halves, or null.

After:

 * `<dir>/<file>.ts#<Symbol>` or `<dir>/<file>.ts#<a>.<b>.<member>` -> its halves, or null.

Nothing else in that 2000+ line gate is touched — one line, comment prose only.

2. scripts/check-scripts-symbol-anchors.mjs — the last held row, and its floor

The row is DELETED. The export and its doc stay; the array is empty, with a comment saying
why empty is the healthy state and why the mechanism is not thereby dead code.

Four of the self-test's cases are registered PER allowance row (the exactness loop runs four
check()s over each), so the pinned floor drops by exactly that and by nothing else —
30 to 26, the same per-row mechanism lap 2 recorded as 34 to 30. The reason is
written beside the literal.

The allowance battery does not go vacuous. Its case block ("the allowance mechanism, in
both directions") runs against its OWN fixture row — scripts/bad.mjs, written into a temp
corpus — never against the live array, and it is byte-identical in this diff:

before after
fixture-row cases (temp corpus, includes the "removing the row puts the findings back" leg) 5 5
per-live-row exactness cases (4 per row) 4 0
battery registered total, measured 30 26

The registered totals are measured, not inferred: with the floor literal temporarily raised
the self-test prints registered 30 case(s) at origin/main and registered 26 case(s) at
this head (trap-guarded probe, restored byte-identical both times).

Measurement

Exit codes captured before any pipe; verdict lines quoted from run output.

(a) Base origin/main 59953d5a3 — production green, the row doing its job:

⏳ [unresolved-path] scripts/check-adr-0087-registration.mjs:2006  `path/to/file.ts#Symbol`
      no tracked file at `path/to/file.ts` (named by anchor `#Symbol`)
      ALLOWED, dated 2026-09-05 — held by PR #15724 (#15627). Delete the row when the citation goes.
✅ check-scripts-symbol-anchors: 2755 anchors across 218 scripts resolve — 21 symbol (21 declaration, 0 literal), 2733 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. --self-test at base: EXIT=0.

(b) Ablation — row deleted, docblock UNREWRITTEN. Trap-guarded (trap restore EXIT INT TERM), absolute paths from git rev-parse --show-toplevel, run from the committed tree so
the restore leg has something to restore to. On-disk proof BEFORE the run: allowance rows
naming the file 0, angle-bracket placeholder count 1 to 0, path-shaped placeholder
count 0 to 1; blob 8e9cbd0d4 to 8bbc39559, and a no-op mutation would have aborted
the run (the script compares hashes and refuses equality).

❌ check-scripts-symbol-anchors: 1 finding(s) across 218 scripts.

  [unresolved-path] scripts/check-adr-0087-registration.mjs:2006  `path/to/file.ts#Symbol`
      no tracked file at `path/to/file.ts` (named by anchor `#Symbol`)

ABLATED_PROD_EXIT=1, naming the file. Restore proved by BYTES, never by an exit code:
RESTORED=8e9cbd0d4757aa17f8062aca74e756762c5c8099 equal to the HEAD blob, and
git diff HEAD empty.

Reported rather than smoothed over: in that ablated tree --self-test stays GREEN
(ABLATED_SELFTEST_EXIT=0). That is correct and worth knowing — the row-exactness battery
can only grade rows that EXIST, so with the array empty the production run is the only leg
that catches a regressed citation. The self-test's job here is the floor and the fixture, and
both still hold.

(c) Final tree — production green with zero allowance findings:

✅ check-scripts-symbol-anchors: 2757 anchors across 218 scripts resolve — 21 symbol (21 declaration, 0 literal), 2736 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; 0 dated allowance finding(s)).
✅ 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 (2757 live anchors)

Both EXIT=0. The edited file is ITSELF a gate, so it was run too:
✓ check-adr-0087-registration --self-test: 325 assertions over real temp git repos (real scan()/assertInputs() path) EXIT=0, and its production run
✓ check-adr-0087-registration: this PR adds no declared-breaking changeset (0 non-breaking changeset(s) seen). EXIT=0.

Base-to-final deltas all in the expected direction: 2755 to 2757 anchors (the retired
row's prose moves into comment prose and resolves), the one unresolved-path finding gone,
1 to 0 dated allowance findings.

Gate families, governance, collisions

node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstack
EXIT=0 — change set 2 paths vs merge base 59953d5a3, 34 commands derived, ALL 34 RUN AND
MEASURED GREEN, reconciled by the tool rather than by arithmetic over my own list:
✓ dispatch-gates --ran: 34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED.

Two shapes appeared first and NEITHER was reported as a result. (1) Seven families were
dependency-blocked in a fresh worktree — check-reference-carrier-shape and its self-test,
check-ci-filter-parity, check-closing-keyword-parity and its self-test (exit 3
PREREQUISITE NOT MET), check-comment-mask-corpus (ERR_MODULE_NOT_FOUND) and
check:driver-memory-census (exit 3). pnpm install --offline through the verify lock
(os-verify-lock: VERDICT command-exit 0 · held the lock 7s · waited 0s) turned all seven
into real readings, every one EXIT=0 — including the gate that reads the very comment prose
this PR edits: ✓ comment-mask corpus sweep [scripts/js-comment-mask.mjs]: 5999 files, 0 disagree, 0 unparseable, 60.3s (comparator self-test: 17 cases pass).
(2) pnpm check:pm-dispatch-gates first read EXIT=143, which was MY OWN 560s cap on the
batch runner and not a verdict; re-run uncapped on its own recorded PID it reaches
✓ dispatch-gates self-test: 1511 cases pass. EXIT=0.

pnpm check:nul-bytes EXIT=0, plus an independent grep -naP over both edited files for
non-NUL control bytes (exit 1, no matches).

node scripts/pm/check-governed-merges.mjs --test on the final file list:
✅ NOT governed — ordinary queue landing applies to a PR with exactly this file list.
EXIT=0. git merge-tree --write-tree origin/main HEAD after a fresh fetch: EXIT=0,
clean, against origin/main 59953d5a3. All 29 open PRs enumerated via
GET /repos/objectstack-ai/objectstack/pulls/N/files: NONE touches either edited file.

Scripts-only diff, nothing publishes from any released package: skip-changeset.

🤖 Generated with Claude Code

https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk


Generated by Claude Code

…st held allowance row

The one-line docblock on `scripts/check-adr-0087-registration.mjs#parseSymbolRef`
wrote its placeholder path-shaped, so the scripts/** symbol-anchor corpus read the
illustration as an anchor into a file this tree does not have. It now uses the
angle-bracket grammar `scripts/symbol-anchors.mjs#ANCHOR_GRAMMAR` already teaches.
One line, no behaviour change.

With the citation gone the last `HELD_FILE_ALLOWANCES` row has done its job and is
deleted; the export and its doc stay, and the array is now empty. Four of the
self-test's cases are registered per allowance row, so the pinned floor drops 30 to
26 by exactly that mechanism, with the reason written beside the literal. The
allowance battery does not go vacuous: its five fixture cases run off the
`scripts/bad.mjs` fixture row, not off the live array.

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 (12:31Z, method: MERGE). All seven required contexts on 70b2f6901 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. Mergeability through the sound bare-clone probe (no driver) → EXIT=0 against b398ad258. Watched; on landing #15765 closes (Fixes, lap 3 of 3).


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 99a5bc6 Sep 5, 2026
36 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-15765-adr-0087-registration-placeholder branch September 5, 2026 13:00
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

2 participants