LIVE
Which tools do Claude, Codex and Cursor choose? We measured 17k runs to find out03/09/26 · Anthropic|OpenAI's GPT-6 Astra on ARC-AGI-303/09/26 · OpenAI|GPT-6 Astra03/09/26 · OpenAI|OpenAI begins rolling out GPT-6 Astra03/09/26 · OpenAI|ESPO: Error-Structured Prompt Optimization via Diagnose, Diversify, and Stabilize03/09/26 · Anthropic|Sparks Fly: NVIDIA Accelerates Local AI at IFA 202603/09/26 · NVIDIA|Introducing WeatherNext 3, our most advanced and accurate global weather AI model03/09/26 · Google|Porting my 1993 Amiga game to Godot, with an LLM reading the 68000 assembly03/09/26 · Anthropic|Claude outage – Resolved03/09/26 · Anthropic|Daybreak for Frontline Defenders: $1B to protect essential services03/09/26 · OpenAI|NeoMME: an efficient Multimodal-native and Multilingual Encoder03/09/26 · Hugging Face|‘NBA 2K27’ With NVIDIA DLSS 5 Leads 28 New Games Coming to GeForce NOW03/09/26 · NVIDIA|Which tools do Claude, Codex and Cursor choose? We measured 17k runs to find out03/09/26 · Anthropic|OpenAI's GPT-6 Astra on ARC-AGI-303/09/26 · OpenAI|GPT-6 Astra03/09/26 · OpenAI|OpenAI begins rolling out GPT-6 Astra03/09/26 · OpenAI|ESPO: Error-Structured Prompt Optimization via Diagnose, Diversify, and Stabilize03/09/26 · Anthropic|Sparks Fly: NVIDIA Accelerates Local AI at IFA 202603/09/26 · NVIDIA|Introducing WeatherNext 3, our most advanced and accurate global weather AI model03/09/26 · Google|Porting my 1993 Amiga game to Godot, with an LLM reading the 68000 assembly03/09/26 · Anthropic|Claude outage – Resolved03/09/26 · Anthropic|Daybreak for Frontline Defenders: $1B to protect essential services03/09/26 · OpenAI|NeoMME: an efficient Multimodal-native and Multilingual Encoder03/09/26 · Hugging Face|‘NBA 2K27’ With NVIDIA DLSS 5 Leads 28 New Games Coming to GeForce NOW03/09/26 · NVIDIA|
AdvancedNew🧠

CCA-F Domain 5 — Context Management & Reliability (15%): the complete lesson

The reliability domain: what consumes the context window and how to budget it, compaction and structured summaries, persistent memory across sessions, graceful degradation (timeouts, fallbacks, partial results), error propagation between agents, source attribution and normalization of heterogeneous formats. Diagrams, traps, night-before checklist, corrected scenario questions.

30 min readPublished September 4, 2026 · today

Domain 5 is worth 15% — roughly 9 questions out of 60. It's the smallest, and the most cross-cutting: its questions revisit situations from the four other domains (subagents, tools, sessions, extraction) under a single angle — what happens when it doesn't fit, when it fails, when it contradicts itself? A candidate who has worked Domains 1 to 4 well already has 70% of this domain; the rest is a small number of reliability reflexes the exam expects by name: structured summary rather than truncation, partial result with explicit gaps rather than nothing, enriched error rather than swallowed or raw, source attached to every claim, normalization at ingestion.

This lesson follows the 6 task statements of the official exam guide v1.0 (July 2026). The exam scenarios that lean on this domain are the Multi-Agent Research System (scenario 3), the Document Processing Pipeline (scenario 6) and Developer Productivity (scenario 4).

Where this lesson sits. Fifth and last of the domain-by-domain lessons of our complete CCA-F guide, after Domain 4 — Prompt Engineering & Structured Output. Verified on 4 September 2026 against the official exam guide v1.0. Prerequisites: subagents and sessions (Domain 1), structured errors (Domain 2), nullable schemas (Domain 4).

