Page-level citations
Every value Sheaf returns carries the file, the page and the span it was read from.
What a citation is here
- File Which upload the value came from, by identity rather than by filename, so a re-upload does not quietly become a different source.
- Page The page within that file, numbered against the file as it arrived, not against the document it was later cut into.
- Span The region of the page the value was read from, supplied by the reader, so it can be highlighted rather than described.
Why coordinates alone are not a citation
An OCR response is full of coordinates. What it lacks is the binding between a coordinate and a meaning: this box is the borrower's adjusted gross income, not merely a number that appeared 60% of the way down page four. A citation is that binding, and it only holds if both halves are produced by something that cannot invent either one.
Geometry comes from the reader, never the model
The model that reads a document is not asked where anything is. It is given a page with known geometry and returns what the page says; the position is already known, because the reader supplied it. Asking a model for a bounding box or a page index produces confident, wrong numbers, and a wrong citation is worse than no citation because it survives review.
If a value cannot be placed on a page by the reader, it does not ship as a cited value. There is no fallback that guesses.
What this lets you do
- Check a single suspicious value in seconds instead of re-reading the document.
- Hand an auditor a value and a page rather than a value and an assurance.
- Spot the systematic error — the same field read from the wrong place across forty files — because the wrong place is visible.
- Disagree with the system precisely, so that the correction records what was actually wrong.
Citations survive re-cutting
Documents get re-cut: a boundary was wrong, a reviewer moves it, and yesterday's document 7 is today's documents 7 and 8. Because a citation addresses the file and the page rather than the document's position in a run, it still points at the same page afterwards. Filing survives the same way, by containment rather than by index.
This is why page numbers here are scoped to the application rather than to a run. A run-scoped number cannot address a page in a document that arrived last month, and eventually you need to.
Sheaf