**Check every reference of a paper against real scholarly records before you sub
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
No LLM guessing, no false accusations.**
**English** · 简体中文 · Quick start ·
User guide · Releases ·
Feedback
Language models invent references, and copy-pasted BibTeX carries wrong years, wrong authors
and dead DOIs. paper-preflight reads your paper (LaTeX, Word, Markdown, Typst, a PDF or a plain
reference list) and asks Crossref, dblp, arXiv, DataCite, PubMed and OpenAlex about every cited
work, with Semantic Scholar too if you have a free key, Open Library for books without a DOI,
and GitHub, PyPI, CRAN, Hugging Face and OpenML for software, models and datasets:
- Does it exist?
- Does it match what you wrote?
- Has it been retracted?
- Has the preprint you cite been published since?
Every finding is backed by a record, or by every source that could know the work answering
"no". When it cannot tell, it says "cannot determine" and why, instead of guessing. No language
model takes part in a verdict.
> **Status: 1.0.** On three weeks of real arXiv papers held out for the release: 0.79 false
> alarms per 100 references, against 409 real problems found (accuracy).
> Rule IDs, the JSON report, settings, commands and the Python API are kept through 1.x
> (what is stable). False positives are the bugs we most want to hear
> about: please open an issue.
Quick start
With uv nothing needs installing:
path/to/paper is the project's folder, its main .tex file or a .bib file. To install it
for good (Python 3.11 or later):
| Extra | Adds | Install |
|---|---|---|
| pdf | Reading the reference list of a PDF | pip install "paper-preflight[pdf]" |
| mcp | The MCP server for coding agents | pip install "paper-preflight[mcp]" |
| support | The experimental evidence finder, with its local model | pip install "paper-preflight[support]" |
The repository's demo paper cites eleven works, several of them wrong on
purpose. The animation above is a real run of paper-preflight check examples/demo-paper
against the live sources. In it, the correct NeurIPS paper is verified through dblp although
Crossref only holds fake copies of it, the book without an identifier is confirmed by Open
Library, and the Chinese book, whose script is not supported yet, is "cannot determine", not
"not found".
The same run as text
What it reads
| You have | Command |
|---|---|
| A LaTeX project: its folder, main .tex or .bib; a project that ships only its compiled .bbl, as many arXiv sources do, is read from it (checked, never edited) | paper-preflight check path/to/paper |
| A Word manuscript: citations inserted by Zotero, Mendeley or EndNote, Word's own sources, or the reference list as typed | paper-preflight check paper.docx |
| Markdown, Quarto or R Markdown: [@key] against its bibliography | paper-preflight check paper.qmd |
| Typst: @key against #bibliography(...), a .bib or Hayagriva .yml | paper-preflight check paper.typ |
| A bibliography on its own: BibTeX, CSL-JSON (.json), RIS (.ris) or YAML (.yml) | paper-preflight check refs.ris |
| A reference list as plain text, in the common styles (APA, IEEE, ACM, Nature, Vancouver, Springer, Elsevier, MDPI, GOST, Chicago, MLA) | paper-preflight check references.txt, or - for stdin |
| Only the PDF (with the pdf extra) | paper-preflight check paper.pdf |
| Any arXiv paper: its source is downloaded to a temporary folder, checked and deleted | paper-preflight check arxiv:2607.06922 |
What each input can and cannot tell, in detail: docs/inputs.md.
What it checks
Every reference gets one verdict:
| Verdict | Means |
|---|---|
| verified | A record of the work was found and agrees with the entry |
| metadata mismatch | The work was found, but the entry says something else about it: the findings name the field |
| identifier conflict | The entry's DOI or arXiv ID belongs to another work |
| not found | Every source that could know the work answered, and none has it |
| cannot determine | It could not be decided, and the report says why |
The findings say what is wrong:
| Rule | Finding |
|---|---|
| REF001 | The DOI or arXiv ID points to a different paper |
| REF002 | The DOI or arXiv ID does not exist |
| REF003 | The work was not found in any source, and every source answered |
| REF004 · REF005 | The work was retracted, or has an expression of concern or a correction |
| REF010–REF014 | Authors, title, year or venue differ from the real record |
| REF015 | A cited preprint has been formally published |
| REF016 | The registry has a DOI the entry lacks (offered as a safe fix) |
| REF017 | An identifier is written so that links break (10.1162/tacl\_a\_00276, …v1) |