# Verification checks (P4) | # | check | outcome | |---|---|---| | 1 | Delete results.json, re-run analysis.py, byte-compare with previous output | PASS (identical) | | 2 | unverifiable_references == ids failing ≥1 of the three checks | PASS (['R3']) | | 3 | n_verified + len(unverifiable) == 5 == n_analysed | PASS (4 + 1 = 5) | | 4 | exclusions.csv: n_raw 5 − removed 0 = n_analysed 5 | PASS | | 5 | SHA-256 of all inputs equal README/bundle values (printed by script) | PASS | | 6 | n_input_rows equal `wc -l` (17, 66, 91, 107, 58, 134) and 5 JSON items | PASS | | 7 | Every locator starts with a source id matching the reference's source_file | PASS | | 8 | Year rule: first-submission and reproduced-version years parsed from the Bibliographic record line (R4: 2025/2026; R3: 2026/2026) | PASS | | 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) | | 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 | | 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 |