docs(devx): measure-durability-swallow-family's usage header names its seven control families and the six gated runs (#15754) - #15764
Conversation
…der (#15754) The header claimed "all 4 control families" for `--self-test` and "the 3 families CI runs" for `--self-test=gated`. Measured on the branch base, the file declares SEVEN families and `gated` asserts SIX of them. Written as a NAMED list rather than a bare integer, so the next family added contradicts a list and not a number, and pointing at `SELF_TEST_MODES` plus each mode's verdict line as the authority. Three further stale counts of the same list, elsewhere in the file's comments, are corrected the same way. Comments only; no behaviour change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
|
ACCEPT — PR #15764 (head Comments only: the non-comment diff is 0 lines (re-run by this seat: empty). The usage header now names the seven families and says Measured by this seat: The unfiled finding ( Flip + arm when both required jobs report success on Generated by Claude Code |
|
Flipped ready + auto-merge enabled (07:09Z, Generated by Claude Code |
…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
Fixes #15754
Comments only in
scripts/measure-durability-swallow-family.mjs. No behaviourchange: the non-comment diff is empty, proved below.
The reading, MEASURED on the branch base
The header claimed the instrument has four control families and that
--self-test=gatedruns three. Measured at base66e68adc6, it declaresseven and
gatedasserts six.Seven declarations, each with the line that introduces it:
and the two cross-checks, which are families of the self-test rather than tables
of controls, marked as such by the self-test body's own section rules:
gateddrops exactly one of the seven, and the drop is a single expression:That it is the ONLY drop is not an impression: every occurrence of the
identifier
gatedin the file is at:11,:22,:26(prose),:965,:973,:984,:991,:1006(prose),:1011(SELF_TEST_MODES),:1914(the assignment
const gated = mode === 'gated'),:1922(the drop above),:1966,:2027,:2068(prose), and:2098,:2102,:2105(the verdictlines). The four remaining control loops --
REGRESSION_CONTROLS:1938,NEGATIVE_CONTROLS:1944,RESOLUTION_CONTROLS:1950,WORKLIST_READING_CONTROLS:2081-- and the two cross-check sections carry nogatedguard at all.The verdict line the gated mode prints (
:2102-2117) names six and says why theseventh is absent -- and unlike the card, this is a RUN, not a source reading:
The bare mode's verdict names all seven (
4 positive,3 negative,2 regression,6 resolution,3 DETERMINED,20 copied gate-vocabulary,3 worklist reading).PR #15756 was verified, not copied. It carries the same "seven declared /
six in
gated" reading intolint.ymlfor #15569, but it is still OPEN at thetime of writing, so this branch's base still has
lint.yml:4134saying "declaresfour control families" and
:4146saying "runs RESOLUTION + NEGATIVE +REGRESSION". That file is #15569's scope and is untouched here; the reading above
is derived from this instrument's own declarations and from running it.
Before / after
Before (
:10-12):After (
:10-32):The card left one question open -- whether the header should point at
SELF_TEST_MODESand carry no list at all. It does BOTH: it names the families(so a reader choosing a mode gets the answer where they look for it) and it
demotes itself explicitly, naming
SELF_TEST_MODESand the verdict lines as theauthority. The gated-vs-bare asymmetry argument is kept in substance rather than
deleted:
POSITIVE_CONTROLSpin members the repair programme exists to remove.The stale integers are NOT quoted verbatim in the replacement. Leaving the
strings
all 4 control families/the 3 families CI runsin the file, eveninside a historical aside, would leave the next re-measure's grep hitting live
text; the lesson is kept, the grep-bait is not.
The other three stale counts of the same list
Grepped for
four,4 control,three,3 familand the rest across thefile's comments. Three more hits were the same defect, and all three are fixed
here by naming rather than recounting:
:487The other three families all read MEMBERSHIPThe other membership-reading families -- POSITIVE, NEGATIVE, REGRESSION -- all read MEMBERSHIP:946All four families were green only while somebody remembered to run them by handThe families that existed then (POSITIVE, NEGATIVE, REGRESSION, RESOLUTION) were green only while somebody remembered to run them by hand:965So `gated` is the families the repair programme CANNOT destroy — three at #13919, joined by the `DETERMINED` register at #13886 (last section)... — NEGATIVE, REGRESSION and RESOLUTION at #13919, joined by the `DETERMINED` register (#13886, last sections), the copied gate vocabulary (#15459) and the worklist readings (#15503, whose case is made at `WORKLIST_READING_CONTROLS`):946is dated rather than recounted on purpose: four families really were allthere was when #13919 was filed, so the fix is to say when, not to bump a
number that would go stale again.
Two hits were examined and deliberately left alone, because neither is stale:
:982## The FIFTH family (#13886) is in BOTH modes-- an ordinal at thepoint of introduction, and
DETERMINEDis still the fifth family declared.:2074const WORKLIST_READING_CONTROL_COUNT = 3-- code, not a comment, andit pins the number of worklist READINGS, a different list from the families.
Verification
Exit codes captured by redirecting first (
cmd > log 2>&1; EXIT=$?), never readthrough a pipe.
origin/maingit diff -U0 origin/main -- scripts/measure-durability-swallow-family.mjsfiltered to non-comment+/-lines prints nothingnode --check scripts/measure-durability-swallow-family.mjsnode scripts/measure-durability-swallow-family.mjs --self-test=gatednode scripts/measure-durability-swallow-family.mjs --self-testpnpm check:swallow-census-controlspnpm check:nul-bytesnode scripts/pm/check-governed-merges.mjs --test scripts/measure-durability-swallow-family.mjs✅ NOT governed — ordinary queue landing appliesnode scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstackHow the self-test was made runnable. A fresh worktree has no
pnpm install,and this instrument's only external import is
typescript(:259; its sibling./ts-parse.mjsimports nothing external). Rather than report the run as NOTMEASURED,
typescript@6.0.3was copied into the worktree'snode_modulesandboth modes were then run for real. Nothing else was installed, and the copy is
outside the diff.
Derived gate family: 29 commands, all run
25 exited 0. The four non-zero exits are all NOT MEASURED -- each died before
running a single check, on a dependency a fresh worktree does not have:
node scripts/check-ci-filter-parity.mjsPREREQUISITE NOT MET — the dependency \yaml` is not installed`node scripts/check-closing-keyword-parity.mjsyamlnode scripts/check-closing-keyword-parity.mjs --self-testyamlnode scripts/check-comment-mask-corpus.mjsERR_MODULE_NOT_FOUND: Cannot find package '@typescript-eslint/parser'Each of those gates prints "Nothing was measured: this gate exited before running
a single check" itself. CI installs and runs all four.
Changeset
skip-changeset. AGENTS.md, Post-Task Checklist item 3: the label "is for a diffthat publishes nothing from any released package." This diff is one repo-root
tooling script --
scripts/measure-durability-swallow-family.mjs, ameasure-*instrument deliberately outside the
check:*/gen:*ledger -- and no publishedpackage contains it.
🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code