What Does Fail-Closed Mean? (REA Glossary)

Fail-closed (adjective): a system design property where, when a component fails or a precondition is missing, the system refuses to act instead of degrading to a best guess. The opposite of fail-open ("produce something anyway") and distinct from fail-safe (protect people from harm — [Source type: 通用安全工程术语口径,需公开标准文档核对后落版]). For an AI agent doing binary analysis, fail-closed means: if the tool cannot verify a result, it returns an error naming exactly what is missing — never a plausible-looking answer.

fail-closed vs. fail-open vs. fail-safe

The three terms get conflated. The working distinction:

Why does this matter more for AI agents than for humans? A human analyst who gets a blank decompilation knows it is blank. An agent pipeline treats whatever arrives as data; a tool that guesses on failure poisons every downstream step. Fail-closed design is how an analysis chain stays auditable — each refusal is a checkpoint, each success carries its proofs, and a content-addressed ID ties claim to evidence.

fail-closed in practice: three refusals we ran

This is not an abstract virtue. In our 2026-10-12 lab session, REA refused three different things, each naming its reason precisely:

1. missing analysis engines → provider_unavailable

Asking for deep analysis with no engine installed failed closed:

bash — lab@realearn verified: ran 2026-10-12
$ npx rea analyze ./hello
code: provider_unavailable
rejections[3]: ghidra(not_configured) / hopper(executable_missing) / ida(not_configured)

Three candidates, three different diagnoses, three different fixes — instead of one fuzzy "analysis failed".

2. oversized results → resource_constraint, not truncation

The same layout request on a 4.5MB library over the MCP channel returned resource_constraint with a pointer to the evidence bundle path — the tool refused to silently cut results to fit. Nothing got truncated; the channel told you to take another route.

3. wrong provider → capability_unavailable

Explicitly requesting --provider pwntools-elf for a decompile-style operation refused with capability_unavailable and the exact list of accepted engines: ghidra, hopper, ida. The boundary is declared, not discovered by surprise.

All three come from our own runs — the full walkthrough lives in the evidence contract guide and the REA vs Ghidra comparison.

how to recognize fail-closed design in any tool

FAQ

What is fail-closed in simple terms?

When something fails or a precondition is missing, the system stops and reports instead of producing a best guess. In binary analysis that means an error naming the exact missing engine — never a plausible-looking result nobody can verify.

Is fail-closed the same as fail-safe?

No. Fail-safe is about harm: on failure, fall to a safe state. Fail-closed is about truth: on failure, produce nothing unverifiable. A tool can be fail-safe yet fail-open — degrading to a harmless but unverified answer. REA is fail-closed: it refuses with a specific code instead.

Why does fail-closed matter for AI agents specifically?

An agent consumes tool output as data without human skepticism in the loop. A fail-open tool that guesses on failure contaminates every downstream step silently. Fail-closed refusals are the checkpoints that keep an automated analysis chain auditable.

Is realearn affiliated with morluto or rea.tools?

No. realearn is independent and non-affiliated; every refusal shown here came from commands we ran in our own lab on 2026-10-12.

Related: evidence bundle · content-addressed ID · REA evidence contract (deep guide) · our evidence practices