The domain map

Three questions structure the domain: how much fits (5.1 budget, 5.2 compaction), what survives (5.3 memory), and what happens when it breaks (5.4 degradation, 5.5 propagation, 5.6 attribution and formats).

The 6 task statements of Domain 5
HOW MUCH FITS 5.1 · Context budget what consumes, what remains verbose results → subagent or summary before injection 5.2 · Compaction structured summary, not truncation decisions · facts · gaps · next start fresh when stale WHAT SURVIVES 5.3 · Persistent memory conventions → CLAUDE.md work in progress → memory file volume / search → external store decisions and facts: yes raw tool results: no structured summary as exchange format WHEN IT BREAKS 5.4 · Graceful degradation partial + gaps · timeout · fallback 5.5 · Error propagation enrich · escalate · coordinator decides 5.6 · Attribution & formats source per claim · normalize
Domain 5 reads like a production checklist: the window has a size, sessions end, tools fail, agents fail, sources contradict. For each case, the exam expects a named mechanism.

5.1 — The context budget

The context window isn't "large" or "small": it's a budget shared by four line items. The exam tests whether you know what consumes it and what must stay in it.

What consumes the window, and where quality is lost
system tools (defs) history tool results (files read, pages, logs) free fixed, paid on every turn grows every turn — the item that explodes quality degraded well before the limit Three ways to keep the budget Offload Subagent (Explore, Task) reads 200 files in ITS context, returns a 2,000-token summary main context preserved Summarize before injecting 40-page tool result → extraction of useful facts (PostToolUse or preprocessing) the model only reads the essential Restrict 4-5 tool definitions per role (not 18), glob rules loaded only on relevant files the fixed item stays small
The system prompt and tool definitions are paid on every turn. History and tool results grow. Well before the hard limit, quality degrades: attention dilution, early instructions forgotten. The reflex is to keep the main window for decisions and offload the verbose.

What you need to know

Four line items. The system prompt and tool definitions (fixed, paid every turn), the conversation history (grows), tool results (the item that explodes: files read, pages fetched, logs). An agent that reads 30 files in full has consumed its window before it started reasoning.

Quality degrades before the limit. It's not a wall: it's a slope. Attention dilution (Domain 1, 1.6), early instructions less respected, contradictory results depending on position in context. A "model with more context" pushes the wall back, not the slope.

Offload the verbose. A subagent (Explore in Claude Code, Task in the SDK) does the reading in its own isolated context and only returns a summary (Domain 3, 3.4). It's the expected answer whenever the prompt mentions "read dozens of files", "walk the codebase", "go through documents".

Summarize before injecting. A bulky tool result is reduced to its useful facts before entering the window: PostToolUse hook (Domain 1, 1.5) or tool-side preprocessing.

Restrict the fixed. Tools per role (Domain 2, 2.3), glob rules loaded conditionally (Domain 3, 3.3): every irrelevant fixed token is paid every turn.

The 5.1 trap. "Switch to a model with a larger window" is almost always a distractor: the problem is management, not size. Another trap: "have the agent read all files at the start to get a full picture" — it's the opposite of incremental exploration (Domain 2, 2.5), and it saturates before the first decision.

5.2 — Compaction: the structured summary

When the window approaches the limit mid-task, you must make room. The question is how: what you keep, what you summarize, what you discard.

Truncation, sliding window, structured summary
✗ Truncation cut kept Loses the initial goal, the constraints, the decisions → the agent "forgets" what it was asked ~ Sliding window last N turns Bounded cost, but same loss of the beginning; ok for short chat → not for a multi-phase task ✓ Structured summary summary recent, raw Keeps decisions, facts, gaps, next steps; discards the raw → the task continues without drift The content of a good compaction summary Goal and original constraints (restated, not vaguely paraphrased) Decisions made and their rationale · Verified facts with their source Gaps and remaining uncertainties · What was attempted and failed Next steps · Files / entities touched — never raw tool outputs
Truncation and the sliding window lose the beginning of the conversation — where the goal, constraints and initial decisions are. The structured summary keeps what has value (decisions, verified facts, gaps, next steps) and discards the verbose (raw tool results, back-and-forth).

