Blind set 2: the verdict function
Set 1 can only send what a caller can send. Set 2 goes one level down: it extracts derive_outcome
from the gateway source and feeds it stage lists no live stage produces today, the way a new stage, a refactor or a
typo might. Written before any change and run once for the figure below.
| Case | Want | Before | After |
|---|---|---|---|
| control: all allow | ALLOWED | held | ALLOWED |
| control: enforcing deny | BLOCKED | held | BLOCKED |
| control: enforcing unavailable | BLOCKED | held | BLOCKED |
| no stages at all | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage says DENY (upper case) | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage says 'block' | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage says 'error' | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage says 'unknown' | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage verdict is None | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage verdict is missing | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage verdict is '' | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage verdict ' deny ' with spaces | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage verdict is True (boolean) | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing stage 'Require_Approval' mixed case | not ALLOWED | failed: ALLOWED | REQUIRE_APPROVAL |
| enforcing stage 'timeout' | not ALLOWED | failed: ALLOWED | BLOCKED |
| enforcing flag as string 'true' + deny | BLOCKED | held | BLOCKED |
| stage entry is not a dict | not ALLOWED | held | BLOCKED |
| stage ran=False with verdict allow on an enforcing stage | not ALLOWED | failed: ALLOWED | BLOCKED |
5/18 before, 18/18 after. Latent, not exploited: every live stage today emits only the 7 words above, so no live decision was affected. A future stage, a typo, or a stage passing through an engine's own word (one helper returns verdict 'error') would have been read as permission.
Re-run it: python3 scripts/fail_closed/blind2_derive_outcome_2026_11_03.py. Raw data:
fail-closed-evolution-2026-11-03.json.
FIRME AI CORPORATION · CAIN-42 is a Byzantine trust fabric. Numbers marked "our own check" were run by us, not by an independent party. Nothing on these pages is a certification.