Skip to content

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:

Do not summarize sources away.
Compress text, not provenance.

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

Churn improved.

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.

{
  "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

[
  {
    "claim": "Revenue grew 12%."
  },
  {
    "claim": "Revenue grew 10%."
  }
]

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

Source A says 14%. Source B says 11%. I’ll use 14%.

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:

Source A: Market share is 18%.
Source B: Market share is 22%.

But with dates:

Source A collected data in 2024.
Source B collected data in 2026.

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

I found two different renewal dates, so I picked the later one.

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

The study suggests an association between onboarding time and retention.

Bad synthesis

The study proves that faster onboarding increases retention.

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:

Financial data is comparative, numeric, and source-sensitive.

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:

Summarize findings and drop source IDs to save space.

Right:

Compress text while preserving claim-source mappings.

Trap 2: Choosing one conflicting statistic arbitrarily

Wrong:

Two credible sources disagree; pick the newer-looking one without explanation.

Right:

Include both values, sources, dates, and methodology; mark as contested or methodology-dependent.

Trap 3: Missing temporal metadata

Wrong:

Market share is 18% and 22%; sources conflict.

Right:

18% is from 2024 data; 22% is from 2026 data. This may reflect change over time.

Trap 4: Overstating source conclusions

Wrong:

A correlational study proves causation.

Right:

Preserve the source’s characterization: association, estimate, projection, allegation, audited result, or confirmed fact.

Trap 5: Uniform rendering

Wrong:

Render financial metrics, news chronology, and technical bugs as identical paragraph summaries.

Right:

Use tables for financial comparisons, prose/timelines for news, and structured lists for technical findings.

Trap 6: Coordinator receives already-resolved conflicts

Wrong:

Subagent hides a contract conflict and picks one date.

Right:

Subagent returns all conflicting values with excerpts and lets the coordinator apply reconciliation policy.

Test yourself on this topic Interactive questions for Task 5.6 — Provenance & Uncertainty in Synthesis, with instant explanations and scoring.
Start quiz →