diff --git a/scripts/measure-durability-swallow-family.mjs b/scripts/measure-durability-swallow-family.mjs index a098c0b3a6..a580c5cdeb 100644 --- a/scripts/measure-durability-swallow-family.mjs +++ b/scripts/measure-durability-swallow-family.mjs @@ -7,9 +7,28 @@ // node scripts/measure-durability-swallow-family.mjs --sites # every site // node scripts/measure-durability-swallow-family.mjs --json # machine // node scripts/measure-durability-swallow-family.mjs --file

# one file -// node scripts/measure-durability-swallow-family.mjs --self-test # all 4 control families +// node scripts/measure-durability-swallow-family.mjs --self-test # every control family // node scripts/measure-durability-swallow-family.mjs --self-test=gated -// # the 3 families CI runs +// # every family but POSITIVE_CONTROLS +// +// THE CONTROL FAMILIES, NAMED rather than counted, so that the next one added +// contradicts a LIST and not an integer -- which is exactly how the two bare integers +// that stood here before went stale, unread, as further families landed: +// `POSITIVE_CONTROLS`, `NEGATIVE_CONTROLS`, `REGRESSION_CONTROLS`, `RESOLUTION_CONTROLS`, +// the `DETERMINED` register cross-check (#13886), the copied gate-vocabulary cross-check +// (#15459), and `WORKLIST_READING_CONTROLS` (#15503). +// +// `--self-test=gated` asserts every one of them EXCEPT `POSITIVE_CONTROLS`, and that +// asymmetry is the point of the split rather than a convenience: the single expression +// `gated ? [] : POSITIVE_CONTROLS` is the ONLY thing either mode drops, and it drops +// those controls because they pin MEMBERS of the #12981 worklist that the repair +// programme exists to REMOVE -- a control a successful repair destroys cannot hold a +// CI gate. +// +// ⛔ THIS PARAGRAPH IS NOT THE AUTHORITY: `SELF_TEST_MODES` is (with the next block, +// for what CI runs and why), together with the verdict line each mode prints, which +// NAMES the families it just asserted. A reader who finds either of them disagreeing +// with this list should trust them and repair this list. // // THE CENSUS is NOT a gate: it exits 0 on any membership count, it prints "a // MEASUREMENT, not a gate" on every run of it, and the file is deliberately not @@ -484,8 +503,9 @@ const REGRESSION_CONTROLS = [ /** * RESOLUTION controls: a (call site -> body) pair that must not move. * - * The other three families all read MEMBERSHIP, and membership cannot see this - * defect. Measured, on the tree the scope-aware index landed against: the flat + * The other membership-reading families -- POSITIVE, NEGATIVE, REGRESSION -- all + * read MEMBERSHIP, and membership cannot see this defect. Measured, on the tree + * the scope-aware index landed against: the flat * last-wins index misresolved 27 reached call sites, and the census printed * byte-identical output before and after the repair — 56 members, 98 quiet, the * same stats. A control that reads the census output is therefore GREEN against @@ -943,9 +963,9 @@ function staleLines(stale) { * * ## Why there is a subset at all * - * All four families were green only while somebody remembered to run them by - * hand: measured on `origin/main`, nothing in `package.json` or `.github/**` - * named this script. The same resolver was then repaired three times (#13459, + * The families that existed then (POSITIVE, NEGATIVE, REGRESSION, RESOLUTION) + * were green only while somebody remembered to run them by hand: measured on + * `origin/main`, nothing in `package.json` or `.github/**` named this script. The same resolver was then repaired three times (#13459, * #13474, PR #13915) with no gate holding any of the previous repairs, and the * census's numbers feed #12981's repair worklist, so a wrong denominator * propagates into that programme unwatched. @@ -962,8 +982,10 @@ function staleLines(stale) { * repairs THAT file. ⛔ A gate that reddens on success is not a gate, and worse, * it teaches the fleet to route around gates. * - * So `gated` is the families the repair programme CANNOT destroy — three at - * #13919, joined by the `DETERMINED` register at #13886 (last section) — and the + * So `gated` is the families the repair programme CANNOT destroy — 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`) — and the * exclusion is PERMANENT rather than pending (#13919 ruling of 2026-09-01, * boundary 1): repairs move a member from tier `dark` to tier `channelled` and * it stays a member, so neither the negative controls, the regression controls,