Home › Study guides › CCAR-F › Domain 5 › Lesson 5.6
CCAR-F · Domain 5 · 15% of the exam · Lesson 5.6 · 22 min read
Provenance and uncertainty in multi-source synthesis
Why citations vanish between agents, and how claim-source records, annotated conflicts, dates and type-fitting formats keep a research report honest.
Written against task statement 5.6 of the official CCAR-F exam guide (Version 1.0, effective July 2026). An independent resource, not affiliated with Anthropic; the practice questions are written from scratch.
5.6.1 Why the citations vanish before the report
Picture a colleague you asked to research one question before a board meeting: how fast is the home battery market growing? They read a dozen reports and come back with a crisp answer: "It's growing by a quarter to a third a year." Then the finance director asks three questions. Says who? Measured how? As of when? Your colleague can't say. Their notes are gone, and the sentence carries no trace of where it came from. The number may even be right, but it is now useless for a decision, because nobody can check it, defend it or update it.
A multi-agent research system makes the same mistake, only more often. In the exam's research scenario, a coordinator, the Claude agent that plans the work, hands pieces of it to four subagents, helper agents with one job each. A search subagent finds sources on the web, an analysis subagent reads documents and extracts findings, a synthesis subagent combines the findings, and a report subagent writes the final report. The system promises comprehensive, cited reports. Yet every handoff between those agents is a rewrite, and every rewrite compresses. Compression keeps the point of a sentence and drops the details around it: who said it, when, and how they measured.
The record of where a claim came from is its provenance. This lesson is about keeping it alive across every handoff, and about its twin problem, uncertainty: what the system should do when credible sources disagree, or only seem to.
5.6.2 How a summary strips the source
Here is the question that trips people up: the analysis subagent clearly had the source, so where exactly did the citation go? Let's follow one claim through the system. Every source, name and figure in this lesson is invented for the example; none of them is a real publication. We'll use the same request the whole way, from a client who asks: "How big is the home battery storage market, and how fast is it growing?"
The search subagent finds a page from a national statistics office. The analysis subagent reads it and writes a finding: "Registered home storage systems rose 24% in 2024 (provisional), National Energy Statistics Bulletin, March 2025." So far, so good. The synthesis subagent receives that finding alongside one from an industry association's review that reports 38% sales growth. It writes: "Installations are growing strongly, by roughly a quarter to a third a year." The report subagent turns that into a headline. The finished report states a growth range that no source reported, with no citation, no year and no hint that one figure was provisional.
Nobody made an error in the usual sense. Each agent did what summarisers do: it kept the meaning, and to a summariser "National Energy Statistics Bulletin, March 2025" is not part of the meaning. The architecture repeats this at every step. The scenario is built with the Claude Agent SDK (SDK stands for software development kit, a ready-made library for building agents). There, only a subagent's final message returns to its parent, and the SDK documentation notes that the parent may summarise that message again unless told to keep it word for word. Anthropic's engineers name the same risk in their own research system: information loss during multi-stage processing.
One claim, two journeys
Passed on as prose
Passed on as a record
Think of a suitcase on a trip with two connecting flights. The tag tells everyone whose it is and where it started. If a handler repacks the contents into a fresh bag at each airport, the clothes arrive but the tag does not. The precise version: attribution survives a handoff only as a separate field that the next agent is required to carry, never as a phrase inside a sentence that the next agent is free to rewrite. And the loss runs one way. The report subagent never saw the bulletin, so telling it to "add citations" at the end gets you either no citations or invented ones.
5.6.3 The claim-source mapping
The fix is to stop passing findings on as sentences. Every subagent that produces findings outputs them as claim-source mappings: one record per claim, with the claim and the facts about its origin in separate fields. Each record carries three things:
- The claim, one statement per record.
- The source: a URL (the page's web address) or, for a file or PDF, the document name.
- The excerpt: the exact words in the source that support the claim.
Here is the bulletin finding as one record in JSON, a common text format for data. The fields that make it provenance are source_url, document and excerpt; the last three fields earn their place in the next two sections.
{
"claim": "Registered home storage systems grew 24% in 2024",
"source_url": "https://example.org/energy-statistics-bulletin-2025",
"document": "National Energy Statistics Bulletin, March 2025",
"excerpt": "Registered home storage systems rose by 24 per cent in 2024 (provisional).",
"published": "2025-03-14",
"data_period": "2024",
"method": "systems registered with grid operators"
}
The excerpt does more work than it looks. It lets anyone downstream, human or agent, check the claim against the source's own words without fetching the page again. It also keeps how the source characterised its figure: the word "provisional" lives in the excerpt even if the claim line leaves it out. Anthropic's advice on reducing hallucinations points the same way. Have Claude cite a quote and a source for each claim, and retract any claim it cannot back with a quote.
Requiring the records is a design decision, not a hope. Each finding-producing subagent gets the record format in its instructions. The strongest version also writes the format down as a JSON schema, a formal description of the fields a record must have, with the source fields marked required. A record that leaves them out then fails validation, and your code can reject it instead of passing it on. The coordinator writes the complete records into the synthesis subagent's prompt, because that prompt is the only content a subagent receives from its parent.
Synthesis needs the most care, because combining is its job. The synthesis subagent may reword, reorder and combine claims, but it must preserve and merge the mappings: every sentence it writes points back to the records it came from. When three sources report that most new home systems use lithium iron phosphate cells, the merged claim carries all three sources, not "studies show". When two records disagree, merging never means blending them into one number.
5.6.4 When two credible sources disagree
Now the question the exam loves. The analysis subagent has two findings about the same thing. An industry association's annual review says home battery sales grew 38% in 2024. The national statistics office says registered systems grew 24%. Both sources are credible. Which number goes in the report?
It is tempting to choose: the more authoritative-sounding source, the first one found, the better headline, or a split-the-difference 31%. Resist all of them. Choosing one value arbitrarily hides a real disagreement from everyone downstream; once the 24% is dropped, no later agent and no reader can know it existed. Averaging is worse, because it invents a figure nobody measured. And the disagreement is often the most informative finding in the pile. Here the records show why the figures differ: the association counts units shipped by its members, while the statistics office counts systems registered with grid operators and calls its figure provisional.
So the analysis subagent does something less satisfying and much more useful. It completes its analysis with both values included and explicitly annotated: each keeps its source, date and method, and the pair is flagged as a conflict. It does not stop, fail or pick. It returns everything to the coordinator. Think of a police officer taking statements after a collision. Two witnesses give different speeds, so the officer writes down both, with who said what and where each was standing, and the detective decides what the evidence means. The analysis subagent is the officer; the coordinator is the detective.
Why the coordinator? It is the one agent that holds the client's original question and every subagent's findings, and it can send more work out. So it decides how to reconcile BEFORE synthesis runs. How it decides is a design choice, and here are three reasonable options:
- Dig deeper. Send the search subagent a targeted request for each source's methodology notes.
- Show both. Put both figures in the report side by side, labelled as contested.
- Choose openly. If the client's question defines the measure ("systems actually installed"), use the registration figure, give that reason in the instructions to synthesis and keep the sales figure visible.
These are sensible designs, not a fixed menu. The rule underneath them is what matters: the conflict reaches the coordinator annotated with who said what, the coordinator decides before synthesis, and no agent picks a value silently. Handing synthesis an undecided conflict with no instruction is exactly how "a quarter to a third" got written.
Pick one number, or annotate the conflict
Pick one number
Annotate the conflict
5.6.5 Dates turn contradictions into trends
Not every disagreement is real. Suppose a consultancy report puts the home battery market at €1.9 billion and the industry association's review puts it at €4.6 billion. Stripped of dates, that looks like a serious contradiction, and a careful synthesis subagent will dutifully flag it as contested, or worse, pick one. Add the dates and the problem dissolves: €1.9 billion was the market in 2021, and €4.6 billion is the market in 2024. The sources don't disagree at all. Together they say the market more than doubled in three years, which is exactly what the client asked.
Picture two photos of the same child, one waist-high to her father and one shoulder-high. Nobody calls that a contradiction, because the dates on the back explain it. Figures work the same way: two values from different periods describe change, not disagreement. So you require every subagent to put dates in its structured output, as fields rather than a vague "recently". Two dates matter, and they are not the same thing. The publication date says when the source appeared; the data-collection date, or the period the data covers, says when the thing was measured. A report published in 2025 can quote a 2021 survey, so a record with only a publication date can still mislead.
An apparent contradiction, resolved by dates
Without dates
With dates
Dates also sharpen the test for a real conflict. Two values can only conflict when they answer the same question about the same period. The 38% and the 24% both claim to say how fast the market grew in 2024, so their disagreement is real and goes to the coordinator, even though their methods explain part of the gap. The €1.9 billion and the €4.6 billion describe different years, so they belong together in one table, not in the contested section. Without dates, the system cannot tell these two situations apart.
5.6.6 A report that shows what is settled and what is not
The last question is how the report presents all of this, and two design rules decide it.
The first rule: separate what is settled from what is not. The report gets explicit sections for well-established findings, which independent credible sources support in agreement, and contested findings, where credible sources disagree. In our report, "most new home systems use lithium iron phosphate cells" goes in the first section with its three sources. The 2024 growth rate goes in the second, with 38% and 24% side by side.
In both sections the report keeps each source's own characterisation and method. The statistics office called its figure provisional, so the report does too. An analyst note that called doubling by 2027 "an optimistic scenario" must not become "the market will double by 2027". Upgrading a hedge into a fact is the quiet way to lose provenance.
The second rule: render each type of content in the form that suits it, rather than converting everything to one uniform format. A newspaper doesn't print share prices as paragraphs or tell a political story as a table. A report written entirely as flowing prose buries the numbers readers need to compare, and one written entirely as bullets strips the cause and effect out of the news. So you tell the synthesis and report subagents which form each type takes. Say it positively ("present market figures as a table"); Anthropic's prompting guide recommends telling Claude what to do rather than what not to do.
| Content type | Render as | Why |
|---|---|---|
| Financial data: market size, growth, prices | A table with value, period, source and method as columns | Readers compare numbers across rows and years |
| News: a subsidy cut, a company entering the market | Prose, with the date and the outlet | Events have causes and consequences that need sentences |
| Technical findings: cell chemistry, efficiency, cycle life | A structured list, one property per item, with its test method | Each item stands alone and is checked on its own |
Memorise the three pairings in the first two columns; the details in each cell are one sensible way to apply them. In our report, the 2021 and 2024 market sizes go in a table, the subsidy cut announced in mid-2025 gets a dated paragraph, and the battery test results become a list. The contested section can hold its own small table for the 38% and the 24%, where the method column shows the reason for the gap at a glance.
5.6.7 The exam traps
Every trap below is the same mistake in a different place: letting a convenient simplification decide what the reader sees. The fix is always to keep the source and the uncertainty as data, and to resolve them by deliberate decision rather than by accident.
- ✗ Letting a summary step pass findings on as prose. ✓ Require claim-source records and instruct every downstream agent to preserve and merge them. Prose is what summarisers compress, and the source is the first thing to go.
- ✗ Asking the report subagent to add citations at the end. ✓ Capture the source where the claim is found. An agent that never received the sources can only leave them out or make them up.
- ✗ Picking one of two conflicting figures, or averaging them. ✓ Include both, each with its source and method, and flag the conflict. Picking hides a real disagreement; averaging invents a number nobody reported.
- ✗ Letting the analysis subagent settle the conflict, or stop because of it. ✓ Complete the analysis with both values annotated and let the coordinator decide how to reconcile before synthesis. Only the coordinator holds the whole question and can order more research.
- ✗ Leaving dates out of the structured output. ✓ Require publication and data-collection dates in every record. A 2021 figure and a 2024 figure are a trend, not a contradiction.
- ✗ One confident narrative in one uniform format. ✓ Separate established from contested findings, keep each source's hedges and method, and render financial data as tables, news as prose and technical findings as structured lists.
5.6.8 Put it together: trace one figure and break the trail
You now have every piece. Summaries strip sources and records keep them, conflicts travel annotated to the coordinator, dates separate real conflicts from change over time, and certainty and content type shape the report. The fastest way to make it stick is to build a two-step pipeline and watch the trail break.
The same habit carries into every part of a real research system: whatever must survive a handoff travels as a field, not as a phrase in prose. A schema lets your code check each record's shape, and the coordinator stays the one place where conflicts are decided. When a question in any scenario describes something important vanishing between two steps, look first for the option that turns it into a field every step must pass on.
Key takeaways
- ✓ Every handoff between agents is a summary, and summarising keeps a claim's meaning while dropping its source, so attribution lost at one step cannot be recovered later.
- ✓ Subagents must output claim-source mappings: the claim, its source URL or document name, and the supporting excerpt, each in its own field.
- ✓ Synthesis may reword and combine claims but must preserve and merge their mappings, so every statement in the report traces back to its sources.
- ✓ When credible sources conflict, include both values with their sources and methods and flag the conflict; never pick one arbitrarily or average them.
- ✓ The analysis subagent completes its work with conflicts annotated, and the coordinator decides how to reconcile them before synthesis.
- ✓ Publication and data-collection dates in every record stop figures from different periods being mistaken for contradictions.
- ✓ The report separates well-established from contested findings, keeps each source's own hedges and method, and renders financial data as tables, news as prose and technical findings as structured lists.
Check your understanding
4 questions written for this lesson, then one from the CCAR-F question bank on the same topic. Every answer option is explained, including the ones you did not pick. Nothing is stored.
54 CCAR-F questions on Domain 5, free
Every question in the bank is tagged to a domain, so you can drill 54 questions on Context Management & Reliability alone, or sit the full 60-question timed simulator.
Open the CCAR-F question bank → Back to Domain 5 →
The question bank is free. It asks for an account only because the quiz engine has to store answers to score them and show which domains are weak. The questions on this page need nothing.