Story-2504 · functions lane · RFD-DOC-006 D8 / D9 / D11 · ER-12 / ER-32

Judge every admitted pair, account for every dropped pair

Mental model: the comparator is a bounded ledger. It reads assertion occurrences, removes only named duplicate classes, admits at most the matter's budget, and records both the judgment and the reason every other candidate was not judged.

Fixture-only path

context.assertions v2 occurrence pool
        ↓ stable scan order
same Original + confirmed twin + prior/duplicate pair filters
        ↓ caller-supplied matter judgment budget
typed comparator candidate fixture
        ↓ verdict fixture (judgment agent is Story-2503)
context.comparator_runs + context.comparator_verdicts
        ↓ deterministic projection
pending documents.reading_findings

The serving worker and route graph are unchanged. No fixture path is wired into live orchestration before the wave cutover ticket.

G5c budget receipt

Each run stores candidate, judgment, held, same-Original, confirmed-twin, already-judged, duplicate-candidate, and budget-drop counts. A database check requires the drop census plus judgments to equal the candidate count.

Same ink is not a contradiction

Exact duplicate lineage uses the document content hash, falling back to the original document identity. Confirmed twins enter through an explicit mapping seam; copied or merely similar documents are not silently treated as twins.

Judge, then hold

A missing or conflicting side check does not rewrite counsel's declaration and does not save budget. The pair may still be judged, but its verdict and Reading Finding remain held until the side is confirmed.

Counsel correction invalidates dependent work

The fixture correction seam creates a re-judge receipt, holds affected verdicts, supersedes their pending or decided findings, and persists review flags for any kept Finding, Brief dependency, or chronology dependency whose egress class flips in either direction. A replacement judge pass links old and new verdicts and findings into one durable supersession history.

Tenant and authority proof

Comparator tables force firm RLS, grant the runtime role no delete, use firm-leading indexes, and retain composite foreign keys to matter, document, run, verdict, and Reading Finding authority. The real-Postgres fixture test proves same-firm persistence and cross-firm zero rows.

Boundary: this Story owns data contracts, deterministic planning, durable receipts/verdicts, Reading Finding projection, and fixture-only side-correction invalidation/re-judge/egress flags. It does not own model calls, prompts, live cutover, chronology projection, pricing, usage emission, UI, or twin-detection lifecycle.