What you need to know

The structured summary. When compacting, you replace history with a summary that keeps: the original goal and constraints, decisions made and why, verified facts (with their source), gaps and uncertainties, what was attempted and failed, next steps. You discard raw tool results and reasoning back-and-forth.

Why not truncation. Cutting the beginning removes the goal and constraints: the agent keeps working, but on a task whose rules it no longer knows. The sliding window (keeping the last N turns) has the same flaw, with bounded cost; acceptable for a short stateless conversation, not for a multi-phase task.

When to start over. If compaction leaves a context that's mostly stale (code changed, results no longer reflect reality), you start a fresh session with the structured summary as initial context (Domain 1, 1.7). The summary is the exchange format between sessions.

Summarize per phase. On a long task, you compact at each phase change (end of exploration → summary → implementation), not only when the limit approaches. Compaction becomes a rhythm, not an emergency.

COMPACTION_SCHEMA = {
    "name": "compact_context",
    "description": "Produces the structured summary that replaces history. Keeps NO raw tool output.",
    "input_schema": {"type": "object", "properties": {
        "goal": {"type": "string", "description": "Original goal, constraints included"},
        "decisions": {"type": "array", "items": {"type": "object",
            "properties": {"what": {"type": "string"}, "why": {"type": "string"}}, "required": ["what", "why"]}},
        "verified_facts": {"type": "array", "items": {"type": "object",
            "properties": {"fact": {"type": "string"}, "source": {"type": "string"}}, "required": ["fact", "source"]}},
        "open_gaps": {"type": "array", "items": {"type": "string"}},
        "failed_attempts": {"type": "array", "items": {"type": "string"}},
        "next_steps": {"type": "array", "items": {"type": "string"}},
        "touched_files": {"type": "array", "items": {"type": "string"}},
    }, "required": ["goal", "decisions", "verified_facts", "open_gaps", "next_steps"]},
}

def compact(messages):
    resp = client.messages.create(model=M, max_tokens=2048, tools=[COMPACTION_SCHEMA],
                                  tool_choice={"type": "tool", "name": "compact_context"},
                                  messages=messages + [{"role": "user", "content": "Compact the history."}])
    summary = next(b for b in resp.content if b.type == "tool_use").input
    # New context: system + structured summary + the last 2 raw turns
    return [{"role": "user", "content": f"<context_summary>{json.dumps(summary, ensure_ascii=False)}</context_summary>"}] + messages[-4:]
The 5.2 trap. "Truncate the oldest messages" or "keep only the last 10 turns" are the default distractors; the answer is the structured summary. And the reverse trap: "summarize in free prose" — without structure, the summary forgets the gaps and failures, which are precisely what prevents redoing the same work.
🗜️
The 5.2 reflex
Limit near → structured summary (goal, decisions, sourced facts, gaps, failures, next), never truncation. Stale context → fresh session + summary. Long task → compact at each phase.

5.3 — Persistent memory across sessions

A session ends. What must survive depends on its nature — and the exam tests precisely this placement choice.

Which memory mechanism for which information?

 InformationExpected location
Conventions, standards, stable architecture"Always true", shared by the teamProject CLAUDE.md (version-controlled) — Domain 3
State of work in progressDecisions, gaps, next steps of a multi-day taskMemory file / structured summary injected at start
Large history, searchThousands of tickets, past decisions, documentsExternal store (SQL, vectors) queried by a tool
Personal preferencesA developer's style, language, favorite tools~/.claude/CLAUDE.md (never shared)
Raw tool results, logsFiles read, pages fetched, test outputsDo NOT persist — regenerate, go stale
Named investigation sessionsResume a still-valid analysis--resume <name> (+ flag modified files)

