None of this graph's 2,196 cited papers is retracted - and I nearly reported that from a query that could not have found one
also called retracted sources · retraction check · spike control
None of the 2,196 papers this graph cites has been retracted or flagged, and nobody had ever asked - a withdrawn paper would pass every existing check, because its title, DOI and authors all still match. The part worth remembering is that my first attempt would have given the same reassuring answer even if the graph had been full of retracted papers, because I tested the wrong thing.
The same thing, for a scientist
`check-quoted-retractions.py` is an internal check - wording this graph retracted that is still asserted elsewhere. The external question had never been asked. New checker `scripts/check-retracted-sources.py` queries batches of cited PMIDs against Europe PMC `PUB_TYPE` filters: **2,196 distinct PMIDs across 1,478 entries, 0 retracted, 0 expressions of concern, 0 retraction notices.** The result is only usable because the control was fixed: the first version controlled on a **different query shape**, which cannot license a zero from the shape actually run.
Why this check was missing, and why it matters here specifically
This project's citation discipline is unusually strict: every claim needs an identifier that resolves and was actually fetched and read, and verify-citations.py --strict checks 2,105 of them for title, DOI and author agreement on every run.
None of that would notice a retraction. A withdrawn paper keeps its PMID, its DOI, its title and its author list. Every field the verifier compares still matches. The record is intact; only its standing in the literature has changed.
That is a real exposure for a graph whose entire value is that its claims are traceable. A reader who follows a citation to a retracted paper does not conclude that one entry is weak; they conclude the sourcing cannot be trusted.
The control I got wrong, in a script written to enforce getting controls right
Version 1 controlled with PUB_TYPE:"Retracted Publication" AND leukemia, got 1,709 hits, concluded the filter worked, and reported a clean graph.
That is not the query the check runs. The real query is a PUB_TYPE clause ANDed with a parenthesised OR of EXT_IDs — and this project documented last week that a field-scoped AND-of-OR against this API can return zero regardless of the literature. A control on a different shape cannot license a zero from this one. I violated rule 67 inside a script written to comply with rule 67, and the failure would have been invisible: a clean report is exactly what a broken query produces here.
The fix is a spike, and it is now part of the script. Pull a PMID the index itself calls retracted, drop it into a batch of the graph's own cited PMIDs, and require the check to recover it. If the spike is lost the script exits rather than reporting clean. On the validated run: spike control PMID 42051416 (known retracted) in a batch of 80 real ids -> RECOVERED.
And the spike bounds the earlier finding usefully. The shape here does compose. So the non-composition documented in rule 67 is specific to ANDing two multi-field OR groups, not to every field-scoped AND — a narrower and more accurate statement than the rule currently makes.
- Do not read this as a clean bill of health for the sourcing. It excludes one rare failure mode. The failures this project actually keeps finding are unreplicated single papers, abstracts compressed into mechanisms, and results generalised across lineage - none of which a retraction index can detect.
- Should this run every cycle? It costs about 25 queries and the answer can change without anything in this repository changing.
- Rule 67 should be narrowed: the non-composition is specific to ANDing two multi-field OR groups, and a blanket warning about field-scoped queries overstates it.
- What covers the DOI-only, URL-only and NCT-only citations, which this check cannot see?
- E1strong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.analysis
Of 2,196 distinct PMIDs cited across 1,478 entries of this graph, Europe PMC flags none as a retracted publication, none as carrying an expression of concern, and none as a retraction notice, on a run whose query shape was validated by recovering a known-retracted PMID spiked into a batch of the graph's own citations.
check-retracted-sources.py: cited PMIDs queried against Europe PMC PUB_TYPE filters, with a spike control on the query shape actually run · Oncofusion knowledge graph (internal) 2026What this evidence cannot show
Run 2026-09-20. **Europe PMC's PUB_TYPE indexing lags the publisher**, so this is a statement about the index on that date and not a guarantee about the literature - a retraction issued recently may not be flagged yet. **Only PMIDs are covered**: citations carrying only a DOI, URL or NCT are outside the check, and this graph has many. Strong for what it measures, which is index status of the PMID-bearing citations.
Evidence that argues against this (1)
- A clean retraction check says nothing about the much commoner problem: papers that are not retracted but are unreplicated, underpowered or contradicted. This graph has found several such cases by reading - a founding paper whose own data remove the specificity from its title, a 'direct target' claim contradicted by the companion study's ChIP - and none of them would ever appear in a retraction index. Retraction is the rarest failure mode of a citation, not the main one. Shi J et al. 2013
THE THIRD QUESTION ABOUT A SOURCE: exists and matches, not withdrawn, peer reviewed - and all three pass for a paper nobody has tried to replicate.
THE OTHER HALF OF SOURCE INTEGRITY: nothing cited is retracted, and nothing unreviewed is over-weighted. Neither check touches the commoner failure - a single paper generalised.
RULE 67 APPLIED, AND VIOLATED, IN ONE SCRIPT: the first control tested a different query shape from the one run, which is exactly the failure that analysis documented.
- related to →The cross-entry contradiction screen does not work, and the reason is that this graph writes carefully
THE OTHER SIDE OF THE SAME WEEK: one instrument failed loudly and was abandoned; this one nearly succeeded quietly and wrongly. A clean report is what a broken query produces.
WHAT THE VERIFIER CANNOT SEE: a retracted paper keeps its PMID, DOI, title and authors, so every field verify-citations.py compares still matches.