TrigGuard
TRIGGUARD DECISION_MODEL

Protocol > Decision model

DECISION VS ENFORCEMENT

Receipts express decisions. Runtimes express enforcement. One-line rule: Decisions DENY. Systems BLOCK.

EVALUATION FLOW

Conceptual path from caller intent to runtime outcome. Decisions live on receipts; enforcement is what the execution surface does with that evidence.

Intent (structured request)
Policy evaluation
Decision (PERMIT | DENY | ESCALATE | SILENCE)
Receipt
Runtime enforcement (EXECUTED | BLOCKED)
CANONICAL ENUMS
  • Decision (receipt-safe): PERMIT | DENY | ESCALATE | SILENCE
  • Enforcement (runtime-safe): EXECUTED | BLOCKED
  • Evaluation state: COMPLETE | INDETERMINATE. SILENCE implies INDETERMINATE; ESCALATE is COMPLETE.
  • Receipt status: SIGNED | UNSIGNED | INVALID
ESCALATE

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

SILENCE means no authorization was issued. Without authorization, execution cannot proceed. Enforcement in a conformant integration is BLOCKED (fail-closed).

CONTRACT INVARIANTS
  • 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).
CORRECT PAIRING
{
  "decision": "DENY",
  "enforcement": "BLOCKED"
}

Mapping: PERMITEXECUTED or BLOCKED (only if downstream fails or operator aborts). DENYBLOCKED. ESCALATEBLOCKED until escalation resolves (never execute on ESCALATE). SILENCEBLOCKED.

PUBLIC WORDING

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
(receipts, protocol)
PERMIT
DENY
ESCALATE
SILENCE
ENFORCEMENT
(runtimes, systems)
EXECUTED
BLOCKED
MINIMAL EXAMPLES
// 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"
}