From paper-trail
Systematic per-citation verification protocol for academic writing. MUST be used whenever writing content that cites sources — papers, blog posts, SOTAs, or any document making factual claims about external work. Triggers (FR + EN) on any writing task involving references, citations, or bibliographic claims, or when the user asks to "verify citations", "check sources", "audit references", "validate bibliography", "produce receipts", "/paper-trail:audit-article", "/paper-trail:receipts". Produces a structured RECEIPTS.md report classifying each citation as VALID / ADJUST / INVALID with reason. Optional --warn mode inserts inline warnings into a .bak copy of the source document. Combined with sota-auditor (upstream existence audit), this skill is the **downstream** per-claim check.
How this skill is triggered — by the user, by Claude, or both
Slash command
/paper-trail:citation-receiptsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The plugin's mechanical safeguards (FSM, page 1 anti-homonymy, cascade)
The plugin's mechanical safeguards (FSM, page 1 anti-homonymy, cascade) prevent citing a fabricated reference. But they don't prevent citing a real reference for a claim it doesn't actually make. Examples that have occurred :
This skill enforces a per-citation read-before-cite protocol. Inspired
by the receipts plugin (MIT, James Weatherhead) for the audit-PDF↔claim
pattern.
Read the source before you cite it. Not the title. Not the abstract. Not what you think it probably says based on the author's reputation. The actual text where the result is stated. If you can't access the source, mark it UNVERIFIABLE explicitly — don't guess.
This protocol applies to EVERY citation in :
paper-writer skill output)sota-writer skill output)/paper-trail:audit-article <path> — runs this skill on an existing
article file/paper-trail:receipts <path> — local audit (no remote API calls)For each source you intend to cite (or that's already cited in the document under audit), follow these steps in order.
Check these locations, in order :
$RESEARCH_REGISTRY_PATH/refs/<slug>.md. If
state is page1_validated or higher, the PDF is at
$RESEARCH_SOURCES_PATH/<pdf_path>.paper-search MCP for not-yet-acquired sources :
mcp__paper-search__search_papers(query=<title>) then
get_crossref_paper_by_doi(<doi>) for confirmed metadatanotebooklm MCP (optional, if configured) for book chaptersIf the ref is in candidate state in the registry :
pdf-cascade skill to acquire and validatepage1_validated before proceeding to step 3If the ref isn't in the registry at all :
$RESEARCH_REGISTRY_PATH/refs/<slug>.md with
state: candidatepdf-cascade to acquireOnce the PDF is available locally, read the section containing the claim being cited. Extraction tools :
pdftotext -layout <pdf> - for general extractionpdftotext -layout -f N -l N <pdf> for a specific pageRead tool on the corresponding ref's markdown body (which
should already contain notes from sota-writer phase C if the SOTA
was created via the plugin)Before writing or accepting the citation, check :
| Verdict | Meaning | Action |
|---|---|---|
| VALID | Claim matches source exactly | Proceed |
| ADJUST | Claim is approximately right but needs softening or rephrasing | Reformulate citing sentence before submitting |
| INVALID | Claim contradicts source or quote is fabricated | Do not cite as-is. Fix or remove. Consider transitioning the ref to retracted via sota-auditor if the contradiction is structural. |
| UNVERIFIABLE | Cannot access source after exhaustive search | Flag to user. Do not cite specific results from this source. |
When invoked via /paper-trail:audit-article or
/paper-trail:receipts, produces a RECEIPTS.md file at the same
location as the audited article. Format inspired by the receipts
plugin (MIT) :
# RECEIPTS — <audited file path>
Generated: <ISO timestamp>
Source: <count> citations parsed
Skill: paper-trail/citation-receipts
---
## Citation 1 — [Smith2020] (DOI:10.1234/example)
**Status**: VALID
**Claim in manuscript** (line 42):
> "Smith and Doe proved that X is NP-hard for case Y."
**Source statement** (PDF p.5, §3):
> "Theorem 3.2. The problem X is NP-hard for all instances satisfying Y."
**Notes**: Attribution correct, verb « proved » matches the source's
formal theorem statement.
---
## Citation 2 — [Jones2019] (no DOI found)
**Status**: INVALID
**Claim in manuscript** (line 78):
> "Jones (2019) showed that Z is decidable in polynomial time."
**Source statement** (PDF p.12):
> "We leave the question of Z's complexity as future work."
**Required correction**: Remove citation or replace with the actual
source that proved Z's polynomial decidability (likely Brown 2021,
which Jones cites in their future work section).
---
## Citation 3 — [Anderson2018]
**Status**: UNVERIFIABLE
**Claim in manuscript** (line 91):
> "Anderson reported a 15% accuracy gain on the benchmark."
**Source availability**: Paywall, no OA version found via cascade.
Sci-Hub opt-in not active. Cannot verify the 15% figure.
**Recommended action**: Either activate `RESEARCH_ENABLE_SHADOW_LIBS=1`
for one acquisition attempt, or remove the specific 15% claim and
keep only a vaguer "improvement reported" wording.
---
## Recap
| Status | Count |
|---|---|
| VALID | 14 |
| ADJUST | 3 |
| INVALID | 2 |
| UNVERIFIABLE | 1 |
Total: 20 citations audited.
Action required: 3 ADJUST + 2 INVALID + 1 UNVERIFIABLE = 6 citations
needing rework before submission.
These patterns have caused actual citation errors in submitted papers. Watch for them when auditing :
--warn modeWhen invoked as /paper-trail:audit-article <path> --warn, in addition
to producing RECEIPTS.md, the skill inserts inline warnings in a
.bak copy of the source document :
.tex) : inserts \todo[color=red]{REF AUDIT FAILED: <reason>} adjacent to the offending \cite{key}.md) : inserts callout
> [!warning] Ref audit failed: <reason> adjacent to the citationThe original file is never modified — only the .bak copy. The user
reviews the .bak, accepts/rejects each warning manually.
| Skill | Relationship |
|---|---|
sota-writer | Upstream. Writes SOTAs which this skill audits per-citation. |
sota-auditor | Complementary upstream. Auditor decides ref existence (VRAI/HALLUCINATION) at the ref level. This skill audits the specific claim within a verified ref (verb, quote, attribution). |
paper-writer | Upstream. Writes papers ; pre-submission this skill runs full audit. |
pdf-cascade | Sub-task. If a cited ref isn't yet acquired, invokes pdf-cascade. |
claim-checker agent | Sub-task for per-citation verification. This skill orchestrates ; the agent does the PDF↔claim deep dive. |
A citation is NOT verified unless at least one of these tools has been called for it (the call must appear in the session transcript) :
| Source type | Required tool | Command |
|---|---|---|
| Article / proceedings | paper-search MCP | mcp__paper-search__get_crossref_paper_by_doi(DOI) |
| Book chapter (if NotebookLM configured) | notebooklm MCP | mcp__notebooklm__ask_question(...) |
| Local PDF in registry | Bash + pdftotext | pdftotext -layout <pdf_abs_path> - |
| Local PDF notes | Read tool | Read(<registry/refs/slug.md>) |
"I know what this paper says" is NOT verification. The MCP call must appear in the transcript. If the relevant MCP isn't available, mark the citation UNVERIFIABLE.
Before a paper is submitted :
/paper-trail:audit-article <paper.tex> (or .md)RECEIPTS.mdnpx claudepluginhub roomi-fields/paper-trailGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.