An agent that returns a number with a link feels trustworthy. That feeling is the problem. Research on attribution systems notes that users are more likely to trust a system that offers an explanation, even when that explanation is wrong, than one that offers none at all (Batista, Vatai and Wahib). A citation attached to a hallucinated figure converts a visible error into an invisible one.
The failure has a name and a measurable base rate. Practitioners distinguish citation hallucination (the source does not exist) from statement hallucination (the source exists but does not say what the model claims) (Pickaxe's guide to research agents). Statement hallucination is the harder of the two, because every check a reviewer is likely to run, such as the link resolves and the publisher looks right, passes.
A useful framing comes from the language-model literature: retrieval improves the probability that an answer is correct, while attribution creates verifiability, the ability for a human to follow the chain from claim to evidence and decide whether it holds (Brenndoerfer's chapter on attribution and citation). Your job is not to make the model honest. It is to make its output checkable, and then to check it.
This matters most where the numbers are financial and the source set is boringly predictable. A founder update, a board pack, a finance summary: the same handful of documents feed every question, and each one has a period, a currency and a definition. That predictability is what makes automated catching possible.
| Failure mode | What the agent says | What the source actually shows | How to detect it |
|---|---|---|---|
| Wrong document | "Revenue was 4.2 million, per the board deck" | The board deck shows a different figure; 4.2 million appears only in the investor update | Search the cited document for the number and the period string |
| Wrong period | "Monthly recurring revenue was 610 thousand" | The cited report shows 610 thousand for the prior quarter | Extract the period from the source and compare to the claim |
| Wrong unit | "Cash was 1.4" | The report states 1.4 million, or 1,400 thousand | Require a unit field and normalize before comparing |
| Nowhere | "Net burn was 388 thousand" | No occurrence of 388 in the cited source | Substring and numeric search of the full source text |



