Preserve Information Provenance and Handle Uncertainty in Multi-Source Synthesis
This module is about not losing source grounding when multiple agents summarize, merge, and synthesize evidence.
The exam’s core idea:
Every important claim should keep its source trail.
When sources disagree, preserve the disagreement instead of forcing a single clean answer.
Anthropic’s Citations docs describe source-grounded answers as responses where exact passages support claims, allowing users to verify answers and surface sources. The same principle applies even when you are not using the built-in Citations API: subagents should preserve claim-source mappings so downstream synthesis does not detach claims from evidence. (Claude)
1. Core mental model
Use this rule:
A synthesized claim is only as trustworthy as the source mapping that survives into the final report.
A reliable multi-source synthesis pipeline should preserve:
claim
source
source type
source date
collection date
excerpt
methodology context
confidence
conflict status
The exam shortcut:
2. Why provenance gets lost
Source attribution often disappears during summarization.
Original subagent output
{
"claim": "Customer churn decreased from 8.2% to 6.9% in Q2.",
"source": "Q2 Customer Retention Report",
"source_url": "internal://reports/customer-retention-q2",
"publication_date": "2026-07-15",
"data_collection_period": "2026-04-01 to 2026-06-30",
"excerpt": "Churn decreased from 8.2% in Q1 to 6.9% in Q2.",
"methodology": "Monthly active paid accounts; excludes trial accounts."
}
Bad compressed summary
What got lost?
Exact values
time period
source document
methodology
whether trial accounts were excluded
ability to verify the claim
Better compressed summary
{
"claim": "Customer churn decreased from 8.2% in Q1 to 6.9% in Q2.",
"source_refs": ["SRC-001"],
"data_collection_period": "2026-04-01 to 2026-06-30",
"methodology_note": "Monthly active paid accounts; excludes trial accounts."
}
Exam point:
Summaries may get shorter, but claim-source mappings must remain intact.
3. Structured claim-source mapping
A subagent should not return only prose. It should return structured claims with sources.
Recommended schema
{
"claim_id": "C-001",
"claim": "Customer churn decreased from 8.2% in Q1 to 6.9% in Q2.",
"claim_type": "financial_metric | news_event | technical_finding | policy_statement | customer_fact",
"value": "6.9%",
"comparison_value": "8.2%",
"unit": "percent",
"source_refs": [
{
"source_id": "SRC-001",
"source_name": "Q2 Customer Retention Report",
"source_url": "internal://reports/customer-retention-q2",
"document_type": "internal_report",
"publication_date": "2026-07-15",
"data_collection_period": "2026-04-01 to 2026-06-30",
"relevant_excerpt": "Churn decreased from 8.2% in Q1 to 6.9% in Q2.",
"source_characterization": "Internal retention report using paid-account methodology.",
"methodological_context": "Excludes trial accounts and free-tier accounts."
}
],
"confidence": "high",
"conflict_status": "uncontested"
}
Anthropic’s Citations API represents this product-level idea: citations reference specific locations in source documents, such as page ranges, character ranges, or content-block ranges depending on document type. (Claude)
4. Downstream synthesis must preserve mappings
The synthesis agent should not merge claims by deleting source IDs.
Bad synthesis input
The synthesizer cannot tell:
Which source is audited?
Which period?
Which revenue definition?
Which publication date?
Whether the numbers actually conflict?
Good synthesis input
[
{
"claim_id": "C-001",
"claim": "Revenue grew 12% year-over-year.",
"metric": "GAAP revenue",
"period": "FY2025",
"source_refs": ["SRC-annual-report-2025"],
"publication_date": "2026-02-20",
"methodology": "Audited annual report."
},
{
"claim_id": "C-002",
"claim": "Revenue grew 10% year-over-year.",
"metric": "constant-currency revenue",
"period": "FY2025",
"source_refs": ["SRC-investor-deck-q4"],
"publication_date": "2026-02-21",
"methodology": "Management presentation; constant-currency basis."
}
]
Now the synthesizer can say:
The two revenue-growth figures are not necessarily contradictory: one is GAAP revenue growth and the other is constant-currency revenue growth.
5. Conflicting statistics from credible sources
The exam specifically says: do not arbitrarily select one value.
Bad
Better
The sources report different values:
| Metric | Value | Source | Date | Methodology |
|---|---:|---|---|---|
| Employee attrition | 14% | HR Annual Report | 2026-01-15 | Full-time employees only |
| Employee attrition | 11% | Workforce Analytics Dashboard | 2026-01-20 | Full-time + part-time employees |
These figures should be treated as contested or methodologically different until the [coordinator](<../domain-1-agentic-architecture/d1.2-multi-agent-orchestration.md>) decides which definition is appropriate.
Exam answer pattern:
Preserve both values.
Attach source attribution.
Include dates and methodology.
Mark the conflict explicitly.
Let coordinator choose reconciliation policy.
6. Conflict annotation schema
{
"conflict_group_id": "CG-001",
"topic": "employee_attrition_rate",
"conflict_type": "different_methodology | different_time_period | direct_contradiction | stale_vs_current | unknown",
"values": [
{
"claim_id": "C-010",
"value": "14%",
"source_id": "SRC-hr-annual-report",
"publication_date": "2026-01-15",
"data_collection_period": "2025-01-01 to 2025-12-31",
"methodology": "Full-time employees only",
"excerpt": "Annual attrition for full-time employees was 14%."
},
{
"claim_id": "C-011",
"value": "11%",
"source_id": "SRC-workforce-dashboard",
"publication_date": "2026-01-20",
"data_collection_period": "2025-01-01 to 2025-12-31",
"methodology": "Full-time and part-time employees",
"excerpt": "Overall employee attrition was 11%."
}
],
"recommended_resolution": "Do not collapse into one number unless the report specifies which employee population is in scope."
}
This gives the coordinator a useful decision object.
7. Temporal data: publication date vs collection date
Temporal metadata prevents false contradictions.
Two claims may look inconsistent:
But with dates:
That may represent a trend, not a contradiction.
Required temporal fields
{
"publication_date": "2026-03-01",
"data_collection_start": "2025-10-01",
"data_collection_end": "2025-12-31",
"as_of_date": "2025-12-31",
"last_updated": "2026-02-20"
}
Use the right date:
| Date field | Meaning |
|---|---|
publication_date |
When the source was published |
data_collection_period |
When the underlying data was collected |
as_of_date |
The date the value represents |
last_updated |
When a living source was updated |
accessed_date |
When the system retrieved it |
Exam shortcut:
Different dates can explain different values.
Do not label temporal change as contradiction without checking dates.
8. Completing analysis with conflicts included
The exam says document analysis should include conflicting values and let the coordinator decide before synthesis.
Bad subagent behavior
Good subagent behavior
{
"field": "renewal_date",
"conflict_detected": true,
"values": [
{
"value": "2027-03-01",
"source": "Master Services Agreement",
"section": "Term and Renewal",
"excerpt": "The agreement renews on the anniversary of the Effective Date.",
"derivation": "Effective Date 2026-03-01 + 12 months"
},
{
"value": "2027-04-01",
"source": "Order Form",
"section": "Commercial Terms",
"excerpt": "Renewal begins April 1, 2027.",
"derivation": "explicit"
}
],
"recommended_coordinator_action": "Ask whether order form terms override MSA terms before synthesis."
}
The coordinator can then decide:
Use contract hierarchy.
Ask human reviewer.
Report both values.
Prefer explicit order-form terms if policy says order forms override MSA.
9. Report structure: established vs contested
A good synthesis output should clearly separate:
well-established findings
contested findings
time-sensitive findings
methodology-dependent findings
gaps / insufficient evidence
Example report structure
# Synthesis Report
## Well-established findings
These findings are supported by multiple consistent sources or one authoritative source.
1. The current refund workflow emits `RefundRequestedEvent`.
- Sources: `RefundController.ts`, `RefundRequestedEvent.ts`
- Evidence: ...
## Contested or conflicting findings
These findings differ across credible sources.
1. Renewal date differs between MSA and Order Form.
- MSA-derived value: 2027-03-01
- Order Form explicit value: 2027-04-01
- Recommended action: apply contract precedence policy or route to legal review.
## Methodology-dependent findings
These are not necessarily contradictory but use different definitions.
1. Revenue growth differs by basis.
- GAAP revenue growth: 12%
- Constant-currency revenue growth: 10%
## Temporal caveats
1. Market share values differ across 2024 and 2026 sources and may represent change over time.
## Evidence gaps
1. No source provided for competitor price-match exception policy.
This avoids pretending every input has equal certainty.
10. Preserve original source characterization
Do not overstate what the source says.
Source says
Bad synthesis
Good synthesis
The study reports an association between onboarding time and retention; it does not establish causation.
The synthesis should preserve:
causal vs correlational language
sample size
population studied
methodology
limitations
source confidence
author/source type
Anthropic’s long-context guidance highlights the need to make references explicit when multiple documents are combined; ambiguous references like “this document” become problematic in stitched multi-document contexts. (Anthropic)
11. Rendering different content types appropriately
The exam explicitly says: do not force every synthesis output into one uniform format.
Different content types should be rendered differently.
Financial data → tables
| Metric | Value | Period | Source | Methodology |
|---|---:|---|---|---|
| Revenue growth | 12% | FY2025 | Annual Report | GAAP |
| Revenue growth | 10% | FY2025 | Investor Deck | Constant currency |
| Gross margin | 71% | FY2025 | Annual Report | GAAP |
Why:
News → prose or timeline
On March 3, the company announced the acquisition. On March 6, regulators requested additional documents. On March 12, the company said the review timeline remained unchanged.
or:
| Date | Event | Source |
|---|---|---|
| 2026-03-03 | Acquisition announced | Press release |
| 2026-03-06 | Regulator requested documents | Agency filing |
| 2026-03-12 | Company reaffirmed timeline | Investor update |
Technical findings → structured lists
## Technical findings
- Finding: Backend returns `requires_review`, but frontend switch does not handle it.
- Files: `api/orders.ts`, `web/OrderStatus.tsx`
- Severity: Important
- Evidence: ...
- Suggested fix: Add frontend handling for `requires_review`.
Exam shortcut:
Use the format that preserves meaning.
Do not flatten financial data, news events, and technical findings into identical prose bullets.
12. Subagent output contract for provenance
Use this as an exam-ready pattern.
{
"subagent_id": "market_research_agent",
"task": "Summarize market share evidence",
"claims": [
{
"claim_id": "C-001",
"claim": "Company A had 18% market share in 2024.",
"claim_type": "market_statistic",
"value": 18,
"unit": "percent",
"source_refs": [
{
"source_id": "SRC-001",
"source_name": "2024 Industry Market Report",
"source_url": "https://example.com/report-2024",
"document_type": "industry_report",
"publication_date": "2025-02-15",
"data_collection_period": "2024-01-01 to 2024-12-31",
"relevant_excerpt": "Company A captured 18% market share in 2024.",
"methodological_context": "Survey of enterprise buyers; excludes SMB segment."
}
],
"confidence": "high",
"conflict_group_id": null
}
],
"conflicts": [],
"evidence_gaps": []
}
The downstream agent should preserve claim_id, source_id, and conflict_group_id.
13. Coordinator merge pattern
When combining claims:
1. Group claims by topic.
2. Compare values, dates, units, populations, and methods.
3. Mark exact agreement as well-established.
4. Mark differing values as contested or methodology-dependent.
5. Preserve all source mappings.
6. Choose rendering format by content type.
7. Send synthesis only the merged claim graph, not raw ungrounded prose.
Merge output
{
"topic": "market_share_company_a",
"status": "temporal_difference",
"merged_summary": "Company A's reported market share rose from 18% in 2024 to 22% in 2026.",
"claims": ["C-001", "C-002"],
"sources": ["SRC-001", "SRC-002"],
"temporal_interpretation": "Different collection years; treat as time-series change, not contradiction."
}
14. Common exam traps
Trap 1: Summarization without source mapping
Wrong:
Right:
Trap 2: Choosing one conflicting statistic arbitrarily
Wrong:
Right:
Trap 3: Missing temporal metadata
Wrong:
Right:
Trap 4: Overstating source conclusions
Wrong:
Right:
Preserve the source’s characterization: association, estimate, projection, allegation, audited result, or confirmed fact.
Trap 5: Uniform rendering
Wrong:
Right:
Use tables for financial comparisons, prose/timelines for news, and structured lists for technical findings.
Trap 6: Coordinator receives already-resolved conflicts
Wrong:
Right:
Subagent returns all conflicting values with excerpts and lets the coordinator apply reconciliation policy.