What you need to know

Choose by nature, not convenience. A convention goes in CLAUDE.md because it's stable and shared. The state of work in progress goes in a memory file or structured summary because it's temporary and task-specific. A large history goes in an external store because it doesn't fit in a file and you search it rather than read it.

What you don't persist. Raw tool results: they regenerate in one call and go stale fast. Persisting a file read yesterday means reasoning tomorrow on a false version. You persist the conclusions drawn, with their source, not the raw material.

The structured summary as exchange format. The same schema as in 5.2 serves as cross-session memory: written at session end, injected at the start of the next. It's dated and lists touched files, which tells you what may have changed.

Memory ≠ context. An external store doesn't load everything into the window: a tool queries it and returns only relevant entries. That's what allows months of memory without blowing the 5.1 budget.

The 5.3 trap. "Put everything in CLAUDE.md": that file is loaded every session, it grows, and a task's temporary state pollutes permanent conventions. "Persist the full conversation history": verbose, stale, and must be reread in full. "A vector store for team conventions": oversized for twenty stable lines that must be read every time, not searched.

5.4 — Graceful degradation

A tool doesn't respond, a source is unavailable, a process exceeds its deadline. The exam has a clear stance: an honest partial result beats nothing, and infinitely beats a lying success.

Faced with partial failure: the four reflexes
Tool call web search, internal API 1 · Bounded timeout never an infinite wait 2 · Fallback alternative source, cache, retry 3 · Partial + explicit gaps ✗ The two silent failures All or nothing one source in five fails → no report (80% of the work thrown away) Lying success the source fails → the report ships complete without mentioning the gap (worst case) ✓ The honest partial status: "partial" covered: ["academic", "press", "data"] missing: [{"source": "patents", "reason": "timeout 30s", "attempts": 2, "retryable": true}] confidence: "medium" The reader knows what they hold — and what's missing
Bound with a timeout, plan a fallback, deliver the partial with explicit gaps, and never turn a failure into a success. The output carries its completeness state: what's there, what's missing, why.

What you need to know

Bounded timeouts. Every external call has a maximum delay. Without it, a tool that doesn't respond blocks the agent, then the coordinator, then the pipeline.

