1# Verification checks (P4)23- Clean re-run: deleted results.json/analytic.csv/exclusions.csv, re-ran analysis.py; byte-identical outputs (cmp) -> PASS4- analytic rows == n_analysed: PASS5- analytic firm_id unique: PASS6- no NaN revenue in analytic: PASS7- n_unique_firms - n_missing == n_analysed: PASS8- ledger n_before-n_removed==n_after: PASS9- ledger chained: PASS10- ledger starts at n_input_rows: PASS11- ledger ends at n_analysed: PASS12- n_raw - total removed == n_analysed: PASS13- mean recomputed from analytic.csv: PASS14- median recomputed from analytic.csv: PASS15- mean_employees independent recompute (groupby first): PASS16- baseline recompute: PASS17- independent musd mean (convert via groupby): PASS18- median <= mean (right-skewed, plausible): PASS19- se positive: PASS20- raw baseline >> cleaned mean (thousands rows inflate raw): PASS21- revenue_musd range plausible (max<1e4): PASS22