Protocol > Decision model
DECISION VS ENFORCEMENT
Receipts express decisions. Runtimes express enforcement. One-line rule: Decisions DENY. Systems BLOCK.
Conceptual path from caller intent to runtime outcome. Decisions live on receipts; enforcement is what the execution surface does with that evidence.
- Decision (receipt-safe): PERMIT | DENY | ESCALATE | SILENCE
- Enforcement (runtime-safe): EXECUTED | BLOCKED
- Evaluation state: COMPLETE | INDETERMINATE. SILENCE implies
INDETERMINATE; ESCALATE isCOMPLETE. - Receipt status: SIGNED | UNSIGNED | INVALID
ESCALATE means policy matched and required an intervention path before execution may proceed. It is not PERMIT, not DENY, and not SILENCE. Conformant callers must not execute; enforcement stays BLOCKED until the escalation lifecycle resolves.
SILENCE means no authorization was issued. Without authorization, execution cannot proceed. Enforcement in a conformant integration is BLOCKED (fail-closed).
- A. A receipt decision MUST be PERMIT, DENY, ESCALATE, or SILENCE.
- B. BLOCKED MUST NOT appear as a receipt decision.
- C. Any decision other than PERMIT MUST yield enforcement = BLOCKED in a conformant integration (non-conformant callers are control failures).
- D. SILENCE is decision-layer indeterminacy. ESCALATE is a distinct policy-required intervention outcome - never alias ESCALATE to DENY or SILENCE.
- E. Every DENY, ESCALATE, and SILENCE MUST carry a mandatory reason_code (deterministic taxonomy).
{
"decision": "DENY",
"enforcement": "BLOCKED"
}
Mapping: PERMIT → EXECUTED or BLOCKED (only if downstream fails or operator aborts). DENY → BLOCKED. ESCALATE → BLOCKED until escalation resolves (never execute on ESCALATE). SILENCE → BLOCKED.
Use PERMIT / DENY / ESCALATE / SILENCE in protocol, receipts, and auditor-facing specs.
Use EXECUTED / BLOCKED in dashboards, traces, and operator records.
Do not collapse decision and enforcement into one axis. Do not alias ESCALATE to DENY or SILENCE.
// Decision response - DENY { "request_id": "req_01JXYZ", "decision": "DENY", "evaluation_state": "COMPLETE", "reason_code": "TG_DENY_SURFACE_FORBIDDEN", "reason_summary": "Requested surface is not permitted under active policy.", "receipt_id": "rcpt_01JXY2", "receipt_status": "SIGNED", "decided_at": "2026-03-20T13:58:00Z" }
// Decision response - ESCALATE { "request_id": "req_01JESC", "decision": "ESCALATE", "evaluation_state": "COMPLETE", "reason_code": "TG_ESCALATE_HUMAN_APPROVAL_REQUIRED", "reason_summary": "Policy requires intervention before this surface may proceed.", "receipt_id": "rcpt_01JESC", "receipt_status": "SIGNED", "decided_at": "2026-03-20T14:02:00Z" }