fix: audit remediation Wave 2 — identity normalization C-7, C-10 (+ T-3, ADR D-1) #13
@@ -1,8 +1,10 @@
|
||||
# ADR-F15 — Literature Graph / Citation PageRank
|
||||
|
||||
**Status:** IMPL (GO after live-corpus spike 2026-06-15)
|
||||
**Status:** IMPL — GO after live-corpus spike 2026-06-15. See **Audit Update
|
||||
(2026-06-15)** at the end: the ID-format mismatch is now resolved in code
|
||||
(audit C-1, C-7) and the Spike Result numbers below predate that resolution.
|
||||
**Owners:** F-15 Worker (Sonnet)
|
||||
**Last updated:** 2026-06-15
|
||||
**Last updated:** 2026-06-15 (audit addendum)
|
||||
|
||||
---
|
||||
|
||||
@@ -138,6 +140,12 @@ If the `citations` table is empty: graph has 0 nodes; `graph report` prints
|
||||
|
||||
## Known Limitation: ID-Format Mismatch
|
||||
|
||||
> **RESOLVED (audit 2026-06-15) — see Audit Update below.** This no longer holds:
|
||||
> `build_citation_graph` resolves OpenAlex `cited_id`s to the canonical
|
||||
> `papers.id` via the shared `RESOLVED_CITATIONS_SQL` (C-1) and ingest stores
|
||||
> canonical ids (C-7), so inter-KB citations *are* now edges. Original text kept
|
||||
> for the record.
|
||||
|
||||
`cited_id` uses OpenAlex IDs; `papers.id` uses DOIs. Cross-citations
|
||||
between ingested papers are therefore not represented as graph edges.
|
||||
This is a D-05-class issue (same root cause as the `citing_id`/`openalex_id`
|
||||
@@ -155,3 +163,27 @@ small while the corpus is < 100 papers.
|
||||
- R-44: `codex graph report [--top-n N] [--json]` ✓
|
||||
- R-45: graceful degradation < 5 nodes: uniform scores, warning ✓
|
||||
- R-46: **this document** — GO; Bobenko+Springborn 2007 at rank 7 validates hub detection; score flatness expected at corpus size 29; increase to > 100 papers for stronger PageRank differentiation
|
||||
|
||||
---
|
||||
|
||||
## Audit Update (2026-06-15)
|
||||
|
||||
A post-hoc audit of the shipped F-15 code found that the live-corpus spike above
|
||||
was measured on a graph the current code no longer produces:
|
||||
|
||||
- **ID-format mismatch resolved.** `build_citation_graph` resolves OpenAlex
|
||||
`cited_id`s to the canonical `papers.id` through the shared
|
||||
`RESOLVED_CITATIONS_SQL`, now also used by `codex.discover` so the two cannot
|
||||
diverge (audit C-1). Ingest stores the caller's canonical id as `papers.id`
|
||||
instead of OpenAlex's URL-form doi (audit C-7). Inter-KB citations are
|
||||
therefore represented as edges — the "Known Limitation" above is obsolete.
|
||||
- **Spike numbers are stale.** The 478 dangling nodes, the rank-7
|
||||
Bobenko/Springborn result, and the 5.7 % score spread were measured *before*
|
||||
the resolution + canonicalisation. They must be **re-measured after the corpus
|
||||
is re-ingested** onto canonical ids (the chosen C-7 migration); until then the
|
||||
GO rests on a superseded topology.
|
||||
|
||||
**Action (pending):** after re-ingesting via `ingest_all.sh`, re-run
|
||||
`codex graph report`, refresh the Spike Result table, and confirm the
|
||||
foundational hubs (Pinkall/Polthier, Yamabe, Schoen, Bobenko/Springborn) still
|
||||
surface.
|
||||
|
||||
Reference in New Issue
Block a user