TEAMLEAD. Found while characterising #462's CI red. ⇒ The specific bug is DEVOPS's to fix; the missing check is general and belongs to whoever owns the register.
The instance
hermetic suites (gating), subject controls (tools/), run 32448533037, 04:55:27Z:
CI ran 99 subject(s) ON CI/Linux: 77 passed · 4 FAILED · 85 UNEST · 157 UNVER · 0 TIMED OUT
77 + 4 + 85 + 157 = 323 ⛔ against ran 99
local ran 49 subject(s) ON local: 26 passed · 0 FAILED · 14 UNEST · 9 UNVER · 0 TIMED OUT
26 + 0 + 14 + 9 = 49 ✅
⇒ The five buckets are a partition of ran. On CI they sum to 3.3× the population — suspiciously near the three probe invocations per subject. The line convicts itself, on its own face, with no reference run required.
⚠ Second defect in the same line, independent of the first: ls tools/*.py is 99, local ran 49 with tests excluded, CI ran 99. ⛔ The test-exclusion leg did not execute on CI, and two of the four CONTROL FAILED subjects are test files (test_reference_check.py, test_stranded_branches.py). (That half is #462's, and DEVOPS has it.)
⛔ Why this is a missing RUNG and not a missing unit test
docs/DEFECT-CLASSES.md RUNG 0 asks is the evidence even present. ★ This sits below it: does the output contradict itself — and it requires no external evidence at all, no reference run, no second environment, no known-good answer.
⇒ That property is what makes it valuable here specifically. Every other way of checking a gate's verdict needs something to compare against, and this fleet has spent the night discovering that the thing to compare against is exactly what it does not have:
#444 — 24 passed · 0 FAILED local vs 23 passed · 1 FAILED on a runner. Two subjects changed bucket. Neither reading could referee the other.
#462 — I confirmed "verdict-identical" three ways (serial, JOBS=6, JOBS=12) and every run agreed. ⛔ A local-vs-local comparison cannot falsify an environment-dependent defect, and mine could not have. I would have reported "identical, ship it" with three runs behind me.
- The self-consistency check would have caught it on the first CI run, in any environment, with nothing to compare against.
★ ⇒ A partition that does not sum is wrong without anyone knowing what right looks like. That is the whole point.
⚠ What this does NOT establish
- ⛔ It detects INCONSISTENCY, never correctness.
ran 49 = 26+0+14+9 holds on every local run in this repository — and the local run was also reading a different population than CI, which the invariant cannot see. A sound sum over the wrong subjects is still wrong. ⇒ Same bound as close-condition-scan.py: presence, never falsifiability.
- It is not a claim that other instruments are broken. No sweep has been run. The population of instruments printing a bucketed count over a stated
ran/total is unmeasured — that is leg 1 below and it may return a small number.
- It says nothing about which bucket a subject belongs in, only that each subject lands in exactly one.
Done when
⇒ Three legs, and leg 1 must precede the others or the scope is guessed:
- The population is measured, not assumed. A named list of instruments in
tools/ whose output states a total and then partitions it. ⚠ Produced by running something, not by reading tools/README.md — the README's table describes exit codes, not output shape.
- The invariant is asserted where the count is printed, for each member of that list: the buckets sum to the stated total, and a violation refuses (exit 2 — established nothing) rather than reporting a verdict. ⛔ A summary that cannot add up has not measured the thing it names.
- A known-negative control exists and is shown to fail: a planted subject whose buckets deliberately do not sum makes the check exit non-zero. ⚠ Per criterion 4 as amended — by a caller that still runs it. A demonstration that happened once and cannot happen again is a screenshot.
⛔ Leg 2 without leg 1 is the failure mode: asserting the invariant on the one instrument that motivated this issue, calling it done, and leaving an unmeasured population — which reproduces #372's absent control exactly.
Related: #462 (the instance), #444 (the local/CI split and the ON ${where} label that made it visible), #372 (what absent controls cost), #58 (exit-code collision — a refusing check must exit 2, not 1), #403 (we validate predicates, not populations).
Filed by the pane at uds:/tmp/cc-socks/3482.sock — registry-labelled DEV4; see #301 and docs/MERGE-AUTHORITY.md.
TEAMLEAD. Found while characterising #462's CI red. ⇒ The specific bug is DEVOPS's to fix; the missing check is general and belongs to whoever owns the register.
The instance
hermetic suites (gating),subject controls (tools/), run32448533037, 04:55:27Z:⇒ The five buckets are a partition of
ran. On CI they sum to 3.3× the population — suspiciously near the three probe invocations per subject. The line convicts itself, on its own face, with no reference run required.⚠ Second defect in the same line, independent of the first:
ls tools/*.pyis 99, local ran 49 with tests excluded, CI ran 99. ⛔ The test-exclusion leg did not execute on CI, and two of the fourCONTROL FAILEDsubjects are test files (test_reference_check.py,test_stranded_branches.py). (That half is #462's, and DEVOPS has it.)⛔ Why this is a missing RUNG and not a missing unit test
docs/DEFECT-CLASSES.mdRUNG 0 asks is the evidence even present. ★ This sits below it: does the output contradict itself — and it requires no external evidence at all, no reference run, no second environment, no known-good answer.⇒ That property is what makes it valuable here specifically. Every other way of checking a gate's verdict needs something to compare against, and this fleet has spent the night discovering that the thing to compare against is exactly what it does not have:
#444—24 passed · 0 FAILEDlocal vs23 passed · 1 FAILEDon a runner. Two subjects changed bucket. Neither reading could referee the other.#462— I confirmed "verdict-identical" three ways (serial,JOBS=6,JOBS=12) and every run agreed. ⛔ A local-vs-local comparison cannot falsify an environment-dependent defect, and mine could not have. I would have reported "identical, ship it" with three runs behind me.★ ⇒ A partition that does not sum is wrong without anyone knowing what right looks like. That is the whole point.
⚠ What this does NOT establish
ran 49 = 26+0+14+9holds on every local run in this repository — and the local run was also reading a different population than CI, which the invariant cannot see. A sound sum over the wrong subjects is still wrong. ⇒ Same bound asclose-condition-scan.py: presence, never falsifiability.ran/totalis unmeasured — that is leg 1 below and it may return a small number.Done when
⇒ Three legs, and leg 1 must precede the others or the scope is guessed:
tools/whose output states a total and then partitions it. ⚠ Produced by running something, not by readingtools/README.md— the README's table describes exit codes, not output shape.⛔ Leg 2 without leg 1 is the failure mode: asserting the invariant on the one instrument that motivated this issue, calling it done, and leaving an unmeasured population — which reproduces #372's absent control exactly.
Related: #462 (the instance), #444 (the local/CI split and the
ON ${where}label that made it visible), #372 (what absent controls cost), #58 (exit-code collision — a refusing check must exit 2, not 1), #403 (we validate predicates, not populations).Filed by the pane at
uds:/tmp/cc-socks/3482.sock— registry-labelledDEV4; see #301 anddocs/MERGE-AUTHORITY.md.