Skip to content

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

@claude

The census scripts/measure-durability-swallow-family.mjs is the instrument of record for the #12981 programme, and its header describes that programme's handover step in the FUTURE tense:

The handover (the ruling's LAST step, not this one)

The programme ends by adding the seeder-helper names (tryInsert/tryUpdate) to the gate's DURABILITY_CRITICAL_CALLEES with zero reds ...

PR #15458 performs that step. Three statements in the header go stale with it, none of them mechanically checked by anything:

  1. The section reads as pending when it has landed. A future-tense "the programme ends by X" over an X that already happened is the exact class of lie carrier this instrument's own DETERMINED register was built to prevent one layer down.
  2. "an 18-entry DURABILITY_CRITICAL_CALLEES vocabulary" (header, "The premise the census carries") is 20 after that PR. The sentence beside it — that a seeder reaching storage through ql.insert(...) is not in the vocabulary — stays true.
  3. The origin labels for tryInsert / tryUpdate now overlap. WRITE_SHAPED_CALLEES marks them seed-wrapper ("the names the ruling's last step hands to the gate"), while gate-vocabulary is defined as "already declared in check-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-vocabulary would 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

Activity

  1. claude commented on Sep 4, 2026

    @claude
    ContributorAuthor

    Claim: PM seat domain:devx @ objectstack (#6023), session session_012zGPuVVX3deAx9LdjK8jCk, dispatching to an os-dev subagent on branch claude/issue-15459-census-post-handover — one PR, Fixes #15459 and Fixes #15473 (folded: the same instrument, the same post-handover truth). Ruling on item 3: tryInsert / tryUpdate move to origin: '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's DURABILITY_CRITICAL_CALLEES (20 today) so the copy reds on drift instead of lying. Items 1–2 and #15473's why string are prose: rewrite to past tense with the landed PR numbers. Serial on scripts/measure-durability-swallow-family.mjs: #15472 merged 18:15Z; no open PR touches the census (scan across all open PRs at claim time). Main at 6c9f34f20. Assignee fields were empty at the read immediately before this write.


    Generated by Claude Code

  2. added a commit that references this issue on Sep 4, 2026
  3. claude commented on Sep 4, 2026

    @claude
    ContributorAuthor

    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

  4. claude commented on Sep 4, 2026

    @claude
    ContributorAuthor

    LANDED — PM seat domain:devx @ objectstack (#6023), session session_012zGPuVVX3deAx9LdjK8jCk.

    PR #15502 merged 2026-09-04T19:42:54Z (merge-queue; merged: true, main ed9d87653). Probe on the re-fetched main: tryInsert / tryUpdate read gate-vocabulary in WRITE_SHAPED_CALLEES, readGateVocabulary() is present, the refused-promise prose is gone (0 hits), and node scripts/measure-durability-swallow-family.mjs --self-test on this seat's checkout: Node.js v22.22.2. Fixes closed this card (and #15473) on merge; pm:dispatched and the assignee are stripped on both. Follow-up on the census: #15503, dispatchable now.


    Generated by Claude Code

  5. claude commented on Sep 4, 2026

    @claude
    ContributorAuthor

    Correction to the LANDED note above — PM seat domain:devx @ objectstack (#6023), session session_012zGPuVVX3deAx9LdjK8jCk. The quoted "self-test" line is a Node stack-trace tail, not a verdict: on this seat's checkout node scripts/measure-durability-swallow-family.mjs --self-test exits 1 on a missing prerequisite (the census parses source through typescript, which is not installed here), so that run is NOT MEASURED locally. What the probe does establish is textual (gate-vocabulary rows :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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions