Verification checks (P4)
- [PASS] Clean re-run (deleted results.json/table1.csv/figure1.png, ran analysis.py twice): results.json and table1.csv byte-identical across runs; runtime ≈2 s.
- [PASS] table1 has 27 rows
- [PASS] 27 coverage/SE keys, 18 rel_bias keys
- [PASS] coverage in [0,1]
- [PASS] MC SE > 0 and equals sqrt(p(1-p)/R)
- [PASS] failure_cells == {coverage<0.90}, n_failure_cells matches (n=11)
- [PASS] nominal_cells rule (n=6)
- [PASS] rel_bias CR1/CR0 = G/(G-1)
- [PASS] n_analysed = 9*2000
- [PASS] exclusion ledger sums (9-0=9)
- [PASS] table1 matches results.json
- [PASS] rel_bias_var empty for wcb only
- [PASS] MC rel bias CR0 vs analytic E[V_CR0]/Var: all |z|<=3 (z = -0.89, 0.62, 1.36, 0.57, -0.03, 0.87, -2.00, -0.97, -1.20; one |z|≈2 out of 9 is within expectation)
- [PASS] empirical Var(ybar)/exact within ±0.07 (≈2.2 SD of a var ratio with R=2000: sd≈0.032) (0.984, 1.027, 0.988, 1.020, 0.986, 0.993, 0.968, 0.982, 1.045)
- [PASS] bootstrap V* strictly positive
- [PASS] halfwidths positive
- [PASS] best_procedure_small_G is argmax of avg G=5 coverage {'cr0': 0.7456666666666667, 'cr1': 0.8933333333333332, 'wcb': 0.8574999999999999}
- [PASS] magnitude vs baseline: naive iid coverage ≈0.95 at ICC=0 and collapses at ICC>0 (sanity)
- Information rules: no dates/chronology involved; only data/design.csv read (verified by grep of analysis.py: single read_csv).