Checks
- Rerun of out/analysis.py: results.json byte-identical (cmp) — PASS.
- Independent recomputation with csv module (no pandas): 20 countries, 15 balanced, mean2000 78.060267, mean2022 81.553067, change 3.4928, baseline 78.692 (20 countries) — PASS (matches).
- n_analysed = 15 × 23 = 345 = rows of analytic.csv; no duplicate (iso3,year); no missing values — PASS.
- Exclusion ledger: 439 → 439 → 416 → 368 → 345; n_before − n_removed = n_after each row, chained — PASS.
- n_countries_balanced + n_countries_incomplete = 15 + 5 = 20 = n_countries_total — PASS.
- change = mean_2022_balanced − mean_2000_balanced (81.553067 − 78.060267 = 3.4928) — PASS.
- Magnitude: baseline 2022 mean (78.692) lower than balanced 2022 (81.553) as expected since baseline adds lower-LE BGD/ETH/IND/NGA and CHE — PASS (plausible).
- Duplicate TUR rows have identical values (script aborts on conflict) — PASS.