Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0002

ADR-0002: Factory gates fail closed; interactive sessions stay fail-open

field value
Status Accepted
Date 2026-07-23
Register factory (docs/adr, 4-digit ids)
Source docs/adr/0002-factory-gates-fail-closed.md — permalink at bdafa201a (unchanged on master since that commit)
Wiki register entry ADR-0002 (wiki status: Accepted)

← ADR-0001 · ADR-0003 →

The record

Context

The shipping gate (scripts/claude_governance_gate.py) fails open on every error path — malformed stdin, interceptor exception — by documented design: "a broken plumbing seam must never wedge a live Claude Code session." That is the correct policy for an interactive session with a human present.

It is the catastrophically wrong policy for an autonomous factory: any transient fault in the fact/graph/Prolog stack silently disables governance for that call, and nothing signals it. A security control that degrades to "allow" precisely under stress is not a control.

Decision

Two explicit modes.

The mode is part of the run's identity, not a per-call heuristic.

Alternatives rejected

Consequences

Provenance

Round-1 review (all reviewers, code-verified the documented fail-open). Round-2 Fable made the interactive/factory split the first of its four must-fixes. Round-3 Opus flagged the unaddressed liveness cost, resolved in ADR-0019.

Relations of ADR-0002

Rulings cited

None.

Specs cited