docs(devx): SELF_TEST_MODES argues the seventh control family into gated, where the self-test body points (#15766) - #15808
Conversation
…ated (#15766) The `SELF_TEST_MODES` doc block carried a dedicated section for each family that joined `gated` after the original three -- the `DETERMINED` register (#13886) and the copied gate vocabulary (#15459) -- but never one for `WORKLIST_READING_CONTROLS` (#15503), which the self-test body points at this block for by name: // ... and SELF_TEST_MODES for why // this family is gated: it compares a producer against a declared population A reader following that pointer landed in a block that discussed the other two by name and never mentioned the family they were asking about. The argument is CARRIED, not invented: it restates what `WORKLIST_READING_CONTROLS` already argues at its own declaration ("No — the empty worklist it pins is the state the repair programme is trying to reach") and the mechanical half the self-test body already states. The block now also states the pattern once: a family that joins `gated` owes a section here. Comments only -- the non-comment diff is empty; no behaviour change, no counts restated as integers (the named-list header from PR #15764 is the authority). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
|
ACCEPT — PR #15808 (head Comments only (non-comment diff 0 lines; all 20 added lines begin Measured by this seat: non-comment diff empty; Flip + arm when both required jobs report success on Generated by Claude Code |
|
Flipped ready + auto-merge enabled (09:12Z, Generated by Claude Code |
Fixes #15766
SELF_TEST_MODES's doc block is this file's declared rationale for which controlfamilies each
--self-testmode asserts. It carried a dedicated section for eachfamily that joined
gatedafter the original three, but never one forWORKLIST_READING_CONTROLS(#15503) — the family the self-test body sends thereader to that very block to ask about. The argument was not missing from the
file, only from the place readers are pointed at.
Comments only. No behaviour change.
The three anchors, read on this branch's base (
fa8575996)The card cites line numbers from its own base (
66e68adc6); the usage header thatlanded as PR #15764 shifted them by 22 lines. Quoted from the base of this branch:
The argument this section CARRIES rather than invents, at the declaration's own
doc (
:655-658, the card's:636-638):And the pointer that had nowhere to land, in the self-test body (
:2085-2091,the card's
:2065-2068):What was added
Twenty comment lines at the end of the
SELF_TEST_MODESblock, after the COPIEDgate-vocabulary section, in that section's pattern:
Two authorship choices worth naming for review:
the seventh family; the header that landed as PR docs(devx): measure-durability-swallow-family's usage header names its seven control families and the six
gatedruns (#15754) #15764 moved this file offordinals precisely so "the next one added contradicts a LIST and not an
integer". The COPIED section is already in the named form, so the named form is
both the newer pattern and the one that cannot go stale when a family is
inserted ahead of this one. No count is restated as an integer anywhere in the
addition.
the last thing a reader of the block sees, and the thing the card says is the
real loss: not a paragraph, but an eroding convention.
Verification
Comments-only proof. Every added or removed line that is not a comment:
prints nothing — zero lines.
git diff --stat origin/mainis1 file changed, 20 insertions(+), and all twenty begin with*.Syntax.
node --check scripts/measure-durability-swallow-family.mjs→EXIT=0.Both self-test modes were run for real, not skipped:
typescriptwas madeavailable in the worktree, so the modes the card is about actually executed. Run
through
scripts/pm/os-verify-lock.sh, whose verdict lines readVERDICT command-exit 0for each:Gate families, derived rather than guessed —
node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstack(
EXIT=0, change set of 1 path vs merge basefa8575996) named 29 commands.All 29 were run and all 29 pass (
pnpm check:pm-dispatch-gatesneeded a 900s budget for its✓ dispatch-gates self-test: 1478 cases pass.— a 300s cap killed it once, which is aharness limit and not a gate reading). Four of them first reported PREREQUISITE NOT MET
(exit 3,
yaml) orERR_MODULE_NOT_FOUND(@typescript-eslint/parser) in aworktree with no install; those two packages were made resolvable and the four
re-run to a real green rather than left as an unmeasured hole:
pnpm check:nul-bytes→EXIT=0, plus a manual scan of the file forcontrol characters outside tab/newline — no hits.
node scripts/pm/check-governed-merges.mjs --test scripts/measure-durability-swallow-family.mjsprints
✅ NOT governed — ordinary queue landing applies to a PR with exactly this file list.NOT MEASURED, by name. Three families the derivation itself marks unmeasurable
outside a CI run, because their argv takes a value from the workflow:
Also not measured here and left to CI: the always-runs tail with no path filter,
the repo-wide
pnpm lintscan, the 10 families whose declared population is toowide for any subtree glob to place, and the 38 artifact rosters whose
silentverdict is a fact about a list rather than about these paths.
Changeset
skip-changeset, applied to this PR. AGENTS.md: a changeset is owed for"anything that publishes", and ⛔ never
skip-changesetexcept for "a diff thatpublishes nothing from any released package". This diff is twenty comment lines in
a repo-internal instrument under
scripts/, whichlint.ymlcalls out as exactlythat case: "this PR edits a CI-internal script" is "the textbook
skip-changesetcase — such a PR releases nothing".
🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code