# Verification checks (P4) — all run 2026-10-30 via python on out/ files - Determinism: deleted results.json/analytic.csv/exclusions.csv, re-ran analysis.py; SHA-256 of all three identical — PASS - analytic rows (1164) == n_analysed — PASS - n_valid + n_unreadable == n_records_control (1164+36=1200) — PASS - sum_price_valid + sum_price_unreadable_implied == sum_price_control — PASS - analytic.csv price sum == sum_price_valid — PASS - mean_price_valid == sum/n — PASS - median_price_per_m2_valid recomputed from analytic.csv — PASS - exclusions ledger: n_before − n_removed = n_after each row; chaining; starts at 1200 (n_input_rows) and ends at 1164 (n_analysed) — PASS - sale_id unique in analytic set — PASS - municipality gaps vs control are all ≥0 and sum to 36 — PASS - Magnitude vs baseline: control mean 471287000/1200 = 392,739.17; valid mean 392,070.45 (−0.17%) — PASS - feasibility = partial because 36 control records unanalysed — PASS - data/ unchanged (SHA-256 re-verified after accidental creation and removal of a stray data/out/ directory) — PASS