Verification checks (P4) — 2026-10-30
- Clean re-run: deleted results.json/table1.csv/figure1.png, re-ran analysis.py; results.json byte-identical (cmp) to previous run. PASS
- FE CI contains FE estimate; RE CI contains RE estimate. PASS
- fe_se, re_se > 0. PASS
- k_extracted/k_harmonised/k_pooled = 5/4/2 and exclusions.csv chain 5→5→4→2 ends at k_pooled. PASS
- tau2 = 0 ⇒ RE = FE (identical). PASS
- I² recomputed from Q with df=1 equals reported (0). Label "low" consistent with rule. PASS
- pooled_pct_change_re = 100(exp(re)−1). PASS
- pooled_significant_5pct = false consistent with RE CI [−0.396, 0.020] including 0. PASS
- Every item: harmonised_se null ⇔ not poolable. PASS
- S4 approximate SE reproduces the printed p=0.471 under normal approx. PASS
- FE lies between the two pooled thetas (−0.240, −0.118); unweighted mean of pooled thetas (baseline −0.179) within 0.05 of FE (−0.188). PASS
- n_input_rows equal
wc -lcounts. PASS - table1.csv has 5 rows and the 12 required columns. PASS
- Printed-value fidelity: analysis.py prints every source line used; values parsed from those lines (S1 −0.24/(0.14), CI [−0.51,0.03], p=0.086; S2 19%; S3 44.29/63.10/−29.79%***; S4 50.5/56.9/11.1/0.471; S5 −0.278/(0.295)/18332) — verified by eye against
cat -noutput. PASS - Known source inconsistencies (not failures of this analysis) are listed in results.json data_issues.