Checks (P4)
- Clean re-run of out/analysis.py twice: results.json byte-identical (cmp) -> PASS
- analytic rows == n_analysed: PASS
- n_unique - n_missing == n_analysed: PASS
- ledger n_before-n_removed==n_after: PASS
- ledger chained: PASS
- ledger start = rows read: PASS
- ledger end = n_analysed: PASS
- raw rows - total removed = n_analysed: PASS
- firm_id unique in analytic: PASS
- no NaN revenue_musd: PASS
- se positive: PASS
- median<=mean (right-skew) & within range: PASS
- mean_revenue_musd << raw baseline (unit mixing inflates raw): PASS
- independent recompute mean_employees: PASS