AI ツールが起草に関与したあらゆる提出書面。 ABA Formal Opinion 512(2024 年 7 月 29 日)は、どのツールがテキストを生成したかにかかわらず検証義務を弁護士に置き、生成出力への無批判な依拠をほぼ過誤に等しいものとして扱います。ログは、その調査が行われたことを示す手段です。
AI に関する証明を求める裁判所。 2023 年 5 月、テキサス州北部地区の Brantley Starr 判事の standing order は、書面のいかなる部分も生成 AI が起草していないこと、または AI が起草した部分は従来型の法律データベースに照らして確認したことのいずれかを証明するよう弁護士に求めました。以降、数百人の連邦・州の裁判官が独自版を出しています。虚偽であれば証明自体が制裁対象になるため、記録には裏付けが必要です。
循環した出典。 それ自体が AI の要約である「出典」は、捏造を自らの捏造に照らして検証します。歯止め:provenance は other 値を持たず、要約を表現する手段もない閉じた語彙で、そこから外れた行はパス 1 で却下されます。判決要旨や書式バンクの抜粋は出典ではありません。判決本体を取得してください。
---
name: citation-verification
description: Verify every legal and factual citation in a draft brief or memo against supplied source text. Given the draft and a provenance-tagged source index, the skill builds one row per citation instance, locates the supporting span verbatim in the supplied text, and assigns a status — SUPPORTED, PIN-MISMATCH, QUOTE-DRIFT, SIGNAL-MISMATCH, UNSUPPORTED, or NO-SOURCE — then emits a certification-ready verification log. It never confirms a citation from model memory and never asserts that an authority exists. Run it after a citator, before filing.
---
# Citation verification against the supplied record
## When to invoke
Invoke on a draft that is substantively finished and before it is filed or sent, after the citator run and after every cited authority has been pulled to text.
Typical callers:
- Litigation associates and paralegals cite-checking a brief before a filing deadline
- Legal-ops staff running a standing pre-filing check across a practice group
- In-house counsel checking a memo that will be relied on by a business owner
- Anyone checking an opposing brief inside a Rule 11(c)(2) safe-harbor window
Do NOT invoke this skill for:
- **Any draft whose authorities have not been pulled to text.** The skill verifies against files you supply. With no source text there is nothing to verify against, and the run returns a page of `NO-SOURCE` rows. Pull first.
- **Confirming that a case exists, or that it is still good law.** That is a citator's job and the skill cannot do it — it has no publisher corpus and no subsequent-history data. Run KeyCite, Shepard's, or an equivalent first. This skill answers the third question, which is whether the source says what the draft says it says.
- **Deciding whether the argument wins.** Verification asks whether the cited source supports the proposition as written. Whether the proposition carries the motion is counsel's judgment.
- **Sealed, protected-order, or privileged material** where the applicable protective order or the tool's data-retention terms have not been checked. ABA Formal Opinion 512 (29 July 2024) puts the confidentiality analysis on the lawyer, and it has to happen before the document is pasted anywhere.
- **Producing the certification itself.** The skill produces a verification log — evidence of the inquiry. The signature under Rule 11(b), and the inquiry reasonable under the circumstances that the signature certifies, stay with counsel.
## Inputs
- Required: `draft` — path to, or inline text of, the brief or memo being checked. Plain text, Markdown, or a Word export. Page and line numbers are preserved when present and reported as-is.
- Required: `source_index` — path to a completed `references/1-source-index-template.md`. One row per supplied source, each carrying a source ID, the authority or record identifier, a `provenance` value, a `retrieved_on` date, and the path to the source text. The skill reads supporting spans **only** from files listed here.
- Required: `sources_dir` — directory holding the source text files named in the index. Excerpts are fine and preferred; see the cost note below.
- Optional: `filing_date` — used for the staleness warning. Defaults to the run date.
- Optional: `staleness_days` — defaults to `30`. Any source whose `retrieved_on` is more than this many days before `filing_date` draws a `[STALE-PULL]` annotation.
- Optional: `citator_run_on` — the date the citator was run over the draft. Printed in the log header. When omitted, the log header states that no citator run was recorded, which is the state a reviewer needs to see.
- Optional: `jurisdiction` — free text, printed in the header and used to select the signal conventions in `references/3-status-vocabulary.md` when local rules depart from The Bluebook.
## Reference files
Loaded from `references/` at run time:
- `references/1-source-index-template.md` — the fillable source index. This is the primary adaptation point and the only place the skill will look for supporting text.
- `references/2-verification-log-template.md` — the output log format, including the scope statement, the per-row fields, and the reviewer signature block.
- `references/3-status-vocabulary.md` — the six statuses and their promotion rules, the signal-match table, and the quote-fidelity rules.
## Method
Three passes. The separation between pass one and pass two is the guard, not a stylistic choice.
**Pass 1 — build the proposition table.** The skill reads the draft and emits one row per **citation instance**, not per authority. Each row carries: an instance ID, the proposition exactly as the draft states it, the citation as written, the pin cite, any quoted span reproduced character-for-character from the draft, the introductory signal, and the authority type.
*Why per-instance:* a table-of-authorities tool deduplicates by authority, and deduplication is precisely what hides the failure class this skill exists to catch. One case cited five times supports five different propositions. The case exists, it is good law, it appears once in the table of authorities — and the fourth pin cite points at a page that says the opposite. Rows keyed to the authority cannot surface that. Rows keyed to the proposition can. The log prints the instance count next to the distinct-authority count; when the two are equal on a brief with repeat cites, the parse missed the repeats and the run should be re-read before anyone trusts it.
**Pass 2 — match against supplied sources only.** For each row, the skill opens the source file named in `source_index` and looks for text that supports the proposition. When it finds one, it copies the supporting span **verbatim** into the row along with the span's locator — page, paragraph, or Bates number as the source provides it.
The refusal rule that makes the output worth reading: **no span, no status upgrade.** A row reaches `SUPPORTED` only when a verbatim span sits in the row. The skill does not confirm from recognition. It is going to recognize plenty of citations — a model trained on public law has read a great deal of it — and every one of those recognitions is worthless here, because recognition is exactly the mechanism that produces a confident cite to a case that does not exist. Rows with no supplied source come out as `NO-SOURCE` and route back to a pull, never to a judgment call.
**Pass 3 — write the log.** Statuses are assigned per `references/3-status-vocabulary.md`, the rows are grouped by status with the unresolved ones first, and the log opens with a scope statement naming what the check did not cover.
**Quote fidelity is character-level, not semantic.** Every quoted span in the draft is compared to the source text character by character; when the two differ, the log prints the diff rather than a verdict. Paraphrase inside quotation marks is the most common false-quote pattern and semantic comparison rates it as a match, which is why the comparison is exact. Alterations flagged with brackets, omissions marked with ellipses, and the `(cleaned up)` and `internal quotation marks omitted` parentheticals are enumerated in a separate list — they legitimately change the text, and a reviewer needs to see them as a set rather than as noise scattered through the diffs.
**Signal matching.** The skill compares the relationship between proposition and source against the introductory signal used. A no-signal cite whose source supports the proposition only by inference is a `SIGNAL-MISMATCH` and wants a `see`. A `see also` cite whose source states the proposition directly is also a mismatch, in the other direction. Signal errors are not sanctionable on their own, but they cluster with the misrepresentation class, and the check costs nothing once the spans are located.
**Staleness.** Each source row's `retrieved_on` date is compared to `filing_date`. A source pulled more than `staleness_days` before filing draws `[STALE-PULL]`. A case that was good law at the pull and was overruled last week reads identically to one that was never checked, and the date is the only thing that separates them.
## Output format
The log is a Markdown document following `references/2-verification-log-template.md`. A literal excerpt:
```markdown
# Verification log — Motion to Dismiss (draft 4)
Draft: motion-to-dismiss-d4.docx | Jurisdiction: N.D. Cal.
Filing date: 2026-09-04 | Run date: 2026-08-20
Citator run recorded: 2026-08-18 (KeyCite)
Citation instances: 47 | Distinct authorities: 31 | Sources supplied: 29
## Scope of this check
This log records whether each cited source, as supplied, states the
proposition the draft attributes to it. It does NOT establish that any
authority exists, that it remains good law, or that its subsequent
history is clean. Those are citator findings and are recorded above by
date only. Two authorities in this draft have no supplied source and
were not checked at all.
## Unresolved — 6 rows
### [C-14] UNSUPPORTED
Proposition: "A forum-selection clause is unenforceable where enforcement
would contravene a strong public policy of the forum state."
Cite as written: Atl. Marine Constr. Co. v. U.S. Dist. Court, 571 U.S. 49,
63 (2013)
Source: S-09 | provenance: westlaw | retrieved_on: 2026-08-17
Finding: No span at or near page 63 supports the proposition. The nearest
passage addresses the § 1404(a) transfer analysis, not enforceability.
Action: re-pull, re-cite, or strike the sentence.
### [C-22] QUOTE-DRIFT
Cite as written: Ashcroft v. Iqbal, 556 U.S. 662, 678 (2009)
Draft: "a complaint must contain sufficient factual matter, accepted as
true, to state a claim that is plausible on its face"
Source: "A claim has facial plausibility when the plaintiff pleads factual
content that allows the court to draw the reasonable inference"
Diff: draft text does not appear at 556 U.S. 678 in the supplied excerpt.
Action: verify against the full opinion; the quotation marks are load-bearing.
## Supported — 39 rows
### [C-01] SUPPORTED
Proposition: "Rule 12(b)(6) dismissal is reviewed de novo."
Cite as written: Dougherty v. City of Covina, 654 F.3d 892, 897 (9th Cir. 2011)
Supporting span (verbatim, S-03 at 897): "We review de novo the district
court's grant of a motion to dismiss under Rule 12(b)(6)."
## Reviewer sign-off
Citator run by: ______________________ Date: __________
Spans spot-checked (sample of 10): ______________________ Date: __________
Unresolved rows cleared by: ______________________ Date: __________
```
## Watch-outs
- **The skill certifies from memory.** A model asked whether a citation is good will answer from recognition, confidently, and recognition is the exact mechanism behind fabricated authority. Guard: `SUPPORTED` requires a verbatim span copied from a file listed in `source_index` and printed in the row. No span, no upgrade — and the log prints spans rather than verdicts so a reviewer can check the guard held.
- **Circular sources.** A "source" that is itself an AI-generated summary of a case verifies a fabrication against its own fabrication. Guard: `provenance` is a required column with a closed vocabulary — `westlaw | lexis | courtlistener | govinfo | pacer | production | reporter_pdf` — and any row outside it is rejected at pass one rather than flagged at pass three. A summary written by an assistant is not a source.
- **Dedupe hides misrepresentation.** Guard: rows are keyed to citation instances, and the log prints instance count beside distinct-authority count so an equal pair is visible as a parse failure.
- **The log gets treated as the certification.** Guard: the scope statement is the first section of every log, it names existence and subsequent history as out of scope, and the signature block stays unsigned until a person signs it. The log is evidence of the inquiry, not the inquiry.
- **Stale pulls.** Guard: `retrieved_on` is required per source, compared against `filing_date`, and any gap over `staleness_days` draws `[STALE-PULL]` in the row rather than a silent pass.
- **Confidentiality.** Guard: the run happens under whatever data-retention terms the firm has accepted, checked before the first sealed document is pasted, per ABA Formal Opinion 512. The skill has no view on what your protective order permits.
# Source index
The only place the skill looks for supporting text. A citation whose authority is not listed here comes out as `NO-SOURCE` — it is not checked, and the log says so.
Fill one row per supplied source. Replace the sample rows; they are there to show the shape and the rejection rules, not to be kept.
## Header
```yaml
matter: "Ramirez v. Vantage Logistics, No. 3:26-cv-01184 (N.D. Cal.)"
draft: "motion-to-dismiss-d4.docx"
filing_date: "2026-09-04"
citator_run_on: "2026-08-18"
citator_tool: "KeyCite"
jurisdiction: "N.D. Cal."
sources_dir: "./sources/"
staleness_days: 30
```
`citator_run_on` and `citator_tool` are printed in the log header verbatim. Leave them blank if no citator was run — the log will then state that no citator run was recorded, which is the state a reviewing partner needs to see rather than a silent gap.
## Rows
| source_id | authority_or_record_id | type | provenance | retrieved_on | file | pages_included | notes |
|---|---|---|---|---|---|---|---|
| S-01 | Ashcroft v. Iqbal, 556 U.S. 662 (2009) | case | westlaw | 2026-08-17 | sources/S-01-iqbal.txt | 674-687 | excerpt, majority only |
| S-02 | 15 U.S.C. § 1681e(b) | statute | govinfo | 2026-08-17 | sources/S-02-fcra-1681e.txt | full | current through P.L. 119-xx |
| S-03 | Dougherty v. City of Covina, 654 F.3d 892 (9th Cir. 2011) | case | courtlistener | 2026-08-17 | sources/S-03-dougherty.txt | full | — |
| S-04 | RAMIREZ_0004412-0004418 | record | production | 2026-08-11 | sources/S-04-onboarding-packet.txt | full | Bates range as produced |
| S-05 | Ramirez Dep. 118:4-121:19 (2026-07-22) | transcript | production | 2026-08-11 | sources/S-05-ramirez-dep.txt | 112-126 | rough transcript |
### Column rules
- **`source_id`** — stable, referenced from every log row. Do not renumber between runs on the same draft; a reviewer comparing draft 4 to draft 5 needs the IDs to hold.
- **`authority_or_record_id`** — the citation in full form for authorities, the Bates range or transcript page:line for record material. Copy it from the source, not from the draft. Copying it from the draft imports the draft's error into the thing that is supposed to catch the draft's error.
- **`type`** — `case | statute | regulation | rule | record | transcript | secondary`.
- **`provenance`** — closed vocabulary, and the skill rejects anything outside it at pass one:
```
westlaw | lexis | courtlistener | govinfo | pacer | production | reporter_pdf
```
There is no `other`, and there is deliberately no value for a summary or a synopsis. A source generated or paraphrased by an assistant verifies a fabrication against itself, so the index has no way to express one. If the text you have is a headnote or an editorial summary rather than the opinion, do not index it — pull the opinion.
- **`retrieved_on`** — the date this text was pulled, not the date of the decision. Compared against `filing_date`; a gap over `staleness_days` draws `[STALE-PULL]` on every row citing this source.
- **`file`** — path relative to `sources_dir`. Plain text or Markdown. PDFs need to be converted first; the skill compares characters and cannot do that against a scanned image.
- **`pages_included`** — the reporter pages, paragraph numbers, or Bates range actually present in the file. Load-bearing: when a pin cite falls outside this range, the row comes out `NO-SOURCE` rather than `UNSUPPORTED`, because the absence of support has not been established. Getting this column wrong is the fastest way to turn a real problem into a clean-looking log.
- **`notes`** — free text. Note excerpts, rough transcripts, dissent-only pulls, and translations.
## Excerpting
Excerpts are preferred over full text, and not only for cost. Pull the cited page plus two pages on either side. A five-page window around a pin cite is enough to find the supporting span or to establish that it is not there, and it keeps the run inside a standard context window.
Full-text pulls across a 40-authority brief run past 600,000 tokens, which does not fit a standard context window — the 1M-token window is available through the Anthropic API, not in the Claude apps — so a full-text run has to be chunked or split across sessions. That is a worse check as well as a more expensive one: chunking breaks the guarantee that pass two saw every supplied source before assigning a status.
Two cases where the wider pull is right:
- The proposition is about what a court **held** rather than what it said in passing. Holdings need the procedural posture, and the posture is rarely on the pin-cited page.
- The draft's cite carries a `see generally` signal or points at an opinion as a whole. There is no pin cite to build a window around.
## Before the run
1. Every authority cited in the draft has a row here, or you accept a `NO-SOURCE` row for it in the log.
2. Every `file` path resolves and opens as text.
3. Every `retrieved_on` is a real pull date, not the date you filled the spreadsheet.
4. `pages_included` covers the pin cites in the draft. Check this against the draft's table of authorities before running, not after.
5. No row's text came from an AI summary, a headnote, a brief bank, or another party's brief.
# Verification log template
The output artifact. It records the inquiry: what was checked, against what text, with what result, and what was not checked at all. Keep it with the matter file.
Adapt the header fields and the sign-off block to your firm's practice. Do not delete the scope statement — it is the section that stops the log from being read as a certification.
---
# Verification log — {{DRAFT_TITLE}}
Draft: `{{DRAFT_FILE}}` | Jurisdiction: {{JURISDICTION}}
Filing date: {{FILING_DATE}} | Run date: {{RUN_DATE}}
Citator run recorded: {{CITATOR_RUN_ON}} ({{CITATOR_TOOL}})
Citation instances: {{N_INSTANCES}} | Distinct authorities: {{N_AUTHORITIES}} | Sources supplied: {{N_SOURCES}}
## Scope of this check
This log records whether each cited source, **as supplied**, states the proposition the draft attributes to it.
It does **not** establish that any authority exists, that it remains good law, or that its subsequent history is clean. Those are citator findings, recorded above by date only. {{N_NO_SOURCE}} authorities in this draft had no supplied source and were not checked.
The signature under Rule 11(b) and the inquiry reasonable under the circumstances that the signature certifies remain with counsel. This log is evidence that an inquiry happened. It is not the inquiry, and it is not the certification.
## Summary
| Status | Rows |
|---|---|
| SUPPORTED | {{N_SUPPORTED}} |
| PIN-MISMATCH | {{N_PIN}} |
| QUOTE-DRIFT | {{N_QUOTE}} |
| SIGNAL-MISMATCH | {{N_SIGNAL}} |
| UNSUPPORTED | {{N_UNSUPPORTED}} |
| NO-SOURCE | {{N_NO_SOURCE}} |
Annotations present: {{STALE_PULL_COUNT}} `[STALE-PULL]`.
## Unresolved
Everything that is not `SUPPORTED`, most severe first: `UNSUPPORTED`, then `QUOTE-DRIFT`, then `PIN-MISMATCH`, then `SIGNAL-MISMATCH`, then `NO-SOURCE`. Read this section before the supported rows; it is the only part with work in it.
### [{{INSTANCE_ID}}] {{STATUS}}
Proposition: "{{PROPOSITION_AS_DRAFTED}}"
Cite as written: {{CITE_AS_WRITTEN}}
Source: {{SOURCE_ID}} | provenance: {{PROVENANCE}} | retrieved_on: {{RETRIEVED_ON}}
Finding: {{WHAT_THE_SOURCE_DOES_AND_DOES_NOT_SAY}}
Action: {{RE_PULL | RE_CITE | STRIKE | RE_SIGNAL | ATTORNEY_CALL}}
For `QUOTE-DRIFT`, include both texts and the diff:
```
Draft: "{{QUOTED_SPAN_FROM_DRAFT}}"
Source: "{{SPAN_FROM_SOURCE}}"
Diff: {{CHARACTER_LEVEL_DIFFERENCE}}
```
## Supported
One row each. The verbatim span is the point of the row — a status with no span next to it is the failure this log exists to make visible.
### [{{INSTANCE_ID}}] SUPPORTED
Proposition: "{{PROPOSITION_AS_DRAFTED}}"
Cite as written: {{CITE_AS_WRITTEN}}
Supporting span (verbatim, {{SOURCE_ID}} at {{LOCATOR}}): "{{SPAN}}"
## Alterations and omissions
Quoted material the draft changed on purpose. Listed as a set so a reviewer reads them together rather than meeting them one at a time between diffs.
| Instance | Device | Draft text | What was removed or changed |
|---|---|---|---|
| {{ID}} | ellipsis | {{TEXT}} | {{WHAT_WAS_DROPPED}} |
| {{ID}} | bracket alteration | {{TEXT}} | {{ORIGINAL_WORD}} |
| {{ID}} | (cleaned up) | {{TEXT}} | {{WHAT_THE_PARENTHETICAL_COVERS}} |
An ellipsis that removes a limiting clause changes the proposition. Check every row in this table against the surrounding source text, not against the quoted fragment.
## Not checked
| Authority | Why | Who owns the follow-up |
|---|---|---|
| {{CITE}} | no supplied source | {{NAME}} |
| {{CITE}} | pin cite outside `pages_included` | {{NAME}} |
| {{CITE}} | source is a scanned image, not text | {{NAME}} |
An empty table here means every cited authority had text behind it. That is the state to file in.
## Reviewer sign-off
| Step | Who | Date |
|---|---|---|
| Citator run over every authority | ______________ | ________ |
| Sample of 10 supporting spans opened and confirmed in the source | ______________ | ________ |
| Every unresolved row cleared, re-cited, or struck | ______________ | ________ |
| Alterations table reviewed against surrounding text | ______________ | ________ |
| Draft approved for filing | ______________ | ________ |
The sample check on the third row is not ceremonial. It is the control that tests whether the no-span-no-upgrade rule held on this run, and it is the only step here that a machine cannot perform on its own output.
# Status vocabulary, signal rules, and quote fidelity
The rules pass three applies. Edit the signal table for your jurisdiction and the quote rules for your style manual; leave the promotion rules alone unless you are prepared to explain the change to a reviewing partner.
## The six statuses
| Status | Means | Requires | Who resolves it |
|---|---|---|---|
| `SUPPORTED` | A verbatim span in the supplied source states the proposition, at or within the pin cite | The span, copied into the row, with its locator | Nobody — but 10 rows get spot-checked |
| `PIN-MISMATCH` | The source supports the proposition, at a different page than the pin cite | The span plus both locators | Drafter corrects the pin cite |
| `QUOTE-DRIFT` | Quoted text in the draft does not match the source character for character | Both texts plus the diff | Drafter re-quotes or removes the quotation marks |
| `SIGNAL-MISMATCH` | The support relationship does not match the introductory signal | The span plus the signal actually warranted | Drafter changes the signal |
| `UNSUPPORTED` | Source supplied, pin cite inside `pages_included`, no span supports the proposition | A statement of what the source does say | Attorney call: re-pull, re-cite, or strike |
| `NO-SOURCE` | No source text supplied, or the pin cite falls outside `pages_included` | The reason | Pull the source and re-run |
### Promotion rules
1. **No span, no `SUPPORTED`.** A row reaches `SUPPORTED` only when a verbatim span copied from a file listed in the source index sits in the row. Recognition is not verification, and a model that "knows" the case is producing exactly the signal that fabrication produces.
2. **`NO-SOURCE` never becomes `UNSUPPORTED`.** Absence of supplied text is not absence of support. Collapsing the two turns a gap in the pull into a finding against the drafter, and reviewers stop trusting the log.
3. **`UNSUPPORTED` never becomes `SUPPORTED` on a second look.** If the first pass found no span and a later pass finds one, the finding is that `pages_included` was wrong. Fix the index and re-run the whole draft; do not patch the row.
4. **A row can carry one status and any number of annotations.** `[STALE-PULL]` and `[PRIVILEGE-CHECK]` are annotations, not statuses.
5. **Record cites follow the same rules as authorities.** A Bates range that does not contain the asserted fact is `UNSUPPORTED`, and a produced document nobody indexed is `NO-SOURCE`.
## Signal matching
Compare the relationship the span actually has to the proposition against the signal the draft used. Bluebook conventions; adjust for local rules and for jurisdictions that use a different citation manual.
| Signal | The source must | Common mismatch |
|---|---|---|
| *(none)* | State the proposition directly, or identify the source of a quotation | Used where the proposition follows only by inference — wants `see` |
| `see` | Support the proposition by an inferential step the reader makes without help | Used where the source states the proposition outright — drop the signal |
| `see also` | Provide additional support beyond authority already cited | Used as the first and only cite for a proposition |
| `cf.` | Support a different proposition analogous enough to lend support | Used as a synonym for `see`, which it is not |
| `compare … with …` | Both sources present, and the comparison stated in a parenthetical | Parenthetical missing, so the reader has to reconstruct the point |
| `but see` | Contradict the proposition | Used where the source merely distinguishes on facts |
| `see generally` | Provide background; no pin cite expected | Used to avoid finding a pin cite for a specific proposition |
| `e.g.` | Be one of several sources stating the proposition | Used where only one source exists |
Signal errors are not sanctionable on their own. They are worth flagging because they cluster with the misrepresentation class — a proposition that needed a `see` and got a bare cite is one where the drafter's reading and the source's text have already drifted apart.
## Quote fidelity
The comparison is character-level. Semantic comparison rates a paraphrase inside quotation marks as a match, and that paraphrase is the most common false-quote pattern in the sanctions record.
Exact match required on: every character between the quotation marks, internal punctuation, capitalization at the start of the quoted span unless bracketed, and any citation embedded in the quoted text.
Flagged as `QUOTE-DRIFT` and shown as a diff:
- Any word substituted, dropped, or added without brackets or an ellipsis
- Case changed at the start of the span without a bracketed letter
- Internal citations silently deleted with no `(citation omitted)` parenthetical
- A quotation reproduced from a second source's quotation of the first, where the intermediate source altered it
Enumerated in the alterations table rather than flagged as drift — these change the text on purpose:
| Device | What to check |
|---|---|
| Ellipsis | Whether the removed text was a limiting clause. "The rule applies … in every case" is a different sentence from the original if the removed span was "absent exigent circumstances" |
| Bracketed alteration | Whether the bracket changes the grammatical subject or the tense in a way that changes who the sentence is about |
| `(cleaned up)` | What the parenthetical is standing in for. The convention covers internal quotation marks, citations, brackets, and ellipses — it does not cover substantive edits, and it does not license paraphrase |
| `(emphasis added)` | That the emphasis is in the draft and not in the original, and that the reverse case carries `(emphasis in original)` |
| `(citation omitted)` | That what was removed was a citation and not text |
## Reading the output
Read the unresolved section first, and read it in this order: `UNSUPPORTED`, `QUOTE-DRIFT`, `PIN-MISMATCH`, `SIGNAL-MISMATCH`, `NO-SOURCE`.
Two counts are worth watching across runs rather than within one:
- **Unresolved rate at first pass** — `NO-SOURCE` plus `UNSUPPORTED` over total instances. A rate that stays high after the pull discipline settles is a source-index problem, not a drafting problem, and the fix is in `pages_included`.
- **Instances per distinct authority** — under 1.3 on a brief of any length means the parse is deduplicating when it should not be. Re-read pass one before trusting the run.