docs(devx): retire the "not registered in the port pin" rationale for check-bash32-floor - #9368
Conversation
… check-bash32-floor (objectui#9206) Both copies of the rationale said the file was deliberately unregistered because the ledger carried ONE repository-wide `upstream.ref` that `--resync` rewrote for every entry. objectui#8288 retired that field — `validatePin` refuses a pin that still carries it and a re-sync writes only the re-synced entry's own ref and digest — and objectui#8694 then registered this file at its own ref with its divergences declared. Both halves are live falsehoods, one of them sitting in the workflow step a reader consults first. - `.github/workflows/lint.yml`: the wiring comment now states the file IS registered and says where the ref lives, instead of naming one. - `scripts/check-bash32-floor.mjs`: the header clause and the "Why this port is not YET pinned" section become a short pointer at the ledger entry, which also records that this prose is PINNED bytes. - `scripts/upstream-port-pin.json`: the two matching divergence pairs move in the same change, so the reconstruction stays byte-identical. The pinned digest and ref are untouched; the parity gate reds without this step (`expected its ported text exactly once, found 0`) and is green with it. ⛔ No revision is written into either piece of prose, and the workflow comment's revision was dropped rather than refreshed: that section had already gone stale twice by naming one. Prose and ledger pairs only — the construct table, the exemption rules and every behaviour are untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
…206-retire-the-unregistered-rationale
Probe ARMED — 10 legs, ⛔ posted BEFORE any flip, to be re-run verbatim on the ACTUAL merge parentPM seat Counted on
⭐ Leg 6 is the one that carries the information, and it nearly was not writtenA tree-wide census of ⇒ A naive tree-wide must-LEAVE leg would demand ⭐ The pin edit is FORCED by the pin's own text — ⛔ it is not scope widening
⇒ This PR is that follow-up card, named in advance by the thing it edits. And the ⭐ And the replacement text obeys the constraint the file itself setThe old header ruled: 「⛔ Do not write a revision into this prose. A port's ref lives on that port's entry…this section has already gone stale TWICE by naming one.」 The new
⇒ the fix does not re-arm the failure mode it is repairing. Legs 7 + 8 are what hold that: Sequence from here — ⛔ nothing is skipped
Generated by Claude Code |
Fixes #9206
Fixes, notRefs: this PR closes out all four acceptance items from triage, and nothing of the card survives it. Both copies of the rationale are rewritten, the divergence pairs move in the same change, and no behaviour is touched.The defect
Two places carried one argument, written twice:
scripts/check-bash32-floor.mjswas deliberately unregistered because the ledger carried ONE repository-wideupstream.refthat--resyncrewrote for every entry, so registering it meant either shipping an older, weaker construct table or dragging three unrelated ported files to a new ref.Neither trade exists:
validatePininscripts/check-upstream-port-parity.mjsREFUSES a pin that still carries one, and a re-sync writes only the re-synced entry's ownrefand digest.So both halves were live falsehoods — and the
lint.ymlcopy sat in the workflow step a reader consults first, which is the species the ported file's own header warns about, one level up.What changed — prose and ledger pairs only
.github/workflows/lint.ymlscripts/check-bash32-floor.mjs## Why this port is not YET pinnedsection rewritten to a short pointer at the ledger entryscripts/upstream-port-pin.jsonheader-card-and-ported-banner,why-this-port-is-not-yet-pinned-section) and theirwhyfields.changeset/9206-retire-unregistered-rationale.md⛔ No revision is written into either piece of prose, and the workflow comment's revision (
6136293) was dropped rather than refreshed — that section had already gone stale twice by naming one. The pinnedrefandupstreamSha256are untouched.⛔ The construct table, the exemption rules,
POPULATION_ROOTS, the self-test batteries and every behaviour are untouched.--self-teststill reports 160 cases and the real-tree scan still reports 13 shell files / 19 constructs.Acceptance item 3 — the parity gate BOTH ways
The divergence pairs are not decoration here: editing the ported bytes without moving them is red, loudly. Measured on this branch, in this order.
RED — the prose edits applied, the pin not yet touched (exit 1):
GREEN — the same command after the two pairs moved (exit 0):
The digest did not move. The reconstruction is byte-identical to what it was before this PR, which is the proof that the pairs tracked the prose exactly rather than being loosened to accommodate it.
Acceptance item 2 — the three phrases after the fix, with a lit control
Zero in all three touched files, and the zero is a reading: the same
git grepinvocation over the same three paths, carrying a control term that hits in each.Combined counts equal the control-alone counts, so the three target phrases contributed 0 lines while the grep was demonstrably live in each file.
Repo-wide, every surviving hit is TRUE and stays:
scripts/check-upstream-port-parity.mjs(8 hits ofupstream.ref) andscripts/__tests__/upstream-port-parity-wiring.test.ts(2) — the retirement itself: the refusal text, its rationale, and the pin test asserting the global ref is absent.scripts/check-governed-queue-guard.mjs— "It is NOT registered inscripts/upstream-port-pin.json" about ITSELF. Verified rather than assumed: that path appears 0 times in the ledger (control, same file: 124"ported":keys), and the ledger's 11 entries do not include it.packages/components/.../form.tsx,packages/plugin-kanban/.../kanban-family-registry-keys-retired-8257.test.ts,scripts/check-i18n-dead-keys.mjs— unrelated senses of "NOT registered" (a widget registry, retired kanban keys, i18n reachability)..changeset/8385-bash32-floor-port-rationale.md— the changeset of the PR that corrected this section last time. It describes what THAT change did, at the time it did it; one sentence in it ("this file has NO drift gate until it is registered") has since been falsified by objectui#8694. Left as-is, and the reason is measured rather than assumed: its frontmatter is empty, so it publishes no body at the next release —check-changeset-claimsreads 1029 of the 1492 pending declarations for exactly this reason and reportsNo pending changeset names a file this change touches. It is a dated in-repo record, not a future release note, so correcting another PR's record would buy no reader anything. Flagged for the PM seat rather than silently swept.Gates run locally, with exit codes
Everything whose population covers
.github/workflows/**,scripts/*.mjs,scripts/*.jsonor.changeset/**:node scripts/check-upstream-port-parity.mjsnode scripts/check-upstream-port-parity.mjs --self-test(58 cases)node scripts/check-bash32-floor.mjs(13 shell files, 19 constructs)node scripts/check-bash32-floor.mjs --self-test(160 cases)node scripts/check-lint-coverage.mjsnode scripts/check-action-ref-convention.mjsnode scripts/check-control-bytes.mjs(7539 text files)node scripts/check-new-cross-file-line-citations.mjs(0 new citations)node scripts/check-shell-escape-residue.mjsnode scripts/check-entry-guard.mjsnode scripts/check-pre-install-import-graph.mjsnode scripts/check-comment-mask-corpus.mjsnode scripts/check-changeset-presence.mjs --base origin/mainnode scripts/check-changeset-no-major.mjs --base origin/mainnode scripts/check-changeset-fixed.mjs --base origin/mainnode scripts/check-changeset-overwrite.mjs --base origin/mainnode scripts/check-changeset-claims.mjs --base origin/main --head HEADpnpm type-check:scriptsnpx eslint scripts/check-bash32-floor.mjs scripts/upstream-port-pin.jsonnpx vitest run --project unit --maxWorkers=2 scripts/__tests__— 152 files, 4505 testsTwo readings stated precisely rather than rounded up:
pnpm type-check:scriptsis a separate command from any per-packagetype-checkand was run as its own step. What it measured: 937 files, including both pin tests that matter here (scripts/__tests__/bash32-floor-wiring.test.ts,scripts/__tests__/upstream-port-parity-wiring.test.ts), verified with--listFiles. It does NOT type-check the edited.mjsitself —tsconfig.scripts.jsonsetscheckJs: falseby design — so the.mjsside is covered by the gate's own--self-testand by eslint, not by this command.scripts/upstream-port-pin.jsonisFile ignored because no matching configuration was supplied, and it is identical on the same file atorigin/main. eslint does not lint JSON here.Route:
node scripts/check-governed-queue-guard.mjs --teston all four paths answersNOT GOVERNED — 4 path(s) checked against 5 governed surface(s); none matched. An ordinary pull request. Left as a draft; the PM seat drives the queue.🤖 Generated with Claude Code
https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
Generated by Claude Code