# Verification checks (P4) - Clean re-run: deleted results.json/analytic.csv/exclusions.csv, re-ran analysis.py; byte-identical outputs (cmp) -> PASS - analytic rows == n_analysed: PASS - analytic firm_id unique: PASS - no NaN revenue in analytic: PASS - n_unique_firms - n_missing == n_analysed: PASS - ledger n_before-n_removed==n_after: PASS - ledger chained: PASS - ledger starts at n_input_rows: PASS - ledger ends at n_analysed: PASS - n_raw - total removed == n_analysed: PASS - mean recomputed from analytic.csv: PASS - median recomputed from analytic.csv: PASS - mean_employees independent recompute (groupby first): PASS - baseline recompute: PASS - independent musd mean (convert via groupby): PASS - median <= mean (right-skewed, plausible): PASS - se positive: PASS - raw baseline >> cleaned mean (thousands rows inflate raw): PASS - revenue_musd range plausible (max<1e4): PASS