chore(devx): respell the parseSymbolRef placeholder and retire the last held allowance row - #15876
Merged
baozhoutao merged 1 commit intoSep 5, 2026
Conversation
…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
This was referenced Sep 5, 2026
baozhoutao
marked this pull request as ready for review
September 5, 2026 12:31
baozhoutao
enabled auto-merge
September 5, 2026 12:31
Contributor
Author
|
Flipped ready + auto-merge enabled (12:31Z, Generated by Claude Code |
baozhoutao
deleted the
claude/issue-15765-adr-0087-registration-placeholder
branch
September 5, 2026 13:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #15765
Lap 3 of three, and the last thing this card was holding: the final
HELD_FILE_ALLOWANCESrow 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 changeThe one-line docblock on
parseSymbolRefwrote its placeholder path-shaped, so thescripts/**corpus added in #15806 read the illustration as a symbol anchor into a file thistree does not have. It now uses the angle-bracket grammar that
scripts/symbol-anchors.mjs#ANCHOR_GRAMMARalready teaches.Before (
:2006):After:
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 floorThe 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 —30to26, the same per-row mechanism lap 2 recorded as34to30. The reason iswritten 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 tempcorpus — never against the live array, and it is byte-identical in this diff:
The registered totals are measured, not inferred: with the floor literal temporarily raised
the self-test prints
registered 30 case(s)atorigin/mainandregistered 26 case(s)atthis 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/main59953d5a3— production green, the row doing its job:EXIT=0.--self-testat base:EXIT=0.(b) Ablation — row deleted, docblock UNREWRITTEN. Trap-guarded (
trap restore EXIT INT TERM), absolute paths fromgit rev-parse --show-toplevel, run from the committed tree sothe restore leg has something to restore to. On-disk proof BEFORE the run: allowance rows
naming the file
0, angle-bracket placeholder count1to0, path-shaped placeholdercount
0to1; blob8e9cbd0d4to8bbc39559, and a no-op mutation would have abortedthe run (the script compares hashes and refuses equality).
ABLATED_PROD_EXIT=1, naming the file. Restore proved by BYTES, never by an exit code:RESTORED=8e9cbd0d4757aa17f8062aca74e756762c5c8099equal to the HEAD blob, andgit diff HEADempty.Reported rather than smoothed over: in that ablated tree
--self-teststays GREEN(
ABLATED_SELFTEST_EXIT=0). That is correct and worth knowing — the row-exactness batterycan 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:
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:
2755to2757anchors (the retiredrow's prose moves into comment prose and resolves), the one unresolved-path finding gone,
1to0dated allowance findings.Gate families, governance, collisions
node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstackEXIT=0— change set 2 paths vs merge base59953d5a3, 34 commands derived, ALL 34 RUN ANDMEASURED 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-shapeand its self-test,check-ci-filter-parity,check-closing-keyword-parityand its self-test (exit 3PREREQUISITE NOT MET),check-comment-mask-corpus(ERR_MODULE_NOT_FOUND) andcheck:driver-memory-census(exit 3).pnpm install --offlinethrough the verify lock(
os-verify-lock: VERDICT command-exit 0 · held the lock 7s · waited 0s) turned all seveninto real readings, every one
EXIT=0— including the gate that reads the very comment prosethis 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-gatesfirst readEXIT=143, which was MY OWN 560s cap on thebatch 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-bytesEXIT=0, plus an independentgrep -naPover both edited files fornon-NUL control bytes (exit 1, no matches).
node scripts/pm/check-governed-merges.mjs --teston 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 HEADafter a fresh fetch:EXIT=0,clean, against
origin/main59953d5a3. All 29 open PRs enumerated viaGET /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