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