Reliability, evaluation and recovery
A reliability model for compound AI
A compound AI system is reliable only when its likely task paths, shared failure causes and containment controls jointly keep defects from reaching consequential effects.
TLDR
- Component accuracy is not system reliability because real requests take different routes through the system.
- Multiplying success rates works only when the route is fixed and failures are independent.
- Shared models, evidence, state and infrastructure create common-cause errors that make redundancy look safer than it is.
- The practical quantity is escaped defect probability: a local error that survives detection, abstention and recovery.
- Model reliability by task path, shared shock and containment, then spend effort on the dominant system exposure.
A synthetic refund assistant receives a simple request: cancel a booking and return £420. Its identity check is 99.7 per cent accurate. Its policy retriever scores 98 per cent. Its planner scores 97 per cent. Its tool-call generator scores 99 per cent. A separate model reviews the action before execution. Every component has a reassuring dashboard.
The run still fails. The retriever returns an old cancellation rule. The planner applies it correctly. The reviewer agrees because it sees the same stale rule and comes from the same model family. The payment tool accepts the request, but the network response times out after the refund has already been issued. The orchestrator retries. The customer receives £840.
Which component caused the failure? The obvious answer is to name the weakest score. That answer misses the mechanism. A stale evidence snapshot affected two reasoning stages. A supposedly independent reviewer shared the same blind spot. A timeout became a duplicate side effect because the effect boundary lacked idempotency and readback. The top event was produced by a path through the system, not by one bad part.
This is the reliability puzzle of compound AI. Modern systems combine model calls, retrieval, state, tools, policy checks, routers, verifiers and human escalation. The compound design can outperform a single model, as the Berkeley AI Research framing makes clear, but composition creates new failure geometry.1 Benchmarks such as τ-bench, ToolSandbox and AgentDojo reinforce the same methodological point: reliability must be evaluated in stateful trajectories, against rules, intermediate state and effects, not only by scoring isolated responses.678
Three questions are often collapsed into one. Model capability asks whether a model can perform a task under a specified interface. Component quality asks whether a retriever, classifier or verifier meets its local contract. Configured-system reliability asks whether the assembled system avoids a particular top event under the traffic, dependencies and controls it will actually face. The same model can sit inside two systems with radically different reliability because one system gives it broad authority and trusts its own review, while the other narrows its action contract and independently verifies effects.
The load-bearing claim of this paper is therefore not that compound systems are inevitably less reliable. Composition can add retrieval, verification and recovery that improve outcomes. The claim is sharper: the reliability of a compound AI system is a property of its route distribution, failure dependence and containment structure. Any estimate that omits one of those three can be directionally wrong, even when every component score is accurate.
The 99 per cent system that fails
Suppose a request must pass through ten stages. Each stage succeeds 99 per cent of the time. If every stage is required, every request takes the same route, and failures are independent, end-to-end success is not 99 per cent. It is 0.99 raised to the tenth power, about 90.4 per cent. At twenty stages it falls to about 81.8 per cent.
A five-stage system has identical 99 per cent components. Add a sixth component that merely reformats an answer. Nothing else changes. What should happen? Under the independence model, success falls from 95.1 to 94.1 per cent. The formatter is individually excellent, yet it consumes almost one percentage point of end-to-end reliability. Every required stage spends part of a finite reliability budget.
The multiplication is useful, but only inside a narrow box. It assumes the same route for every task. It assumes a stage has one stable error rate. It assumes errors at one stage do not make errors at another more likely. It also treats any local failure as terminal, even when a verifier, abstention gate or recovery procedure catches it.
Topology decides how errors combine
A serial pipeline behaves like an AND requirement for success: every required stage must work. A redundant pair behaves like an OR requirement only if either result is acceptable and a sound selector can recognise it. A router creates a mixture over paths. A voter introduces a new decision component whose errors must also be counted. A feedback loop makes later failure probabilities depend on earlier outputs and recovery attempts.
These topologies cannot be reduced to one average accuracy. Consider two 95 per cent solvers. In a serial decomposition where both must be correct, success is 90.25 per cent under independence. In an ideal parallel design where either correct answer is sufficient and a perfect selector identifies it, success is 99.75 per cent. In a two-agent agreement gate, disagreement may trigger abstention, so reliability depends on whether abstention counts as safe success, service failure or acceptable deferral. The parts are unchanged; the top event and composition rule change the answer.
| Topology | Success condition | Useful first calculation | Hidden dependency |
|---|---|---|---|
| Serial chain | Every required stage succeeds | Product of stage success, if independent | Earlier defects alter later inputs |
| Parallel alternatives | At least one usable result survives selection | One minus joint failure | Shared blind spots and selector error |
| Router | Selected path avoids its top event | Route-weighted success | Hard cases are routed non-randomly |
| Feedback loop | Trajectory converges before budget or safety limit | State-transition or simulation model | Retries and self-generated context couple rounds |
Fan-out creates a second kind of composition. A request that waits for twenty parallel services does not multiply correctness in the same way, but its deadline can be dominated by the slowest branch. Dean and Barroso showed why tail latency becomes a system property as services scale.5 In a compound AI workflow, a late retriever, tool or verifier can turn an otherwise correct trajectory into a timeout top event. Reliability must therefore specify whether “success” includes timeliness, rather than only semantic correctness.
For a fixed deterministic pipeline with independently failing components and no recovery, multiplying stage success rates is appropriate. The problem is not the equation. The problem is applying it after its assumptions have ceased to describe the configured system.
Accuracy and reliability answer different questions
A component score asks how often a part produces an acceptable output on a test distribution. System reliability asks how often a defined top event is avoided for a defined workload and operating period. The top event might be a wrong answer, an unauthorised tool call, a missed service-level deadline, a duplicate payment, or a failure to escalate.
This distinction is inherited from reliability engineering. Fault-tree analysis starts with a specified undesired event and works backwards through the combinations that can cause it.2 NIST similarly treats risk as involving both probability and consequence; reliability supplies only part of that decision.11 A system can be reliable for low-stakes drafting and unreliable for irreversible execution because the top events and tolerances differ.
The top event also fixes what counts as containment. If the top event is “a wrong recommendation reaches a person”, abstention contains the defect. If the top event is “the customer receives no answer within thirty seconds”, abstention may itself be a failure. If the top event is “an unauthorised payment settles”, a correct explanatory response is irrelevant unless the authority and effect paths are controlled. Reliability numbers are meaningless without their event definition, workload and time horizon.
A practical review should therefore reject statements such as “the agent is 97 per cent reliable” unless they are completed. Reliable against which top event? On which task classes? With which route mixture? Over how many retries? Under which tool and state versions? With what deadline and recovery policy? Precision here is not bureaucracy. It prevents a local benchmark from being mistaken for a system guarantee.
The hidden assumption is independence
Imagine two reviewers that each miss a defect on ten per cent of cases. If their misses are independent, both miss together on one per cent. That number makes two-reviewer designs look attractive. Yet the calculation silently assumes the reviewers fail for unrelated reasons.
Reviewer A and reviewer B use the same base model, prompt template, retrieved evidence and tool descriptions. Only their role names differ. Replace reviewer B with a different model family that receives independently retrieved evidence. Behaviour on easy cases stays the same. What should change on hard cases? If agreement was produced by genuine independent checking, little changes. If agreement came from shared blind spots, joint error falls. The intervention tests causal diversity, not cosmetic multiplicity.
Let each reviewer have error probability p = 0.10. If the binary error indicators have correlation ρ = 0.80, their joint error can be 0.10² + 0.80 × 0.10 × 0.90 = 0.082, or 8.2 per cent. Independence predicted one per cent. The exact formula is valid only for a feasible pair of Bernoulli variables with equal marginals, but the numerical lesson is clear: small marginal error does not imply small joint error.
Agreement is an especially weak proxy for independence. Two reviewers can agree because the answer is well supported, because the task is easy, because both copied the same evidence, or because both share a misconception. The observable event “A agrees with B” does not identify which generator produced the agreement. A reliability review needs the paired outcome table: both correct, A only correct, B only correct, and both wrong. Joint wrong cases carry the information that marginal accuracy hides.
Suppose 1,000 matched cases yield 100 errors for each reviewer. Under independence, about ten joint errors are expected. If eighty cases are jointly wrong, the redundancy is mostly nominal. Yet even this comparison can overstate implementation dependence because difficult cases cluster. Stratify by task family, ambiguity, evidence quality and route, then repeat the estimate. What remains after conditioning is the residual dependence the architecture must explain.
The classic warning comes from software diversity. Knight and Leveson tested independently developed program versions and challenged the assumption that development independence guarantees failure independence.3 Reliability engineering names the broader pattern common-cause failure: several components fail because a shared cause reaches them through a coupling mechanism.4
The two-part definition matters. “Same model family” is a possible coupling mechanism, not a complete cause. It becomes operationally relevant when a particular stimulus, representation or training-induced blind spot reaches several components through that shared family. Conversely, two different models can still co-fail because they receive the same misleading evidence. Reliability work should record both the initiating condition and the path by which it reaches multiple stages.
This prevents diversity theatre. Changing role names, temperatures or system prompts may increase surface variation while leaving the decisive dependency untouched. Genuine diversity can come from a different model family, but also from a different sensor, evidence source, representation, algorithm, authority boundary or verification method. The design question is not “how many agents?” It is “how many causally distinct ways remain for this top event to occur?”
Four forms of coupling in compound AI
Compound AI introduces at least four distinct ways for errors to travel together.
| Coupling | Shared cause | Why components co-fail | Discriminating intervention |
|---|---|---|---|
| Input difficulty | Ambiguous, rare or adversarial case | Several components depend on the same missing distinction | Stratify by task class and condition on difficulty markers |
| Epistemic | Same retrieved evidence or stale snapshot | Planner and verifier reason from the same false premise | Use independently sourced evidence or direct state readback |
| Model | Same family, training ancestry or prompt pattern | Different roles preserve the same blind spot | Change model family, representation and prompt, then test paired errors |
| Operational | Shared router, service, cache, credentials or load | One outage or overload reaches several nominally separate stages | Inject the dependency failure and observe containment |
τ-bench reported that the agents in its original evaluation were both weak and inconsistent across repeated trials, motivating its passk reliability measure.6 ToolSandbox evaluates intermediate milestones, minefields and state dependencies rather than only a final utterance.7 AgentDojo separates benign utility from security outcomes in tool-using environments and showed substantial benign failures in its original evaluation even before attack.8 These are benchmark-specific snapshots, not universal failure rates. Their durable contribution is the unit of evaluation: a configured trajectory through state and tools.
A system has a short path that succeeds 98 per cent of the time and a complex path that succeeds 90 per cent. Initially, 80 per cent of traffic takes the short path, giving 96.4 per cent overall success. A policy update sends only 40 per cent down the short path. No component changes, yet overall success falls to 93.2 per cent. Reliability moved because exposure moved.
Routing is therefore not plumbing around the reliability model. It is part of the model. A router that sends uncertain cases to a longer path increases the number of opportunities for failure precisely where the input is already hard. This can create selection bias: the complex route looks bad partly because it receives difficult work, while the difficult work looks manageable because easy cases are removed. Route-conditioned measurement is needed before blaming a component.
flowchart TD A["The 99 per cent system that fails"] --> B["The hidden assumption is<br/>independence"] B --> C["Model the trajectory, the<br/>shock and the escape"] C --> D["Turn the model into an<br/>operating instrument"] D -. "re-test" .-> A classDef first fill:#0a1424,stroke:#B96D00,stroke-width:2px,color:#e6f3ff classDef step fill:#0a1424,stroke:#3f7da0,stroke-width:1px,color:#e6f3ff class A first class B,C,D step
Model the trajectory, the shock and the escape
The practical model needs three layers. A path says which stages a task actually visits. A shock represents a shared condition that changes several stage error probabilities. Containment represents detection, abstention, recovery or compensation that stops a local defect from becoming the top event.
The path, coupling and containment equation
For a task class x, let r be a route and z a state of shared shocks. Let ui be the probability that stage i produces an uncontained defect after the route, shock state and prior history are known. A useful first model is:
The equation does not abolish dependence. It moves dependence into explicit variables. If failures remain dependent after conditioning, the product must be replaced by a joint model, Bayesian network, copula, empirical replay or simulation. Conditional independence is a testable modelling choice, not a gift from notation.
For the smallest useful implementation, decompose escaped defect probability as ui = ei(1 − diri). Here ei is the chance of a local defect, di is the chance the defect is detected, and ri is the chance recovery succeeds given detection. This factorisation assumes recovery is attempted only after detection and that the two probabilities are adequately represented by their product. Real systems may need separate branches for safe rejection, human escalation, compensation and unrecoverable partial effects.
The decomposition changes debugging. A high ei calls for a better component or narrower task. A low di calls for observability and independent checking. A low ri calls for reversible actions, idempotency or a tested runbook. Collapsing all three into “accuracy” makes teams improve the wrong layer.
History hi is included because compound systems are not memoryless. A model proposal can change the next prompt. A tool error can trigger a retry. A verifier can add a critique that steers the second attempt into a new failure mode. The route may branch after each observation. For short acyclic workflows, enumeration can be exact. For loops, partial failures and changing state, simulation or a dynamic probabilistic model is usually clearer.
Three required stages each have a two per cent local defect rate. Without containment, success is 0.98³, about 94.1 per cent. Now assume each defect has an 80 per cent chance of being detected and, when detected, a 75 per cent chance of successful recovery. The containment probability is 0.80 × 0.75 = 0.60, so the escaped defect probability at each stage is 0.02 × (1 − 0.60) = 0.008. Route success becomes 0.992³, about 97.6 per cent.
Add a three per cent undetected stale-state shock that compromises the route. Approximate success becomes 0.97 × 0.976, about 94.7 per cent. The local verifier improved reliability, but the shared shock consumed almost all the gain. The next investment should target evidence freshness or independent state verification, not another pass of the same reviewer.
Keep every component error rate unchanged. Add a deterministic authority check that rejects tool calls outside a typed contract, plus a readback that verifies the resulting state. If end-to-end failure falls, component accuracy was never the only lever. Containment changes whether a defect becomes a consequence.
A realistic configured example
Consider a synthetic service assistant with three routes. Fifty-five per cent of requests only require an answer. Thirty-five per cent request a refund and cross an effect boundary. Ten per cent are exceptions that should be handed to a person. The refund path uses identity, retrieval, proposal, authority, execution and readback. The answer path stops before authority and execution.
Suppose the short answer path succeeds 98.5 per cent, the refund path 94 per cent, and the exception handoff 99 per cent. Route-weighted success is 0.55 × 0.985 + 0.35 × 0.94 + 0.10 × 0.99 = 96.975 per cent. This value is more informative than multiplying all six component scores, because most requests never touch all six.
It is still incomplete. If a stale-policy shock occurs on 2.5 per cent of requests and compromises both retrieval and proposal, the affected route probabilities must be recomputed under that shock. If a new router sends more traffic to the refund path, the mixture changes again. The model is therefore versioned with the configured system, traffic distribution and time window.
An effect API times out on two per cent of calls. In sixty per cent of those timeouts, the remote effect actually committed but the acknowledgement was lost. A blind retry succeeds 99 per cent of the time. The duplicate-effect probability is approximately 0.02 × 0.60 × 0.99 = 1.188 per cent, before any other failure is counted.
From the caller’s perspective, retrying improved response success. From the business-effect perspective, it introduced duplicates. An idempotency key changes the causal structure: the second call becomes a read or replay of the first effect rather than a second effect. Independent readback then resolves whether settlement occurred. AWS guidance on retries makes the same boundary explicit: retries are safest for idempotent operations, and poorly controlled retries can amplify overload or side effects.14
This example exposes another hidden variable: the outcome may be unknown rather than simply failed. Treating timeout as “no effect” and retrying is a modelling error. Treating it as “effect definitely happened” is also wrong. The route needs an explicit unknown-outcome state, a bounded recovery path and evidence that closes the uncertainty. Google’s reliability guidance likewise warns that overload and retry behaviour can create cascading failure rather than local recovery.13
Turn the model into an operating instrument
A reliability model is useful only when its inputs come from operating evidence. Component benchmark scores are priors, not final parameters. Route probabilities come from traces. Local defect rates come from task-stratified evaluation. Coupling comes from paired-error analysis and interventions. Containment rates come from injected defects that the system must detect and recover from. NIST’s Generative AI Profile likewise treats measurement, monitoring and risk response as lifecycle activities rather than a one-off benchmark.12
Build the first model before deployment with synthetic tasks and an operational twin, but mark every parameter by provenance. “Measured in matched replay”, “estimated from fault injection”, “borrowed from a component benchmark” and “expert assumption” are not interchangeable. Run sensitivity analysis over the assumed values. If the release decision flips across a plausible range, the missing measurement is decision-critical and should be collected before authority expands.
Do not pool traffic too early. A global two per cent error rate can conceal a 0.2 per cent rate on routine answers and a 20 per cent rate on rare irreversible exceptions. Define task classes by the causal demands of the route: read-only versus mutating, reversible versus irreversible, single-source versus evidence synthesis, and ordinary versus exceptional authority. The classes should predict route and consequence, rather than only mirror product categories.
Build the ledger before the calculator
Start with one top event. “The assistant is unreliable” is not testable. “A refund is issued for the wrong amount without being blocked or corrected before settlement” is testable. Then record each task class, route, stage, shared dependency, detector, recovery and effect boundary. The route identifier must be logged before the outcome is known, or analysis will select on success.
A minimal ledger has one row per observed or simulated trajectory. It records task class, selected route, component versions, context and state versions, shock indicators, local defects, detector decisions, recovery actions, effect receipt and verified outcome. The ledger should preserve “not observed” separately from “observed and absent”. Missing readback is not a successful effect. A missing detector signal is not evidence that no defect occurred.
Estimate route weights from the intended workload and from stress workloads. Estimate local escaped-defect rates with confidence intervals rather than point estimates alone. Estimate joint failures for components that are meant to provide redundancy. For rare severe top events, direct frequency may be unavailable; combine structured fault trees, conservative bounds, targeted injection and explicit uncertainty rather than inventing precision.
For each task class, replay representative cases across repeated stochastic runs. Record stage-level defects, route choice, shared context identifiers, tool responses, detector outputs, recovery attempts and final verified state. Inject one fault at a time, then paired faults that share a cause. Estimate not just P(error), but P(error escapes | route, task class, shock).
Executable lab: compound risk calculator
Edit the JSON, then run a seeded Monte Carlo simulation of route selection, local defects, shared shocks and containment.
Probabilities use decimals from zero to one. Route weights must sum to one. Detection and recovery are multiplied to model containment.
The calculator is a decision instrument, not a certification engine. A positive result means one design has lower estimated top-event probability under the supplied assumptions and workload. A negative result means the proposed control did not reduce risk under that model, or that its benefit was offset elsewhere. Neither result establishes production reliability without representative traces, calibrated fault injection and independent outcome verification.
Use it comparatively. Clone the configuration, change one mechanism, and keep the workload fixed. Replace the second reviewer with an independent evidence path. Add a typed authority gate. Move low-confidence tasks to human review. Add readback and idempotency. The useful output is not a decimal alone, but the difference in top-event probability and the cause whose contribution changed.
Then reverse the question. Hold the architecture fixed and alter the workload. Increase the share of long routes, raise the common-shock probability, or lower recovery effectiveness during peak load. This reveals cliffs that an average-case estimate hides. A design that looks acceptable only when every uncertain parameter takes its optimistic value does not have a reliability margin.
Python version of the simulator and assumptions
The browser calculator uses the same logic as the compact Python implementation below. It assumes route selection is independent of the random draws after conditioning on the supplied route weights. A shock is sampled once per trial and may affect several stages. A failed stage is contained only when both detection and recovery succeed.
from __future__ import annotations
from dataclasses import dataclass
from random import Random
from typing import Dict, List
@dataclass(frozen=True)
class Component:
error: float
detect: float
recover: float
@dataclass(frozen=True)
class Route:
name: str
weight: float
steps: List[str]
@dataclass(frozen=True)
class Shock:
name: str
probability: float
affects: List[str]
fail_probability: float
detect: float
recover: float
def contained(rng: Random, detect: float, recover: float) -> bool:
return rng.random() < detect and rng.random() < recover
def choose_route(rng: Random, routes: List[Route]) -> Route:
draw = rng.random()
cumulative = 0.0
for route in routes:
cumulative += route.weight
if draw <= cumulative:
return route
return routes[-1]
def simulate(
components: Dict[str, Component],
routes: List[Route],
shocks: List[Shock],
trials: int = 100_000,
seed: int = 185,
) -> dict:
if abs(sum(route.weight for route in routes) - 1.0) > 1e-9:
raise ValueError("Route weights must sum to one")
rng = Random(seed)
failures = 0
escaped_causes: Dict[str, int] = {}
for _ in range(trials):
route = choose_route(rng, routes)
active_shocks = [s for s in shocks if rng.random() < s.probability]
top_event = False
for step in route.steps:
component = components[step]
causes: List[tuple[str, float, float, float]] = []
if rng.random() < component.error:
causes.append((f"local:{step}", 1.0, component.detect, component.recover))
for shock in active_shocks:
if step in shock.affects and rng.random() < shock.fail_probability:
causes.append((f"shock:{shock.name}", 1.0, shock.detect, shock.recover))
for cause, _, detect, recover in causes:
if not contained(rng, detect, recover):
failures += 1
escaped_causes[cause] = escaped_causes.get(cause, 0) + 1
top_event = True
break
if top_event:
break
success = 1.0 - failures / trials
dominant = max(escaped_causes, key=escaped_causes.get, default="none")
return {"success": success, "failure": 1.0 - success, "dominant": dominant}
What it cannot establish: the code cannot discover missing shock classes, prove causal independence, estimate consequence severity, or compensate for unrepresentative task data. Those remain empirical and governance obligations.
Use fault injection to estimate containment
End-to-end success alone cannot reveal why a system survived. Inject a stale retrieval result, a malformed tool response, a permission revocation, a partial timeout and an inconsistent readback. For each injection, record whether the defect was detected, whether execution was blocked, whether recovery succeeded and whether the verified outcome matched the intent.
Recent multi-agent failure taxonomies distinguish specification and system-design failures, inter-agent misalignment, and task verification or termination failures.9 Preliminary MAS-FIRE work extends this direction with systematic fault injection and reports topology-dependent differences in fault containment.10 A recent agent-reliability agenda likewise argues that a single success score should be decomposed into consistency, robustness, predictability and safety.15 These proposals are promising but should be treated as early evidence until independently replicated across tasks and architectures.
A useful campaign varies both the fault and the observation point. Inject a bad retrieval result before planning, then inject the same defect after planning as a corrupted tool argument. If only one is caught, the location matters. Inject two defects with the same semantic content but different encodings. If both bypass the verifier, the vulnerability may be conceptual rather than lexical. Inject the same fault under the short and long routes. If containment changes, topology or budget is part of the cause.
Measure graceful outcomes, not just binary completion. The system may block safely, ask for clarification, escalate with a complete case packet, compensate an effect, or stop with unknown outcome. These states have different operational costs and consequences. They should not all be merged into “failure”, but none should be silently counted as success.
The strongest rival explanation
Paired failures do not automatically prove architectural coupling. Hard inputs can make every competent component fail. A stale policy may be correlated with unusual cases. Route changes may coincide with a new customer population. The rival explanation is unobserved task difficulty, not shared implementation.
Test the rival by conditioning on task features and intervening on the suspected coupling. If two reviewers remain correlated after matching on task difficulty, then replace one model, prompt, evidence source or tool path. If correlation falls, the changed dependency was causal. If it does not, the shared difficulty or an unmeasured cause remains. This is why a dependency graph should be paired with controlled substitutions, not treated as proof.
Route-conditioned paired-error signatures may predict which compound systems will benefit from diversity before full deployment. The hypothesis is strengthened if low paired-error overlap under controlled faults predicts lower top-event rates on held-out trajectories. It is weakened if overlap changes do not transfer to end-to-end outcomes. A rival explanation is that the diversity intervention merely changes task difficulty or latency. The smallest useful study uses two matched reviewer designs, a fixed task set, explicit fault classes and verified final state.
Do not add a reviewer, agent or retry until you can state which top-event path it breaks, which failure causes it does not share, and how its own failure is contained. Additional components are reliability controls only when they alter the causal structure of escape.
stateDiagram-v2 [*] --> Claim state "Topology decides how errors<br/>combine" as Claim state "Accuracy and reliability<br/>answer different questions" as Test state "Four forms of coupling in<br/>compound AI" as Revision Claim --> Test: expose mechanism Test --> Decision: evidence survives Test --> Revision: rival survives Revision --> Claim: narrow or rebuild Decision --> [*]
Budget escaped defects by route, not component score
The common reliability review asks whether each model, retriever and tool meets a target score. The better review asks whether the configured system keeps a defined defect from reaching a defined consequence across the routes that real work will take.
That change moves engineering effort. A weak local component with strong independent containment may be acceptable. A high-scoring reviewer that shares evidence and model ancestry with the planner may add little. A router can change reliability without changing any component. A deterministic authority gate can reduce consequential failure without making the model more accurate. A readback can turn an unknown outcome into a recoverable one.
The release decision should be based on route-conditioned escaped-defect probability, with common causes and containment measured explicitly. Set a top-event budget for each task class. Reject any design whose estimate depends on untested independence. Require evidence that proposed redundancy fails differently. Recompute the model whenever routing, evidence sources, model families, tool contracts or recovery procedures change.
The model will never contain every shock. That is not a reason to return to component averages. It is a reason to version assumptions, inject failures, monitor new paired-error patterns and preserve a safe authority boundary. Reliability is not the absence of local error. It is the configured system’s ability to prevent error from becoming an unverified effect.
For a release meeting, this produces a concrete packet: the top-event definition, route distribution, common-cause register, containment measurements, uncertainty ranges, sensitivity results and evidence receipts for the highest-risk paths. The packet should also name prohibited inferences. A low simulated top-event rate does not prove that the shock catalogue is complete. A diverse model pair does not prove independence. A successful readback test does not prove every external system exposes authoritative state.
The next design decision is therefore explicit. Improve a component when local defects dominate. Decouple evidence and reviewers when common causes dominate. Add typed gates, abstention and recovery when containment is weak. Narrow authority when both coupling and containment remain poor. Reliability engineering begins when the team can say which causal path its next control removes.
sequenceDiagram participant Q as Question participant M as Mechanism participant E as Evidence participant D as Decision Q->>M: The 99 per cent system that fails M->>E: Topology decides how errors combine E-->>M: compare rival explanations E->>D: Appendices D-->>Q: revise scope or act
Appendices
Compact glossary
- Top event
- The specific undesired system outcome whose probability is being estimated.
- Route
- The ordered set of stages actually exercised by a task class and runtime decision.
- Local defect
- A wrong, late, malformed or unauthorised stage output before containment.
- Escaped defect
- A local defect that survives detection and recovery and can contribute to the top event.
- Common-cause shock
- A shared condition that changes the failure probability of several components through a coupling mechanism.
- Containment
- Detection, abstention, rejection, recovery, compensation or readback that prevents a defect becoming the top event.
- Conditional independence
- The assumption that stage escapes are independent after route, shocks and relevant history are specified.
- Reliability budget
- The maximum tolerated top-event probability for a defined task class and operating context.
References
- Zaharia, M. and colleagues. “The Shift from Models to Compound AI Systems.” Berkeley Artificial Intelligence Research, 2024. Primary source.
- Vesely, W. E., Goldberg, F. F., Roberts, N. H. and Haasl, D. F. Fault Tree Handbook, NUREG-0492. U.S. Nuclear Regulatory Commission, 1981. Official record.
- Knight, J. C. and Leveson, N. G. “An Experimental Evaluation of the Assumption of Independence in Multiversion Programming.” IEEE Transactions on Software Engineering 12(1), 1986, 96-109. DOI.
- Stott, J. E. and colleagues. “Common Cause Failure Modeling: Aerospace vs. Nuclear.” NASA, 2010. NASA Technical Reports Server.
- Dean, J. and Barroso, L. A. “The Tail at Scale.” Communications of the ACM 56, 2013, 74-80. Google Research.
- Yao, S., Shinn, N., Razavi, P. and Narasimhan, K. “τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains.” 2024. arXiv.
- Lu, J. and colleagues. “ToolSandbox: A Stateful, Conversational, Interactive Evaluation Benchmark for LLM Tool Use Capabilities.” 2024. arXiv.
- Debenedetti, E. and colleagues. “AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents.” 2024. arXiv.
- Cemri, M. and colleagues. “Why Do Multi-Agent LLM Systems Fail?” 2025. arXiv preprint.
- Jia, J. and colleagues. “MAS-FIRE: Fault Injection and Reliability Evaluation for LLM-Based Multi-Agent Systems.” 2026. arXiv preprint.
- National Institute of Standards and Technology. Artificial Intelligence Risk Management Framework (AI RMF 1.0), NIST AI 100-1, 2023. Official publication.
- National Institute of Standards and Technology. Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile, NIST AI 600-1, 2024. Official publication.
- Ulrich, M. “Addressing Cascading Failures.” Site Reliability Engineering. Google, 2016. Official online chapter.
- Amazon Web Services. “Retry with backoff pattern.” AWS Prescriptive Guidance. Official guidance.
- Rabanser, S. and colleagues. “Towards a Science of AI Agent Reliability.” 2026. arXiv preprint.