# Verification checks (P4) | # | check | outcome | |---|---|---| | 1 | Input presence: data/firms.csv exists | **FAIL**: data/ is empty; recorded as a blocking limitation and not fixable within the rules | | 2 | Clean re-run: deleted results.json/analytic.csv/exclusions.csv, re-ran analysis.py, compared SHA-256 | PASS: byte-identical | | 3 | Exclusion ledger chain: n_before − n_removed = n_after, chained | PASS: one row, 0−0=0 | | 4 | analytic.csv rows = n_analysed | PASS (vacuous): 0 data rows; n_analysed is null because nothing was analysed | | 5 | Every estimate is null when infeasible, with no fabricated numbers | PASS | | 6 | Data path of analysis.py, smoke test on a 5-row throwaway fixture in a temp dir (not task data, results discarded) | PASS: ledger chained 5→2, USD/MUSD conversions correct, unknown unit excluded | | 7 | Gate run (see phases.json for receipts) | FAILS on non-nullable keys that are null; this cannot be fixed without fabricating values (see report) |