Chapter 143 · Interface and adoption

Showing sources so an answer can be checked

A citation nobody opens has done nothing. The four-second rule, what belongs in the expanded panel, the freshness stamp that changes behaviour, and how to present a source the reader cannot open.

7 min read

Chapter 62 built citations and measured that expanding them in place took click-through from 4% to 31%. This chapter is the rest of that design, because a citation is the only part of the interface whose job is to let someone doubt the answer.

The standard to hold it to: a reader must be able to verify a claim in under four seconds. Past that, nobody does, and an unverified answer from a system that can be wrong is just a confident sentence.

The four-second budget

// Where four seconds goes, measured by watching people do it. const BUDGET = { noticeTheCitation: 0.3, decideToCheck: 0.5, openIt: 0.2, // ⚠️ a new tab costs 2-4 s here, and the budget is gone findTheClaim: 1.5, // a highlighted span costs 0.3; a 40-page PDF costs forever confirm: 1.0, }

Two line items decide everything. Opening in a new tab is a context switch that blows the budget by itself, and finding the claim inside the source is where chapter 62's span-level extraction pays for itself.

// Inline, expanding in place. No navigation, no modal — a modal covers // the answer, and the reader is comparing the two. <Claim> Damaged goods may be returned within 30 days of delivery <CitationChip n={1} onClick={toggle} /> </Claim> {expanded && <SourcePanel citation={1} />}

What goes in the panel

// Seven elements, in this order. The order is the design: the reader is // establishing provenance, then checking, then deciding whether to act. <SourcePanel> <Breadcrumb>Returns and Credits Policy › Returns › Damaged goods</Breadcrumb> <Freshness updatedAt="2026-09-14" /> <Excerpt highlight={{ start, end }}> …Damaged goods may be returned within 30 days of delivery, provided… </Excerpt> <Warning kind="ocr" /> {/* only when applicable */} <DeepLink href={sourceHref}>Open in the document store ›</DeepLink> <Scope>Visible to: Sales, Operations</Scope> <Report onClick={flag}>This doesn't support the claim</Report> </SourcePanel>
// Two that are easy to omit and earn their place. // Scope. Telling the reader who else can see this source answers the // question they ask before forwarding an answer to a customer, and it // prevented a measurable class of mistake: forwarding internal margin // commentary that happened to be in a cited passage. // Report. Chapter 145's feedback loop needs a path at the exact moment // doubt occurs. A thumbs-down on the whole answer cannot say WHICH // claim was unsupported; this can.

The freshness stamp

// A date is not enough. The useful signal is the date relative to how // often this kind of document changes — chapter 19's per-source // freshness expectations, surfaced. <Freshness updatedAt="2024-03-02" expectedCadence="quarterly" /> // renders: "Last updated 2 Mar 2024 — this policy is usually revised // quarterly, so this may be out of date."

Atlas's measurement of this one component:

Plain dateDate with cadence
Users who opened the source31%33%
Users who flagged a stale document0.4%4.1%
Stale documents found per month219

Ten times the stale-document reports, from one sentence of context. The users always knew the price list should be current; what they could not know was whether this one was recent by its own standards. Chapter 110 found 4.8% of answers grounded-and-wrong because the corpus was stale — this is the interface finding them.

Sources the reader cannot open

// A common case and badly handled by default: the citation resolves to // a document the reader may see IN THIS CONTEXT but cannot open in the // source system, because the source system's permissions are coarser.
// Three honest options, and Atlas picked the third. // a. Hide the citation -> the answer becomes uncheckable // b. Show a broken link -> the reader blames the system // c. Show the passage, no link, and say why <SourcePanel> <Excerpt>…</Excerpt> <Note>This passage is from the 2026 supply agreement. You can read the relevant section here; opening the full contract needs access from Legal.</Note> </SourcePanel>

The passage is already in the answer's context, so showing it discloses nothing new. Naming who grants access turns a dead end into a next step, which is the same principle chapter 111 measured for refusals: naming a next step halved the rephrase rate.

Multiple sources for one claim

// When three chunks support a claim, showing three citation chips is // noise. Collapse, and order by what helps verification. const ordered = chunks.sort((a, b) => score(b) - score(a) || // best supporting passage first b.updatedAt - a.updatedAt // then most recent ) // Render [1] with "+2 more", expanding to all three.
// ⚠️ With one exception: if the sources DISAGREE, never collapse. // Two documents giving different payment terms is the single most // valuable thing the system can surface, and hiding it behind "+1 more" // buries it. if (sourcesConflict(chunks)) return <ConflictPanel chunks={chunks} />

Atlas surfaces conflicts explicitly — "two documents give different answers; the 2026 agreement supersedes the 2024 one" — and that panel has been the origin of eleven document cleanups in a year. The system's most useful output turned out to be noticing that the company disagrees with itself.

When there are no sources

// An answer with no citations is either a refusal, a clarification, or // a bug. The interface should make the third impossible to mistake for // the first two. {answer.citations.length === 0 && answer.kind === 'answer' && ( <Warning tone="high"> This answer is not based on a document from your company's files. Treat it as a suggestion rather than a policy. </Warning> )}

That banner fires on 2.6% of answers — chapter 110's ungrounded-and-correct bucket, answers coming from the model's training rather than the corpus. Marking them is the difference between a useful general answer and an unmarked one that will eventually be wrong about this specific company.

Key points

  • A reader must be able to verify a claim in under four seconds. Past that nobody does.
  • Opening a new tab costs 2-4 seconds and consumes the whole budget. Expand in place, and never in a modal that covers the answer.
  • The panel carries seven elements: breadcrumb, freshness, highlighted excerpt, any warning, a deep link, the scope, and a report control.
  • Show who else can see the source. It answers the question people ask before forwarding an answer to a customer.
  • Put a report control at the citation. A thumbs-down on the answer cannot say which claim was unsupported.
  • A date alone is not a freshness signal. Adding the expected revision cadence took stale-document reports from 2 a month to 19.
  • For a source the reader cannot open, show the passage and name who grants access. It discloses nothing new and turns a dead end into a next step.
  • Collapse multiple supporting sources, except when they disagree. Atlas's conflict panel has driven eleven document cleanups in a year.
  • Mark uncited answers explicitly. 2.6% of answers come from training rather than the corpus, and unmarked they will eventually be wrong about this company.

Next: designing the failure state — the screens that decide whether people come back.