| Clean re-run (deleted outputs) regenerates byte-identical results.json and analytic.csv |
PASS |
| analytic.csv rows == n_analysed (1164) |
PASS |
| sum(analytic price) == sum_price_valid; mean and median recomputed with pandas match |
PASS |
| exclusion ledger: n_before − n_removed = n_after each row; chained; first n_before = 1200 data lines; last n_after = n_analysed |
PASS |
| n_valid + n_unreadable == n_records_control (1164+36=1200) |
PASS |
| per-municipality shortfall sums to 36 |
PASS |
| sale_id unique in analytic set |
PASS |
| mean within [min,max] price; implied unreadable mean (414,361) same order as valid mean (392,070) → plausible |
PASS |
| sum_price_unreadable_implied > 0 |
PASS |