Fail-closed governance means execution is denied whenever governance guarantees cannot be deterministically established. The system never silently degrades, retries with partial state, or continues past unverified conditions. Uncertainty is always an explicit rejection with a structured error code. This is not a safety feature layered on top of governance. It is the foundational design principle from which all other governance guarantees derive their meaning.Documentation Index
Fetch the complete documentation index at: https://docs.manthan.systems/llms.txt
Use this file to discover all available pages before exploring further.
What triggers a fail-closed rejection
The runtime rejects execution across all of these conditions - without exception, without retry, without fallback:| Condition | Stage | Error |
|---|---|---|
| Signal not declared in schema | Signal validation | VAL-003 |
| Required signal missing | Signal validation | VAL-004 |
| Signal has wrong type | Signal validation | VAL-006 - VAL-012 |
| No policy rule matched | Policy evaluation | SYS-006 |
| Replay detected | Replay enforcement | INV-013 |
| Invalid token signature | Token verification | - |
| Runtime version unsupported | Token verification | - |
| Required capability missing | Token verification | - |
| Schema version unsupported | Token verification | - |
| Bundle hash mismatch | Bundle verification | - |
| Redis unavailable | Replay enforcement | All executions rejected |
| Pending override not found | Override resolution | - |
The execution sequence enforces fail-closed at every stage
The pipeline is sequential and cannot be short-circuited:Failures are reproducible
Failure in Parmana is not an error state - it is a governed outcome. Every rejection carries a structured error code derived deterministically from the condition:The policy must be fail-closed too
The governance runtime fails closed at the policy level as well. If no rule in the policy matches the provided signals, execution is rejected withSYS-006. There is no implicit default-approve path, no fall-through to a permissive catch:
"all": []) is required precisely because of fail-closed semantics - it makes the policy author’s intent for the unmatched case explicit. The compiler warns when it is missing (POL-021).
Redis availability is a hard dependency
In production, Redis is not optional. When Redis is unavailable, every execution request is rejected. This is intentional. Allowing executions without replay protection would break the single-use guarantee - the same signals could produce multiple attestations, duplicating approvals, payments, or escalations. There is no degraded mode that preserves partial correctness. Replay protection requires Redis, or execution does not happen. This is a system design choice with operational implications: Redis must be treated as a first-class dependency with the same uptime requirements as the governance server itself.Override flows are also fail-closed
Human override does not weaken fail-closed semantics. WhenresolveOverride() runs, the same verification pipeline executes against the original token:
- The original signature is re-verified
- The runtime version is re-checked
- The capability set is re-checked
- The replay slot is claimed atomically
Why silent degradation is more dangerous than rejection
In payment processing, healthcare, and regulated systems, silent degradation has worse consequences than explicit rejection:- A duplicate payment approval that passes through because Redis was briefly unavailable causes real financial harm
- A governance check that silently succeeds with invalid signals produces an attestation that falsely claims governance was enforced
- An unverified decision recorded in the audit log as if it were verified destroys audit integrity
Distributed systems semantics
Fail-closed semantics apply uniformly across distributed deployments:- Concurrent requests for the same fingerprint result in exactly one succeeding via
SET NX; all others are rejected withINV-013 - Network partitions that isolate the governance server from Redis cause all executions to fail, not degrade silently
- Unknown runtime versions are rejected across all nodes - no node silently accepts an execution from an unrecognized runtime version
See also
- Deterministic Governance - why determinism is the foundation
- Replay Protection - how single-use enforcement works
- Execution Authority - what execution authority means
- Error Codes - structured error code reference