docs(scripts): the swallow-family census reads the #12981 handover as landed, and cross-checks its copy of the gate vocabulary (#15459, #15473) - #15502
Merged
Conversation
… landed (#15459, #15473) The census `scripts/measure-durability-swallow-family.mjs` is the #12981 programme's instrument of record. PR #15458 performed the handover it had reserved for the programme's last step (`tryInsert`/`tryUpdate` into the gate's `DURABILITY_CRITICAL_CALLEES`) and PR #15472 closed the programme; four statements in this file still described both as pending. - The header's "The handover" section is past tense and names PR #15458/#15472. - "an 18-entry vocabulary" is 20, the count the gate now declares. - `tryInsert`/`tryUpdate` move from `origin: 'seed-wrapper'` to `'gate-vocabulary'` in `WRITE_SHAPED_CALLEES`: after #15458 they ARE declared in the gate, and the OVERLAP reading has to say what the tree says. `tryDelete` was not part of the handover and stays `seed-wrapper`. - The `DETERMINED` row for `keys.ts::handleKeysRequest` no longer says the site is waiting for a declaration the #12981 ruling (Q1 = A) refused. Its `anchor`, `verdict`, `scope` and key are byte-identical. - The `SELF_TEST_MODES` gated-subset note stops calling the handover reserved. The by-value copy of the gate's vocabulary stays a copy — the header says why — but a by-value copy's failure mode is silence, which is what let this file go stale under a green farm. `readGateVocabulary()` parses the gate's own declaration (never imports it) and the `--self-test` cross-checks the copy against it in BOTH modes, with a negative leg proving the comparison can fire. It announces drift; it never absorbs it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Contributor
Author
|
ACCEPT — PM seat Reviewed against the three-dot diff
Generated by Claude Code |
baozhoutao
marked this pull request as ready for review
September 4, 2026 19:14
baozhoutao
enabled auto-merge
September 4, 2026 19:14
This was referenced Sep 4, 2026
baozhoutao
pushed a commit
that referenced
this pull request
Sep 4, 2026
…nded handover (#15503) The tier-1 worklist's empty reading still announced the #12981 ruling's gate handover step as "unblocked" after PR #15458 performed it (`tryInsert` / `tryUpdate` declared in the gate's `DURABILITY_CRITICAL_CALLEES`) and PR #15472 closed the programme. It is the same future-tense-over-a-landed-step defect PR #15502 repaired four times in this file, surviving in the one place no run could contradict it: this tree reaches the row-per-file branch instead (tier 1 holds one outstanding member, `auth-manager.ts::verifyMcpAccessToken`, beside three DETERMINED rows), so the sentence has never been printed. The line is now past tense and names both PRs. So that the new wording is asserted rather than read, the worklist body moves into `worklistLines()` — a producer that takes its population as arguments — and `WORKLIST_READING_CONTROLS` pins all three readings BY VALUE, in both self-test modes: the two `(none …)` lines the tree cannot reach, plus a populated fixture that must print work and neither of them, which is what keeps the two pins from passing against a producer that ignored its population. The table is pinned to its own length first (#13799's floor recipe). The pins spell each line independently of the producer on purpose; comparing against a shared constant would pass whatever that constant said. The census's own reading over `packages/**` does not move: `--sites`, `--json` and the normal report are byte-identical against a checkout of the fork point. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
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 #15459
Fixes #15473
One file,
scripts/measure-durability-swallow-family.mjs— the #12981programme's instrument of record. PR #15458 landed the handover that instrument
had reserved for the programme's LAST step (
tryInsert/tryUpdateinto thegate's
DURABILITY_CRITICAL_CALLEES) and PR #15472 closed the programme. Fourstatements in this file still described both as pending, and nothing checked any
of them.
What changed
performed and closed the step (fix(scripts): durability gate — batch 10: declare the seeder wrappers in DURABILITY_CRITICAL_CALLEES (#12981) #15458, docs(runtime): keys.ts's catch annotation states its measured determination instead of promising a gate entry (#12981 batch 10b) #15472). The three ⛔ prohibitions it
held are kept — they did not expire with the step, and two were re-affirmed by
the ruling that closed the programme (The durability log-level gate cannot see the
catch { return null; }seeder family — 15 files outside #12923's five, and neither widening path is cheap #12981 comment 5543738972, Q1 = A) — butthey no longer read as "until then".
DURABILITY_CRITICAL_CALLEESvocabulary" is now 20, which iswhat the gate declares. The sentence beside it — a seeder reaching storage
through
ql.insert(...)is not in that vocabulary — is untouched and stilltrue.
tryInsert/tryUpdatemove fromorigin: 'seed-wrapper'to'gate-vocabulary'inWRITE_SHAPED_CALLEES. After fix(scripts): durability gate — batch 10: declare the seeder wrappers in DURABILITY_CRITICAL_CALLEES (#12981) #15458 they ARE declaredin the gate, so the census's gate/census OVERLAP reading has to say what the
tree says.
tryDeletewas not part of the handover and staysseed-wrapper.This is a reading change, not a comment, and it is quoted before/after
below.
DETERMINEDregister row forpackages/runtime/src/domains/keys.ts::handleKeysRequestno longer says thesite is "waiting for" a
FAILURE_PROPAGATION_SITESdeclaration; the Q1 = Aruling settled that none is owed there, ever. Prose in one
whystring: therow's
anchor,verdict,scopeand key are byte-identical, and the ablationbelow proves the row is still live over the file.
why (importing a merge-blocking gate into a non-gate instrument) — but a
by-value copy's failure mode is SILENCE, which is exactly how this file went
stale under a green farm.
readGateVocabulary()now PARSES the gate's owndeclaration (never imports it; the map is not exported) through the same
parseSourceFileevery other fact here is read with, and the--self-testcross-checks the
gate-vocabularysubset against it in BOTH modes. Itannounces, never absorbs: drift reddens, and a person decides which side
moved.
Declared beyond the two cards' letter: one more stale sentence, same defect
SELF_TEST_MODES's gated-subset note still called the handover "the ruling'sreserved handover step ... still gated on
outstanding == 0". That is thesame future-tense-over-a-landed-step defect as item 1, in the same file, and its
correct form is pinned by the same landed evidence (#15458), so it is repaired
here rather than left as a fourth lie carrier inside the instrument the cards are
about. The instruction's force is unchanged — that subset is still never a route
to the handover — only its tense is.
The OVERLAP reading, before and after
Measured against this branch's fork point,
6c9f34f20(a second checkout of thatcommit,
pnpm installed, sopackages/**is held byte-identical and the onlyvariable is this file).
gate-vocabularyinWRITE_SHAPED_CALLEESDURABILITY_CRITICAL_CALLEEStryInsert,tryUpdatemissing)--self-testgate-vocabularynameThe site-side overlap does not move, and the reason is a number, not a hope:
0 member sites and 0 quiet sites resolve their guarded write through
tryInsertor
tryUpdateon this tree. In this repo those two names are the ENCLOSINGfunctions of the seeder helpers, and the write inside them is
ql.insert(...)/ql.update(...)—origin: 'objectql'. The cross-file case the vocabulary entryexists for (a caller awaiting an imported
tryInsert) has no instance here. Sothe relabel corrects the VOCABULARY side of the overlap, and moves no printed
row: all three readings are byte-identical across the change.
The self-test verdict line does change, by design — it now carries the
cross-check's count:
Verification
All on the final commit — quoted per gate from its own printed verdict line, with
every exit code captured by redirecting to a file first and reading
$?beforeany pipe.
node scripts/measure-durability-swallow-family.mjsexit 0 on the branchand exit 0 on the fork-point checkout;
diffof the two normal-mode outputsexit 0 (also
--sitesexit 0,--jsonexit 0). See the table above.--self-testexit 0:✓ measure-durability-swallow-family self-test: 4 positive control(s) yield members at their declared tier, 3 negative control(s) yield none, 2 regression control(s) stay clear, 6 resolution control(s) resolve as declared, 3 DETERMINED register row(s) cross-check clean, 20 copied gate-vocabulary name(s) match the gate's own declaration, 56 member site(s) total--self-test=gated/pnpm check:swallow-census-controlsexit 0, samecounts under the gated banner.
pnpm check:durability-log-levelexit 0 on both trees, outputdiffdiffering only in pnpm's own banner line naming the checkout directory. Verdict
unchanged:
The
keys.tsregister row is proved LIVE over the edited file, by ablationon the committed tree, trap-guarded (a
trapon EXIT INT TERM that restoresfrom HEAD) with
absolute paths resolved from
git rev-parse --show-toplevel:silent BY DESIGN1 → 0,silent ON PURPOSE0 → 1, and the blob hash moved(
1408cfb2…→510a2954…);✗ 1 STALE row(s) in the DETERMINED register … packages/runtime/src/domains/keys.ts::handleKeysRequest [anchor-gone],and the site went back onto the printed worklist;
--self-testexit 1,--self-test=gatedexit 1;1408cfb21954547ac6a1c8bd5a0e889e258f5ca8equals the HEAD blob,git diff HEADfor that path is empty, and the marker counts are back at 1 / 0.
Derived gate family —
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths passed (it read the change set itself):25 commands, every one run, all exit 0. Including
pnpm check:pm-dispatch-gates—✓ dispatch-gates self-test: 1402 cases pass.(no case edited),
pnpm check:nul-bytes—check-nul-bytes: OK (scanned 7498 text file(s) … no raw ASCII control bytes),pnpm check:ratchet-remedy-authority—202 scripts swept,node scripts/check-self-test-wired.mjs—every one of the 169 script(s) CI runs that ship a --self-test has that self-test run by CI.Whole-repo
pnpm lint(eslint . --no-inline-config) exit 0, run in fullunder this container's shared verify lock —
os-verify-lock: VERDICT command-exit 0 · held the lock 88s (1m28s) · waited 129s (2m09s).No narrowing, so no narrowing evidence is owed. (A first attempt returned the
wrapper's exit 99,
VERDICT queue-timeout … never acquired; that is NOTMEASURED and is not counted anywhere above — the run quoted here is the one
that acquired.)
Control-byte self-scan of the edited file
(
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'): no hits.No test file is owed by this diff and none exists to re-run: the edited
script has no
*.test.*suite anywhere in the tree; its assertions are its own--self-test, which is run above in both modes and gained a leg. The only testthat names it,
packages/runtime/src/http-dispatcher.keys.test.ts, pinskeys.tsdelivery — a file this PR does not touch (proved by the restoreabove).
Changeset
skip-changeset: the diff isscripts/**only and publishes nothing.Not done here
Not flipped to ready, no auto-merge — the PM reviews first.
🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code