# Verification checks (P4, 2026-10-30) Reproducibility: deleted out/results.json, table1.csv, figure1.png, exclusions.csv; re-ran `~/wp29/venv/bin/python out/analysis.py`; byte-identical results.json (cmp) and identical table1.csv/figure1.png md5 on first run; repeated after adding sensitivity keys: results.json byte-identical (cmp). Script verifies SHA-256 of every source against data/README.md and asserts every printed number it uses against the source line (printed to stdout). Independent recomputation and consistency (all PASS): - FE estimate recomputed independently from (θ, SE) of S1, S4: matches fe_estimate. - Q recomputed (0.3237 < df=1) → τ²=0, I²=0, RE = FE: consistent. - All SEs positive; FE and RE CIs contain their estimates; CI width = 3.92·SE. - pooled_significant_5pct consistent with RE CI (−0.396, 0.020 → includes 0 → false). - pooled_pct_change_re = 100(exp(re)−1). - k_extracted=5, k_harmonised=4 (non-null θ), k_pooled=2 (poolable flags) consistent. - poolable ⇒ SE non-null; not harmonisable ⇒ θ null; reason_if_not non-null iff not poolable. - Pooled θ lies within the range of poolable θ; |RE − baseline unweighted mean| < 0.05. - Signs: S1, S3, S4 θ<0 (faster with AI), S2 θ>0 (slower) — match the printed directions. - Exclusion ledger: 5 − (0+1+2) = 2 = k_pooled. - table1.csv: 5 rows × 12 columns. - Heterogeneity label follows the I² rule. - Sensitivities (in results.json): S1 SE from CI → FE −0.1891 [−0.3954, 0.0172]; S4 θ from time ratio → FE −0.1897 [−0.3992, 0.0198]; conclusion unchanged. - Information rules: no number outside the extracts used; S2 CI (figure-only) and S3 SE (stars only) set to null.