Audit citations for claim support: trace each claim to a locator in its source, detect hallucinated, chimeric, anchorless, and retracted citations, and separate format checks from support checks. Use when reviewing a draft, paper, report, brief, or AI-generated text before publication, when a citation looks plausible but unverified, or when someone asks whether the references actually back the claims.
./install.sh citation-integrity-auditname: citation_integrity_audit description: "Audit citations for claim support: trace each claim to a locator in its source, detect hallucinated, chimeric, anchorless, and retracted citations, and separate format checks from support checks. Use when reviewing a draft, paper, report, brief, or AI-generated text before publication, when a citation looks plausible but unverified, or when someone asks whether the references actually back the claims."
Check that every load-bearing claim in a document is backed by a real source, at a findable location in that source, saying what the document says it says. A citation can fail in four separate ways, and a clean result on one says nothing about the others:
Formatting is a fifth, separate check. A perfectly formatted citation to a paper that does not exist passes format and fails everything that matters.
Before checking any source, extract the claims that need support. A claim needs a ledger row if it states a number, a date, a causal effect, a quote, a finding attributed to a study, or a fact a reader could reasonably doubt. Opinion, framing, and common knowledge agreed with the reader do not.
Copy assets/claim-ledger.csv and fill one row per claim: claim_id, claim_text, citation as written, doi_or_url, locator, verdict (leave blank until step 4), evidence_note.
Run the extractor to catch identifiers and quotes you missed:
python3 bin/citation_audit.py extract draft.md
It lists DOIs with a syntax check, URLs, and long quotes. Each long quote needs a locator in its citation or it starts the audit as anchorless.
For each citation with a DOI, check the registry before opening anything else:
python3 bin/citation_audit.py check-doi 10.xxxx/xxxxx --online
The tool queries https://api.crossref.org/works/{doi}, the metadata registry publishers deposit into. Three outcomes:
https://api.openalex.org/works), and the publisher site. No title match anywhere, plus no author record of the work, is what earns a NOT_FOUND verdict for the citation.For citations with no DOI, search the exact title in quotation marks in at least two scholarly databases (Crossref, OpenAlex, PubMed for biomedical work, the publisher catalog for books). A title search always returns something. A near match is not the cited paper. Compare title, authors, and year before treating any hit as the source.
Warning that matters: never ask the tool or model that produced a citation whether the citation is real. In Mata v. Avianca, 678 F. Supp. 3d 443 (S.D.N.Y. 2023), attorneys filed a brief citing judicial opinions that did not exist, and the record shows the generating tool had assured them the cases were real. The court imposed a $5,000 sanction. Verification means an independent registry or database, not the generator's own answer.
Existence is not support. For each surviving citation, trace the claim:
Direct quotations get the strictest form of this test: the quoted words must appear at the locator, word for word. Under APA 7th, a direct quote requires a locator (page, or paragraph, section, or timestamp when there are no pages). A quote with no locator, or a locator where the words do not appear, is a finding even if the source is real.
Anchorless citations: a citation attached to a paragraph of several claims, with no locator and no clear mapping to one claim, gets traced claim by claim. If no single passage carries a given claim, that claim is UNSUPPORTED even when the source is on-topic.
For each source that passes steps 2 and 3, check whether its status changed after publication:
A retracted source cited for its findings is a finding regardless of how well it supports the claim. Citing a retracted paper to discuss the retraction itself is legitimate and should be worded that way in the document.
Flag any claim the document cites through an intermediary. Signals: "as cited in", a citation whose passage you can only find quoted inside another paper, or a famous old finding cited to a recent review.
Rule from APA 7th practice: cite the primary source directly when you can get it. Use the secondary form sparingly, name both in text with "as cited in", and list only the secondary source in the reference list. In the audit, a claim supported only by a secondary source gets at most PARTIAL until the primary is opened, because secondary paraphrases drift.
Only after support verdicts are set, check format against the required style (APA, MLA, Chicago, IEEE, Vancouver, or the venue's own): author order and punctuation, year placement, title case, container, volume and pages, DOI presented as a https://doi.org/ link, reference list ordering, and in-text to list matching (every in-text citation has a list entry, every list entry is cited).
Report format errors in their own section. Never let a format fix change a support verdict, and never present a document as verified because its formatting is clean.
Assign one verdict per ledger row:
Validate the finished ledger, then report:
python3 bin/citation_audit.py ledger claim-ledger.csv
The validator rejects a SUPPORTED row with no locator or no evidence note, duplicate claim ids, and verdicts outside the set above.
Report format: counts by verdict, then one entry per non-SUPPORTED row with claim, citation, finding, the evidence (where you looked and what you found), and the fix (correct source, corrected wording, or delete the claim). Close with what was not checked and why. Full method detail and worked audits are in references/worked-audits.md and references/failure-taxonomy.md.
Deliverables for a full audit:
assets/claim-ledger.csv), validated by the ledger command.Sampling rule: for documents with more than 50 citations, a sampled audit is acceptable only if the client agrees to sampling in advance. Audit all citations carrying numbers, quotes, and causal claims, then a random sample of the rest, and state the sample size and selection method in the report. Never describe a sampled audit as a full audit.
publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.