Verification checks (P4)
- Clean re-run (deleted outputs, re-ran analysis.py): results.json byte-identical -> PASS
- Independent loop implementation of WCB (cell C2, first 50 reps) vs vectorised: max |diff| in q = 4.4e-15 -> PASS
- Exact N = sum(cluster sizes), G = len(sizes) asserted in analysis.py -> PASS
- 27 coverage keys / 27 mcse keys / 18 bias keys -> PASS
- table1 has 27 rows, wcb rel_bias blank -> PASS
- coverage in [0,1], MC SE >0 -> PASS
- MC SE = sqrt(p(1-p)/R) -> PASS
- table matches json -> PASS
- failure_cells == {cov<0.90}, n matches -> PASS
- nominal_cells rule -> PASS
- CR1 bias = G/(G-1) * CR0 bias -> PASS
- MC bias vs analytic within 2.5 MC SE -> PASS
- CR1 halfwidth >= CR0 halfwidth (t>z, G/(G-1)>1) -> PASS
- CR1 coverage >= CR0 coverage in every cell (nested intervals) -> PASS
- n_analysed = 9*2000 -> PASS
- exclusion ledger sums -> PASS
- best_procedure_small_G = argmax mean G=5 coverage -> PASS
Note: rel. bias z-scores vs analytic values range -2.00..1.36 (one at -2.0, cr0/cr1 G30 icc0.0 share the same z; consistent with MC noise across 9 independent cells).