← Research Labs
Bug found, root-caused, fixed

A missing citation looks exactly like a claim that didn't need one.

2026-08-30 · commit 5f61d75 · 3 min read

Check the work

Highlight every sentence in this post that is backed by a real commit, board entry or measurement. The ones that stay plain are analysis, not evidence.

For several days, four sections of every brief we produced made specific, confident claims about a real company and cited nothing to back them. Nothing on the page looked broken.

If you use a tool like this, that is the failure worth being afraid of, and the one you are least equipped to catch. A rep opens a brief ten minutes before a call. It says the account is expanding in a particular direction, names the likely economic buyer, suggests where to prospect next. No source markers anywhere on the section. Looking at that screen, there is no way to tell the difference between a claim that needed no citation and a claim whose citation broke. Both render as silence.

What we thought was true

Every narrative field in a brief (why now, the angle, where to prospect, likely stakeholders) carries a list of evidence IDs pointing at the specific quotes behind it. The interface looks each ID up against the brief's evidence and draws a numbered citation marker for every match. We assumed that lookup always resolved, because the claims and the evidence come out of the same call.

What was actually true

It didn't. All four fields were filling that list with the wrong identifier: the ID of the page a fact came from, not the ID of the evidence item itself. The lookup then ran against the evidence list, where a page ID matches nothing, ever.

The interface did exactly what it should at that point. An unresolved citation renders nothing rather than a broken marker, which is correct behaviour and the worst possible outcome: the failure had no symptom. It surfaced through an automated check rather than a customer. A real brief run against vercel.com came back with zero citation markers on a section making three specific claims, and the raw response confirmed it.

Ask what a tool does when a citation fails, not whether it cites.

The fix

Four separate fields had each grown their own copy of the same mistake, which is the tell that a problem is structural rather than local. Patching four places would have left the fifth field, added some month later by someone who never read this, free to make the same error again.

So the evidence list gets built first, a single page-ID-to-evidence-ID map gets derived from it, and every narrative field resolves its citations through that one map. One function. The next field added inherits correctness instead of having to re-derive it.

Verifying against a real, content-heavy site surfaced a second problem underneath the first.vercel.com has enough real pages that the text we sent the model exceeded the provider's request limit and came back as a hard error before a brief could generate at all. Same root cause as the citation bug: we had been testing against thin sites, and real accounts are not thin. That path is now a graceful cutoff instead of a crash.

How we verified it

Re-ran a real brief against vercel.com and checked every citation entry programmatically against the evidence actually returned in that response. Not eyeballed, not spot-checked. Then ran it again against the deployed production endpoint rather than a local build, because those are different things and only one of them is what a customer touches. Clean both times. Shipped the same day.

If you're evaluating a tool like this one

Every product in this category will tell you its output is grounded in sources. That claim is cheap and everyone makes it. The question that actually separates them is what the screen shows when the grounding breaks, because something in that chain will break, and the default answer is usually “nothing,” which is indistinguishable from working correctly.

We are not immune to this. We shipped it. What we'll defend is that an automated check caught it before a customer did, and that you are reading about it here rather than finding out on a call.

What this post does not establish

  • How many real briefs were served with dangling citations before the fix landed. The run log was not queried for this, and the honest answer is that we do not know the number.
  • Whether any reader ever acted on an uncited claim during that window. There were no customers at the time, so the likely answer is no, but that is inference and not evidence.
  • Whether the same class of mistake exists in surfaces other than the brief. The fix was verified where the bug was found, not swept across the whole codebase.

Evidence

  1. 1
    Commit · 2026-08-24
    5f61d75

    Fix: brief.py's evidence_ids was a source id, not an evidence id (Yama's craft-gate FAIL, item 1)

  2. 2
    Board entry · 2026-08-24
    team/TEAM-BOARD.md

    item 1's fix uncovered and also fixed a second real bug (a 413 from Groq on high-source-count sites)

  3. 3
    Board entry · 2026-08-24
    team/TEAM-BOARD.md

    item 1 (backend, `evidence_ids`) deployed on `main` @ `5f61d75`

← Back to Research Labs