Fallback. When the main call fails: alternative source (second search engine, yesterday's cache), retry with backoff for the transient (Domain 2, 2.2), or degraded functionality (report without the patents section rather than no report).

The partial result with explicit gaps. The output carries its completeness state: what's covered, what's missing, why, whether it's retryable. A report on four sources out of five, with the fifth flagged as missing, is a deliverable. A "complete" report that hides the absence of the fifth is a data error.

Never a lying success. Turning a failure into an empty result marked success is the gravest anti-pattern of the domain (already met in 2.2 and 5.5). Uncertainty is expressed: confidence, status, missing[].

The 5.4 trap. "Retry until it works" (no bound), "fail the whole process to guarantee consistency" (all or nothing), "return the report without the missing section so as not to worry the user" (lying success). The expected answer combines timeout + fallback + explicit partial.

5.5 — Error propagation between agents

Question 8 of the official guide. The web search subagent fails on timeout; depending on the version, the coordinator receives a raw error that kills the workflow, or nothing at all and produces a report without knowing a source is missing. What do you do?

Three ways to escalate an error, one expected
✗ Silent suppression Subagent: timeout → returns [] "success" the coordinator knows nothing report with a hole, shown complete the worst case ✗ Raw propagation Subagent: timeout → unhandled exception bubbles up as is the whole workflow stops 4 sources out of 5 lost ✓ Enrich and escalate Subagent: timeout local retry ×2 (backoff), fails category: transient · attempts: 2 partial: 12 results (3 queries/5) alternatives: [cache, engine B] the coordinator DECIDES What the coordinator can now do — and couldn't before re-delegate via the alternative · continue with 4 sources and flag the gap · retry later (transient) · escalate (permission) The decision belongs to the level that sees the whole, not the subagent that only sees its task
Silent suppression hides the problem from the coordinator. Raw propagation makes it carry a failure it can't interpret. Enrichment gives it what it needs to decide: category, attempts, partial results, possible alternatives.

What you need to know

Local recovery first. The subagent handles what it can itself: retry with backoff on transients, alternative source if within its scope. It only escalates what it couldn't resolve.

Enrich what escalates. The error passed to the coordinator contains: the category (transient / validation / business / permission), what was attempted (and how many times), the partial results obtained, the possible alternatives. That's what lets the coordinator choose: re-delegate, continue with a flagged gap, retry later, escalate.

The coordinator decides. Not the subagent: it only sees its task, the coordinator sees the whole (the four other sources, the deadline, the relative importance of the missing source). Consistent with Domain 1's hub-and-spoke.

Neither suppression nor raw. The two distractors of question 8: "catch the error and return an empty result as success" (the coordinator produces a report with a hole without knowing) and "local retry then generic failure status" (the retry is good, the generic prevents the decision).

# Subagent: local recovery, then ENRICHED error to the coordinator
def web_search_subagent(queries: list[str]) -> dict:
    results, failed = [], []
    for q in queries:
        try:
            results += search_with_retry(q, attempts=2, backoff=1.5, timeout=30)   # local recovery
        except TransientError as e:
            failed.append({"query": q, "category": "transient", "attempts": 2, "last_error": str(e)})
    if not failed:
        return {"status": "ok", "results": results}
    return {                                                                        # neither silent [] nor raw raise
        "status": "partial" if results else "failed",
        "results": results,                                                          # partials preserved
        "failed": failed,
        "retryable": True,
        "alternatives": ["cache_yesterday", "engine_b"],
        "coverage": f"{len(queries) - len(failed)}/{len(queries)} queries",
    }

# Coordinator: it DECIDES with the information received
out = web_search_subagent(queries)
if out["status"] == "partial":
    alt = delegate("web_search", failed_queries(out), source="engine_b")           # re-delegate via the alternative
    report = synthesize(out["results"] + alt["results"], gaps=still_failed(alt))    # gap flagged if it persists
The 5.5 trap. An option that "handles the error at the subagent level so as not to overload the coordinator" by masking it: the apparent simplicity hides the hole. An option that "lets the exception bubble up so nothing is lost": you lose everything else. Spot the words attempted, partial, alternatives, coordinator decides: they point at the right answer.
📡
The 5.5 reflex
Subagent: local retry, then enriched error (category, attempts, partials, alternatives). Coordinator: decides. Never [] as success, never a raw raise.

5.6 — Source attribution and heterogeneous formats

Two topics linked by the same idea: the reliability of what comes out depends on discipline at the input. Anchored on scenarios 3 (research) and 6 (documents).

From source to claim: never break the chain
Raw sources PDF · HTML · CSV · API 3 date formats, k€ vs M$, encodings, coded statuses Ingestion: normalize ISO 8601 · single units · UTF-8 content | metadata separated source_id: "S3" assigned Synthesis: every claim cites {claim, source_ids: ["S3","S7"], confidence} schema: source_ids ∈ enum of provided sources → invented citation = impossible ✗ What breaks the chain • Passing findings as prose between agents: the source is lost at the first synthesis • Asking "cite your sources" without constraint: the model produces plausible references • Merging two contradictory figures into an average: information destroyed ✓ What preserves it • Structured format between agents: content, source_id, url, date, page — never free text • Synthesis schema with source_ids constrained to the enum of actually collected sources • Contradiction → conflicts[] field: both values, their sources, their date
At ingestion, you normalize formats and separate content from metadata. During synthesis, every claim carries its source identifier, and the schema only accepts identifiers from the provided set — which prevents invented citations. Contradicting sources are flagged, not merged.

What you need to know

Content and metadata separated, from ingestion. The text of a finding on one side; the URL, document, page, date, source identifier on the other. In prose, attribution is lost at the first synthesis (Domain 1, 1.3).

The source follows the claim end to end. Every agent that transforms the data keeps the source_ids. The final report can trace any sentence back to its source.

Constrain by the schema. "Cite your sources" in the prompt produces plausible but invented references. The synthesis schema has a source_ids field whose values are restricted to the enum of sources actually provided: a citation outside the set is rejected at validation (Domain 4, 4.2).

Normalize at ingestion. Dates (Unix, ISO, "12/03/2026"), units (k€, M$), encodings, coded statuses: you convert once, at input (PostToolUse hook, preprocessing), and all downstream agents see a single format (Domain 1, 1.5). Asking the model to juggle formats is an error source at every step.

Contradictions flagged, not merged. Two sources give two figures for the same quantity: you don't average, you don't pick at random. A conflicts[] field carries both values, their sources and dates; the reader (or an explicit rule: "the most recent source wins") decides.

# Structured finding between agents: content | metadata, never prose
finding = {"id": "F42", "claim": "The market reached €4.2bn in 2025",
           "source_id": "S3", "url": "https://…", "doc": "report-2026.pdf", "page": 14,
           "published": "2026-02-11", "value": {"amount": 4.2e9, "currency": "EUR", "year": 2025}}

# Synthesis schema: source_ids constrained to the provided sources
def synthesis_tool(source_ids: list[str]) -> dict:
    return {"name": "write_synthesis",
            "input_schema": {"type": "object", "properties": {
                "claims": {"type": "array", "items": {"type": "object", "properties": {
                    "text": {"type": "string"},
                    "source_ids": {"type": "array", "minItems": 1,
                                   "items": {"type": "string", "enum": source_ids}},      # ← no invention possible
                    "confidence": {"type": "string", "enum": ["high", "medium", "low"]}},
                    "required": ["text", "source_ids", "confidence"]}},
                "conflicts": {"type": "array", "items": {"type": "object", "properties": {
                    "topic": {"type": "string"},
                    "values": {"type": "array", "items": {"type": "object", "properties": {
                        "value": {"type": "string"}, "source_id": {"type": "string", "enum": source_ids},
                        "published": {"type": "string"}}, "required": ["value", "source_id"]}}},
                    "required": ["topic", "values"]}},                                   # ← contradiction exposed
                "gaps": {"type": "array", "items": {"type": "string"}}},
                "required": ["claims", "conflicts", "gaps"]}}
The 5.6 trap. "Add an instruction to the synthesis prompt to always cite" (probabilistic, plausible citations), "let the model harmonize date formats while reading" (errors at every step; you normalize at ingestion), "take the value from the most reliable source" without saying so (the contradiction must be visible). The prompt keyword is attribution / provenance / traceable: the answer is a structured format with source_id carried end to end and constrained by the schema.

Cross-cutting traps of Domain 5

Reading grid for a Domain 5 question
If the scenario mentions… …the answer is …and the distractor is massive file reading, forgotten constraints Offload (Explore) + structured summary per phase "bigger model", "read everything first" window near the limit Structured summary decisions · facts · gaps · next "truncate", "last N turns" state to recover in the next session By nature: CLAUDE.md / memory file / external store "everything in CLAUDE.md", "full history" a source fails, "something deliverable" Timeout + fallback + partial with explicit gaps "all or nothing", "without mentioning" failing subagent, what to escalate Enriched error, the coordinator decides "[] as success", "raw exception" invented citations, dates in 3 formats constrained source_ids; normalize at ingestion "cite your sources", "table of formats" Golden rule: whatever crosses a boundary (turn, session, agent) travels as structure, never as prose
Domain 5 always asks the same question in six forms: when it doesn't fit or it breaks, what preserves the information? The answer is a named structure; the distractor smooths, cuts or masks.
  1. Result honesty comes first. Partial with gaps, exposed contradiction, declared uncertainty: any option that "smooths" for a clean look is a distractor.
  2. Structure preserves, prose loses. Structured summary, structured finding, structured error: whenever information crosses a boundary (turn, session, agent), it travels as structure.
  3. You process at input, not at every step. Normalization, content/metadata separation, summarizing the verbose: once, at ingestion.
  4. The level that sees the whole decides. The coordinator, not the subagent; the schema, not the model; the explicit rule, not chance.

Night-before checklist

Re-read the night before the exam — Domain 5
- Window = budget: system + tool definitions (fixed) + history + tool results (the item that explodes). - Quality degraded well before the limit; "more context" pushes the wall back, not the slope. - Verbose → subagent (Explore / Task) or summary before injection; fixed → tools per role, glob rules. - Limit near → structured summary (goal, decisions + why, sourced facts, gaps, failures, next, touched files), never truncation or sliding window on a multi-phase task. - Stale context → fresh session + summary; long task → compact at each phase. - Memory by nature: conventions → CLAUDE.md; work in progress → memory file / dated summary; volume → external store queried by tool; personal → ~/.claude/CLAUDE.md. - Never persist raw tool results. - Partial failure → bounded timeout + fallback + partial with explicit gaps (status, missing[], confidence). - Never a lying success, never all-or-nothing. - Between agents: local retry, then enriched error (category, attempts, partials, alternatives); the coordinator decides. - Neither [] as success, nor raw exception. - Content | metadata separated at ingestion; source_id carried end to end. - source_ids constrained by the schema to the enum of provided sources → invented citation impossible. - Heterogeneous formats normalized once at input (PostToolUse / preprocessing). - Contradictions → conflicts[] with values, sources, dates; never silently merged.

Five original scenario questions, corrected

Questions written by nAIvigate in the spirit of the exam, reproducing no real items.

Question 1 — Productivity scenario. A migration agent reads 60 files in full at the start of the task, then loses the constraints given in the first message and produces inconsistent changes. Fix?

A. Model with a larger window. B. Delegate the mapping to an Explore subagent that returns a structured summary, and compact at the end of the exploration phase before implementation. C. Repeat the constraints in every message. D. Truncate read results to the first 200 lines per file.

📚Answer Q1

B. Offload the verbose + structured summary per phase. A pushes the wall back without addressing dilution. C is a costly workaround. D loses information arbitrarily.

Question 2 — Research scenario. Out of five sources, the patents one times out. The current pipeline abandons the whole report. The PO wants "something deliverable". Approach?

A. Raise the timeout to 10 minutes. B. Deliver the report on four sources with status: "partial", missing: [{source: "patents", reason: "timeout", retryable: true}], and offer a re-run. C. Deliver the report on four sources without mentioning the fifth. D. Retry in a loop until success.

📚Answer Q2

B. Honest partial with explicit, retryable gap. A doesn't fix unavailability. C is a lying success. D has no bound.

Question 3 — Research scenario. The final report cites URLs that don't exist. The synthesis prompt says "always cite your sources with the URL". Fix?

A. Strengthen the instruction. B. Pass findings in a structured format with source_id, and constrain source_ids in the synthesis schema to the enum of actually collected identifiers. C. Check every URL afterwards and remove invalid ones. D. Ask the model for a confidence score per citation.

📚Answer Q3

B. The schema makes invention impossible; the instruction (A) stays probabilistic. C removes citations but leaves orphan claims and doesn't address the cause. D constrains nothing.

Question 4 — Document scenario. Three MCP servers return dates as Unix, ISO and "DD/MM/YYYY". The synthesis agent regularly gets the chronology wrong. Fix?

A. Add a table of formats to the synthesis prompt. B. Normalize to ISO 8601 at ingestion via a PostToolUse hook, so all downstream agents see a single format. C. Ask each MCP server to change its format. D. Have a dedicated subagent sort the dates.

📚Answer Q4

B. Normalization once at input. A makes the model carry the conversion at every step. C depends on third parties. D adds an agent for a data problem.

Question 5 — Research scenario. Two reliable sources give €3.8bn and €4.2bn for the same market in the same year. The current report shows "about €4bn". What do you do?

A. Keep the average, it's reasonable. B. Expose both values in a conflicts[] field with their sources and dates, and apply an explicit rule if one must win (e.g. the most recent). C. Take the best-known source without saying so. D. Remove the figure from the report.

📚Answer Q5

B. The contradiction is information; you flag it with its provenance. A destroys information. C hides a choice. D loses a useful fact.

Validation quiz

🧠 Quiz
Question 1 of 8

Which context window line item grows fastest in an agent that reads files?

📚Domain 5 glossary (expand)

Context budget — Split of the window between system prompt, tool definitions, history and tool results; planned, not endured.

Attention dilution — Quality degradation when too much content is processed at once, well before the hard limit.

Offloading — Having a subagent (Explore, Task) read the verbose and return only a summary.

Compaction — Replacing history with a structured summary when the window approaches its limit.

Structured summary — Goal, decisions and rationale, sourced facts, gaps, failures, next steps, touched files; exchange format between turns, phases and sessions.

Truncation — Anti-pattern: cutting old messages, losing goal and constraints.

Sliding window — Keeping the last N turns; bounded cost, same loss of the beginning; reserved for short stateless exchanges.

Persistent memory — What survives the session: chosen by nature (conventions, work in progress, volume, preferences).

Memory file — Dated structured summary written at session end and injected at the start of the next.

External store — SQL or vectors, queried by a tool; for volume and search, without loading the window.

Graceful degradation — Delivering a useful partial result rather than nothing, with explicit gaps.

Bounded timeout — Maximum delay on every external call; never an infinite wait.

Fallback — Alternative source, cache, retry with backoff, or degraded functionality when the main call fails.

Explicit partial result — Output carrying status, covered, missing[] (reason, attempts, retryable), confidence.

Lying success — Anti-pattern: failure turned into an empty or incomplete result shown as complete.

All-or-nothing — Anti-pattern: abandoning the whole process for a partial failure.

Local recovery — Subagent handling of what it can resolve (transient retry, alternative within its scope).

Enriched error — Category, attempts, partial results, alternatives; what escalates to the coordinator.

Silent suppression / raw propagation — The two anti-patterns of question 8: masking the error, or letting it kill the workflow.

Attribution (provenance) — Linking every claim to its source, kept end to end.

Content | metadata — Separation, from ingestion, of a finding's text and its source identifier, URL, document, page, date.

Constrained source_ids — Synthesis schema field restricted to the enum of provided sources; prevents invented citations.

Normalization at ingestion — Single conversion of heterogeneous formats (dates, units, encodings, statuses) at input, via PostToolUse or preprocessing.

conflicts[] — Field exposing contradictory values with their sources and dates, instead of merging them.

Going further

This was the last lesson of the series. The complete CCA-F guide gathers the five domains, the exam format and the revision plan; to see memory and drift handled in production, our article on persistent memory and personalization and the one on AI agent drift extend this domain.

If you want to certify a whole team — or make an existing multi-agent system reliable (context budget, compaction, error propagation, source attribution) before it fails in production — that's what nAIvigate Studio does in a Sprint.

Tags
certificationclaudeccacca-fcontextmemoirefiabilitemulti-agentsagentsformationpython
⚡ FICHE #005Skills & MCP: the fiche that maps the whole path2 MIN

Read next

CCA-F Domain 5: Context Management & Reliability — complete lesson 2026 · nAIvigate