1# Verification checks (P4)23- Clean re-run: deleted results.json/table1.csv/figure1.png, re-ran analysis.py; results.json and table1.csv byte-identical (cmp) -> PASS4- data/ SHA-256 unchanged after run -> PASS5- fe_ci_low<=fe_estimate<=fe_ci_high -> PASS6- re_ci_low<=re_estimate<=re_ci_high -> PASS7- fe_se>0 and re_se>0 -> PASS8- k_extracted==5 -> PASS9- k_harmonised == count non-null -> PASS10- k_pooled == count poolable -> PASS11- poolable implies se>0 and harmonisable -> PASS12- non-harmonisable has null estimate and reason -> PASS13- not poolable has reason -> PASS14- CI width = 2*1.96*se (RE) -> PASS15- tau2=0 -> RE==FE -> PASS16- I2 in [0,100] -> PASS17- Q<df -> I2=0 and tau2=0 -> PASS18- het label consistent -> PASS19- significance flag consistent -> PASS20- pct change consistent -> PASS21- pooled between min/max of pooled thetas -> PASS22- pooled within 0.05 of unweighted baseline -> PASS23- S1 theta -> 1-exp = 21% as printed -> PASS24- S2 exp(theta)-1 = 0.19 -> PASS25- S3 exp(theta)-1 = -0.2979 -> PASS26- S4 SE reproduces p=0.471 -> PASS27- exclusion ledger rows sum -> PASS28- ledger: 5 - removed == k_pooled -> PASS29- table1 has 5 rows -> PASS30- n_input_rows matches wc -l -> PASS31