1# Verification checks (P4)23| check | outcome |4|---|---|5| 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 |6| FE 95% CI contains FE estimate (-0.396 ≤ -0.188 ≤ 0.020) | PASS |7| RE 95% CI contains RE estimate | PASS |8| All SEs positive (fe_se, re_se, item SEs) | PASS |9| k_extracted=5, k_harmonised=4, k_pooled=2 consistent with item flags | PASS |10| poolable ⇔ harmonised_se non-null; harmonisable ⇔ harmonised_estimate non-null | PASS |11| τ²=0 ⇒ RE = FE | PASS |12| I² = max(0,(Q−df)/Q)·100 with df=1 (Q=0.324 < 1 ⇒ I²=0) | PASS |13| pooled_pct_change_re = 100(exp(re)−1) | PASS |14| Pooled θ lies between the two component θ (−0.240, −0.118) | PASS |15| S4 approximate SE reproduces printed p=0.471 under normal test | PASS |16| S1 printed SE 0.14 reproduces printed p=0.086 (normal approx 0.0865) | PASS |17| Baseline unweighted mean of poolable θ (−0.179) close to FE (−0.188): magnitude sanity | PASS |18| n_input_rows equal `wc -l` counts / 5 items | PASS |19| Exclusion chain 5→5→4→2 sums (n_before − n_removed = n_after; chained) and final n_after = k_pooled | PASS |20| Sensitivity: S1 SE from CI (0.1378) changes RE to −0.189 [−0.395, 0.017]: conclusion unchanged | PASS |21| Information rule: no value taken from figures or outside the extracts (all values located by line in analysis.py printout) | PASS |22| 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) |23