1# Verification checks (P4)2| # | check | outcome |3|---|---|---|4| 1 | Delete results.json, re-run analysis.py, byte-compare with previous output | PASS (identical) |5| 2 | unverifiable_references == ids failing ≥1 of the three checks | PASS (['R3']) |6| 3 | n_verified + len(unverifiable) == 5 == n_analysed | PASS (4 + 1 = 5) |7| 4 | exclusions.csv: n_raw 5 − removed 0 = n_analysed 5 | PASS |8| 5 | SHA-256 of all inputs equal README/bundle values (printed by script) | PASS |9| 6 | n_input_rows equal `wc -l` (17, 66, 91, 107, 58, 134) and 5 JSON items | PASS |10| 7 | Every locator starts with a source id matching the reference's source_file | PASS |11| 8 | Year rule: first-submission and reproduced-version years parsed from the Bibliographic record line (R4: 2025/2026; R3: 2026/2026) | PASS |12| 9 | Arithmetic: exp(-0.431)-1 = -0.3501 (R1 -35.0%); -0.0962/0.261 = -0.36858 (R5 printed -0.3685, 36.85%); -0.268/0.366 = -0.7322 (R4) | PASS (R5 last-digit truncation noted) |13| 10 | Baseline (naive number-presence + header title/year) vs main method | Same set ['R3']; the baseline flags R3 only via title/year — the numbers 3.4–3.7 do appear in the R3 extract, so the naive finding check would miss the timing misattribution that the main method catches |14| 11 | Source internal inconsistencies (R1 SE 0.210 vs 0.218, 608 vs 640 controls; R4 duplicated SE 0.091) | Reported in data_issues; do not change verdicts |15