# Verification checks (P4) | check | outcome | |---|---| | Clean re-run: deleted results.json, table1.csv, figure1.png; re-ran analysis.py; results.json byte-identical (cmp) and table1.csv SHA-256 identical | PASS | | FE 95% CI contains FE estimate (-0.396 ≤ -0.188 ≤ 0.020) | PASS | | RE 95% CI contains RE estimate | PASS | | All SEs positive (fe_se, re_se, item SEs) | PASS | | k_extracted=5, k_harmonised=4, k_pooled=2 consistent with item flags | PASS | | poolable ⇔ harmonised_se non-null; harmonisable ⇔ harmonised_estimate non-null | PASS | | τ²=0 ⇒ RE = FE | PASS | | I² = max(0,(Q−df)/Q)·100 with df=1 (Q=0.324 < 1 ⇒ I²=0) | PASS | | pooled_pct_change_re = 100(exp(re)−1) | PASS | | Pooled θ lies between the two component θ (−0.240, −0.118) | PASS | | S4 approximate SE reproduces printed p=0.471 under normal test | PASS | | S1 printed SE 0.14 reproduces printed p=0.086 (normal approx 0.0865) | PASS | | Baseline unweighted mean of poolable θ (−0.179) close to FE (−0.188): magnitude sanity | PASS | | n_input_rows equal `wc -l` counts / 5 items | PASS | | Exclusion chain 5→5→4→2 sums (n_before − n_removed = n_after; chained) and final n_after = k_pooled | PASS | | Sensitivity: S1 SE from CI (0.1378) changes RE to −0.189 [−0.395, 0.017]: conclusion unchanged | PASS | | Information rule: no value taken from figures or outside the extracts (all values located by line in analysis.py printout) | PASS | | Known source inconsistencies (S1 Mean LogToT, S1 N 93 vs 96, S3 ratio vs printed %, S4 ratio vs printed %, S4 column units, S5 legend) recorded in data_issues | PASS (reported, not fixable) |