verify, or in an adapter.
The table
Each is an exception of its own, raised as itself so an agent loop can tell them apart, and
each writes a refused receipt and an event naming the reason.
Why it is not configurable
A flag that relaxed one of these would be set in exactly the deployment where it mattered, and the receipts from that deployment would say the guard was on. The same rule bindsctrlrun verify, which has no argument that makes its Control behave differently from yours, and every
adapter, which ships no auto_approve, no dry_run and no development mode that grants.
Observe mode is the one way to run unprotected on purpose, and it says so on every receipt.
The guarantee it supports
Fail closed: G6 (unknown action refused) and G7 (no principal refused) inctrlrun verify, and
every row above has an acceptance test.
What it does not do
Failing closed is about what CTRLRun decides. It cannot refuse a call that bypasses the decorator entirely, a compromised host, or an executor that raisesNotExecuted after the remote acted;
those are in the threat model as limits, not as vulnerabilities.
Next
- Decisions: the three that can be reached.
- Errors reference: every exception and when it is raised.
- Threat model · Get started · Why.