Claude skill 05 · citation-check
Citation check
Verify every citation in a brief, timeline, expert report, or memo against the document archive it was built from — open each cited document and page (or deposition page and line), confirm the cited statement is on that page and that the brief states it accurately, and report every citation that is missing, points to the wrong page, overstates the source, or quotes it wrongly.
SKILL.md
The instructions, as Claude reads them.
One folder, one file. Download the .skill file and add it in Claude’s skills settings, or unzip it into your skills folder. Our guide 06 explains the method and its limits.
The skill states what the records say and where. It does not form opinions on cause or liability. Check every citation before a document leaves your team.
A brief with one wrong page is a brief the other side can discredit in a minute. This skill is the last step before any cited document leaves the team: it opens every citation, reads the page, and says whether the sentence that cites it is supported. It never corrects the document silently; it reports, so the author decides.
The skill checks three things for every citation: that the cited source exists and the page is in range (resolves); that the statement in the document is on that page (located); and that the document says no more than the source does (supported, overstated, contradicted, not found).
1. Inputs
- The document to check: a Markdown, DOCX, or PDF brief, timeline, memo, or report. Convert to text, keeping paragraph boundaries.
- The archive the document cites: the
case-briefarchive (index.csv; one text file per document with=== PAGE n ===markers; deposition transcripts with page:line text). If the archive is missing, build it first with the method incase-brief; if the user supplies only the PDFs, extract them the same way. A check against a different copy of the archive than the one the brief was built from is still valid, but say so in the report. - The citation forms in use. Default:
[D-0042 p.7],[BATES-000123 p.2],[D-0042 pp.7–9],[Depo Lastname 112:4–113:2],[D-0042 p.7, D-0051 p.2]. Read the document's own Sources section for its conventions and add any pattern you find there.
2. Parse
Run a script, not your eyes, for the parse: a long brief has hundreds of citations and a reader skips some.
import re, csv, sys, pathlib
text = pathlib.Path(sys.argv[1]).read_text()
pat = re.compile(r'\[(?P<body>(?:D-\d{4}|[A-Z]{2,}-\d{3,})\s+pp?\.\s*[\d–\-, ]+(?:,\s*(?:D-\d{4}|[A-Z]{2,}-\d{3,})\s+pp?\.\s*[\d–\-, ]+)*|Depo\s+[A-Z][\w\-]+\s+\d+:\d+(?:[–\-]\d+:\d+)?)\]')
rows = []
paras = re.split(r'\n\s*\n', text)
for pi, para in enumerate(paras, 1):
for m in pat.finditer(para):
# the claim is the sentence that ends at the citation
start = max(para.rfind('. ', 0, m.start()), para.rfind('\n', 0, m.start())) + 1
claim = para[start:m.start()].strip()
rows.append({'n': len(rows)+1, 'para': pi, 'citation': m.group('body'), 'claim': claim})
with open('citations.csv', 'w', newline='') as fh:
w = csv.DictWriter(fh, fieldnames=['n','para','citation','claim']); w.writeheader(); w.writerows(rows)
print(len(rows), 'citations')
Then list every paragraph that states a fact (a date, a name, a quotation, a number, "the record shows") and carries no citation; those go into the report as uncited claims. Headings, the method note, and the author's own open questions are exempt.
Split multi-source citations into one row per source, keeping the same claim.
3. Resolve and locate
For each row:
- Resolve: the ID is in
index.csv; the page (or every page in the range) is within the document's page count; a deposition page:line is within the transcript. Failures:no such document,page out of range,line out of range. - Locate: read the cited page(s) from the text file. Find the words that support the claim. Prefer exact numbers, dates, names, and quoted phrases as anchors; for a paraphrase, find the sentence that carries the same meaning. For a deposition, read the cited lines plus three lines on each side, so a cut-off answer is seen in full.
- Judge with one word:
supported— the page says what the claim says, at the same strength.overstated— the page supports a weaker form (the claim says "confirmed", the page says "may indicate"; the claim says "the manufacturer", the page says one engineer; the claim gives a date the page gives only as a month).incomplete— the page supports the claim but the next sentence or the next answer qualifies it in a way the brief omits.contradicted— the page says the opposite or gives a different value.not found— the claim is not on the cited page. Then search the same document for it, and the archive if that fails; record where it actually is (found at D-0042 p.9) ornot found anywhere.quotation error— the brief quotes the page and the words differ (give both).cannot check— scanned page without text, redacted, or OCR too poor; say so, never guess.
Record for each row: status · anchor (the words on the page that support or contradict, verbatim, short) · found at (when different from the citation) · note.
Do not stop at the first failure in a paragraph; check every citation, because the report is also a measure of how reliable the document is as a whole.
4. Check the apparatus
Beyond the individual citations:
- Sources section: every document ID the brief cites appears in its Sources list and in
index.csv; every Sources entry is cited at least once (or is listed as read but not cited). - Internal consistency: a date, a name, a serial number, or a version given in two places in the brief is given the same way both times; the timeline tables agree with the prose.
- Deposition names and pages: the witness name matches the transcript caption; the page:line format is page:line, not page:page.
- Numbers: every count in the brief ("fourteen complaints") is recomputed from the table it comes from.
- Dates: every interval stated ("filed 41 days after") is recomputed from the two dates in the sources.
5. Write the report
citation-report.md:
- Summary: number of citations checked; count per status; number of uncited factual claims; the three to five findings the author must fix before the document is used (contradicted and not-found rows first, then overstated rows on load-bearing claims).
- Findings table: one row per non-
supportedcitation:n·paragraph·claim (short)·citation·status·page says(anchor, verbatim) ·found at·suggested fix(a rewording that the page does support, or "remove", or "cite X instead" — as a suggestion, never applied). - Uncited claims: paragraph number and the sentence, each with a suggested source if the archive search found one.
- Apparatus: Sources-list mismatches, internal inconsistencies, recomputed numbers and dates that differ.
- Cannot check: pages that need OCR or a better copy, so the team can request them.
- Method: archive used (path, index date, document count), citation patterns parsed, time of the check.
Also write citations.csv with the status columns filled, so the author can sort it.
6. Rules
- Report; do not edit the document being checked. The author applies the fixes and reruns the check.
- Read the page, not the index and not the brief's own quotation. The archive text is the only authority; if the archive is wrong, the PDF page is.
- Every status except
supportedcarries a verbatim anchor from the page, so the author can see the difference without opening the file. overstatedis a finding, not a style note. In litigation the strength of a claim is the claim.- Three lines of context on each side of a deposition cite; an answer read without its question is not read.
- Say what you could not check. A clean report with silent gaps is worse than a report with a
cannot checksection. - No opinion on the merits of the document. The report is about whether the sources support what is written, nothing else.
Get in touch
Tell us about the device.
Share a brief overview of the device, the question you need answered, and any deadlines. We’ll explain how we can help and recommend the next steps.
info@alphadevices.io