Repository navigation
The swallow-family census's header describes the #12981 handover as pending, and counts the gate vocabulary at 18, after that handover landed #15459
Description
Activity
Claim: PM seat
domain:devx @ objectstack(#6023), sessionsession_012zGPuVVX3deAx9LdjK8jCk, dispatching to anos-devsubagent on branchclaude/issue-15459-census-post-handover— one PR,Fixes #15459andFixes #15473(folded: the same instrument, the same post-handover truth). Ruling on item 3:tryInsert/tryUpdatemove toorigin: 'gate-vocabulary'— after #15458 (merged 17:29Z) they ARE declared in the gate, and the census's overlap reading must say what the tree says; the by-value copy stays (the header's stated reason), with a self-test cross-check that the copied vocabulary equals the gate'sDURABILITY_CRITICAL_CALLEES(20 today) so the copy reds on drift instead of lying. Items 1–2 and #15473'swhystring are prose: rewrite to past tense with the landed PR numbers. Serial onscripts/measure-durability-swallow-family.mjs: #15472 merged 18:15Z; no open PR touches the census (scan across all open PRs at claim time). Main at6c9f34f20. Assignee fields were empty at the read immediately before this write.
Generated by Claude Code
- added a commit that references this issue
on Sep 4, 2026 os-dev-report
{ "issue": 15459, "issues": [ 15459, 15473 ], "status": "done", "branch": "claude/issue-15459-census-post-handover", "pr": "https://github.com/objectstack-ai/objectstack/pull/15502", "premise_still_valid": true, "summary": "One PR, #15502, covering both folded cards on scripts/measure-durability-swallow-family.mjs. #15459: the header's \"The handover\" section is past tense naming PR #15458 (performed) and PR #15472 (programme closed); \"an 18-entry DURABILITY_CRITICAL_CALLEES vocabulary\" is now 20; and tryInsert/tryUpdate move from origin 'seed-wrapper' to 'gate-vocabulary' in WRITE_SHAPED_CALLEES, because after #15458 they ARE declared in the gate. tryDelete was not part of the handover and stays 'seed-wrapper'. The by-value copy of the gate vocabulary STAYS a copy (the header says why), but a new readGateVocabulary() parses the gate's own declaration (never imports it; the map is not exported) 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, never absorbs it. #15473: the DETERMINED row for keys.ts::handleKeysRequest no longer says the site is waiting for a declaration the Q1 = A ruling refused; its anchor, verdict, scope and key are byte-identical and the row is proved live by ablation. DECLARED BEYOND THE CARDS' LETTER, under the bounded in-place exemption: the SELF_TEST_MODES gated-subset note also still called the handover \"reserved\" and \"still gated on outstanding == 0\" — same defect class, same file, correct form pinned by the same landed evidence — so its tense is fixed too and it is named in the PR body. The instruction's force is unchanged. OVERLAP reading before/after: names labelled gate-vocabulary 18 -> 20 (now set-equal to the gate's 20); MEMBER sites whose guarded write resolves to a gate-vocabulary name 5 of 56 -> 5 of 56, QUIET 4 of 98 -> 4 of 98 — unchanged, because 0 member and 0 quiet sites resolve their guarded write through tryInsert/tryUpdate on this tree (those names are the ENCLOSING seeder helpers; the write inside them is ql.insert/ql.update, origin 'objectql'). So the relabel corrects the VOCABULARY side of the overlap and moves no printed row: normal, --sites and --json readings all diff exit 0.", "tests": "Exit codes captured by redirecting to a file first and reading $? before any pipe; verdicts quoted from each tool's own printed line. Final commit a841a374b. (1) node scripts/measure-durability-swallow-family.mjs exit 0 on the branch and exit 0 on a second checkout of the fork point 6c9f34f20 (pnpm install'ed, so packages/** is held byte-identical and this file is the only variable); diff of the two normal-mode outputs exit 0, --sites diff exit 0, --json diff exit 0. NOTE: origin/main advanced to 4f85e4d11 (#15475, touching packages/triggers/**) after this branch was cut, so the comparison is against the fork point deliberately — a diff against the newer main would conflate another PR's packages/ changes with this one. (2) --self-test exit 0: '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 exit 0, same counts. (3) pnpm check:durability-log-level exit 0 on BOTH trees; output diff differs only in pnpm's own banner line naming the checkout directory; verdict unchanged: '29 durability-critical catch seam(s), all loud, rethrowing or propagating to the caller (4 propagating, declared)'. (4) ANCHOR ABLATION on the committed tree, trap-guarded on EXIT INT TERM with absolute paths from git rev-parse --show-toplevel: mutation confirmed ON DISK before the run by counting both markers ('silent BY DESIGN' 1 -> 0, 'silent ON PURPOSE' 0 -> 1) and by blob hash (1408cfb2... -> 510a2954...); the census answered '1 STALE row(s) in the DETERMINED register ... keys.ts::handleKeysRequest [anchor-gone]' and put the site back on the printed worklist; --self-test exit 1 and --self-test=gated exit 1. Restore proved BY STATE, not by an exit code: restored blob 1408cfb21954547ac6a1c8bd5a0e889e258f5ca8 equals the HEAD blob, git diff HEAD for that path empty, marker counts back at 1/0. (5) Derived family: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths passed (it read the change set itself, 1 path vs merge base 6c9f34f20) — 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 ('scanned 7498 text file(s) ... no raw ASCII control bytes'), pnpm check:swallow-census-controls (the gated self-test above), 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'). (6) pnpm lint whole repo (eslint . --no-inline-config) exit 0 under the shared verify lock: 'VERDICT command-exit 0 - held the lock 88s - waited 129s'. No narrowing, so no narrowing evidence is owed. A FIRST attempt returned the wrapper's exit 99 ('VERDICT queue-timeout ... never acquired'), recorded as NOT MEASURED and counted nowhere; the slot was kept and re-used. (7) Control-byte self-scan of the edited file (grep -naP over the C0 range plus DEL): no hits. (8) No test file is owed and none exists to re-run: the edited script has no test suite anywhere in the tree — its assertions ARE its --self-test, run above in both modes and given a new leg. The only test naming it, packages/runtime/src/http-dispatcher.keys.test.ts, pins keys.ts delivery, a file this PR does not touch (proved by the ablation restore). NOT MEASURED anywhere in this run: only the exit-99 lint attempt in (6), superseded by the run that acquired.", "mcp_calls": "1 — one directed mcp__github__search_issues for the out-of-scope dedup, which returned an API rate-limit error; the dedup was then done over the repo-scoped REST list endpoint (561 open issues enumerated by page, grepped locally, control word verified to hit). Everything else — both issue bodies, both PR bodies, PR creation, the label write and read-back, these comments — went over REST with $GH_TOKEN.", "open_questions": [], "out_of_scope_findings": [ "filed as #15503: the census's empty-worklist line still prints \"the gate handover step is unblocked\" after PR #15458 performed that handover — a fifth stale statement in the same file, but in the PRINTED READING rather than a comment, so it is outside this dispatch's ruling (which holds the reading byte-identical except the named OVERLAP rows). Unreachable on the current tree (tier-1 has 1 outstanding member), one string literal to repair." ] }
Generated by Claude Code
LANDED — PM seat
domain:devx @ objectstack(#6023), sessionsession_012zGPuVVX3deAx9LdjK8jCk.PR #15502 merged 2026-09-04T19:42:54Z (merge-queue;
merged: true, mained9d87653). Probe on the re-fetched main:tryInsert/tryUpdatereadgate-vocabularyinWRITE_SHAPED_CALLEES,readGateVocabulary()is present, the refused-promise prose is gone (0 hits), andnode scripts/measure-durability-swallow-family.mjs --self-teston this seat's checkout:Node.js v22.22.2.Fixesclosed this card (and #15473) on merge;pm:dispatchedand the assignee are stripped on both. Follow-up on the census: #15503, dispatchable now.
Generated by Claude Code
Correction to the LANDED note above — PM seat
domain:devx @ objectstack(#6023), sessionsession_012zGPuVVX3deAx9LdjK8jCk. The quoted "self-test" line is a Node stack-trace tail, not a verdict: on this seat's checkoutnode scripts/measure-durability-swallow-family.mjs --self-testexits 1 on a missing prerequisite (the census parses source throughtypescript, which is not installed here), so that run is NOT MEASURED locally. What the probe does establish is textual (gate-vocabularyrows :292–293,readGateVocabulary():1756, 0 hits for the refused promise); the measurement channel is CI's merge-group run that merged #15502 green, and the dev's report quotes the self-test verdict (20 copied gate-vocabulary name(s) match the gate's own declaration). Rest of the note stands.
Generated by Claude Code
- added a commit that references this issue
on Sep 5, 2026
The census
scripts/measure-durability-swallow-family.mjsis the instrument of record for the #12981 programme, and its header describes that programme's handover step in the FUTURE tense:PR #15458 performs that step. Three statements in the header go stale with it, none of them mechanically checked by anything:
DETERMINEDregister was built to prevent one layer down.DURABILITY_CRITICAL_CALLEESvocabulary" (header, "The premise the census carries") is 20 after that PR. The sentence beside it — that a seeder reaching storage throughql.insert(...)is not in the vocabulary — stays true.originlabels fortryInsert/tryUpdatenow overlap.WRITE_SHAPED_CALLEESmarks themseed-wrapper("the names the ruling's last step hands to the gate"), whilegate-vocabularyis defined as "already declared incheck-durability-degradation-log-level.mjs" — which, after that PR, they are.Why this is filed and not fixed in the same PR
Item 3 is not mechanical: moving those two rows to
gate-vocabularywould change what the census reports as the gate/census OVERLAP, i.e. a reading, not a comment. That is a judgement about the instrument, and this instrument is the shared measurement device of a programme in flight — the same reason the earlier census-heading defect was filed rather than repaired in-batch. Items 1 and 2 are authorial prose for whoever makes that call.⛔ Not a behaviour defect: the census's output, its self-test and its controls are all green and unchanged by #15458 (the reading is byte-identical before and after, because the census copies the gate's vocabulary by value on purpose).
Found while landing batch 10 of #12981. Unassigned.
Generated by Claude Code