โ€บNavigation
Dashboard โ€บ Probes โ€บ Probe Hardening Loop โ€บ iter 4

iter 4 โ€” the guard measures line-proximity, not instability QUANTIFIED

Attack item R-6 ยท 2026-07-29 ยท harness harness/unanimity_false_veto.py ยท draft remedy PRE-REGISTRATION-DRAFT-xi-stability-guard.md

The rule under attack

A candidate passes the ฮพ stage only if xi_worst < 0.50 and zero of 62 cells is flagged unstable โ€” a cell being unstable unless all 9 contiguous sub-slice readings agree on which side of the frozen lines the cell sits. In the instrument that is two lines:

if v == "PASS" and n_unstable > 0:
    v = "PENDING"          # rotation_robust_eval.py:555 (xi) and :670 (h_norm analogue)

Prediction, written before running

False-veto โ‰ˆ 0 at true ฮพ=0 (readings sit ~100 ฯƒ from the line), climbing steeply toward 100% as the true value approaches 0.50 โ€” which would mean the guard measures proximity, not instability. Confirmed, and the transition is sharper than expected.

Result โ€” 60 candidates per level, 62 cells, n=3,990, continuous x

Continuous x is deliberate: it removes the estimator's tie randomness entirely (iter 2), so everything below is the rule, not the estimator.

true ฮพmean worst-cell ฮพPASSfalse-vetomean unstable cells
0.000.025660/600%0.00
0.100.135060/600%0.00
0.200.233760/600%0.00
0.300.331160/600%0.00
0.400.427560/600%0.00
0.450.474017/6072%1.62
0.480.50460/60see below37.67

The load-bearing row is ฮพ=0.45. Worst-cell reads 0.4740 โ€” below the line โ€” and 72% are still refused, by the unanimity clause alone rather than by magnitude. Nothing is flagged at all up to ฮพ=0.40; then it collapses.

Attacking my own result

The 0.48 row overstates the case and I am not going to lean on it. Mean worst-cell there is 0.5046 โ€” above the line. The statistic under test is a max over 62 cells, whose expectation exceeds the per-cell truth, so at ฮพ=0.48 those candidates are genuinely borderline at the worst-cell statistic and refusing them is defensible. The argument rests on 0.45; 0.48 is reported for shape only.

That inflation is itself worth recording: at ฮพ=0.45 the worst-cell mean sits +0.024 above the per-cell truth. That is the selection bias of a max-over-62 โ€” the research's decision (b) โ€” observed in this instrument rather than imported from a paper.

Why a flat tolerance k would not fix this

The obvious remedy is "allow up to k unstable cells", which is what the k-FWER route in the research implies. It fails here, because the failure is concentrated, not uniform:

true ฮพrequired k
โ‰ค 0.400 โ€” nothing is ever flagged
0.45โ‰ˆ 2
0.48โ‰ˆ 38 of 62

Any fixed k large enough to recover power near the line nullifies the guard everywhere else. The required k is a steep function of proximity to the line โ€” which is the formal statement that the guard is measuring nearness to a threshold rather than instability of the data. This refines the research's recommendation A3 rather than following it.

What did NOT change

No dial, band, threshold, tolerance or sub-slice fraction was touched, and the guard was not deleted โ€” its strongest deletion argument is second-hand and about the sample mean, and ฮพ is not a sample mean (research gap #962). Four remedy options are drafted in PRE-REGISTRATION-DRAFT-xi-stability-guard.md, each with its free parameters named, awaiting operator sign-off. That is the whole of the loop's authority here.

Limits, stated rather than buried

Evidence: harness/unanimity_false_veto_evidence.json. Reproduce: VIRTUAL_ENV="" uv run --python 3.13 --no-project --with numpy --with pandas python3 harness/unanimity_false_veto.py