Skip to main content
A decision receipt is the structured contract VerifiedX returns for every protected boundary check. Your system should usually branch on:
  • outcome
  • safe_to_execute
  • disposition.mode
For deeper explanation, see Decision Receipts.

Fields

receipt_type
string
required
Always verifiedx_decision_receipt.
decision_id
string
required
Stable identifier for the decision.
outcome
string
required
One of:
  • allow
  • allow_with_warning
  • replan_required
  • goal_fail_terminal
action_class
string
The protected class involved, such as memory_write, record_mutation, system_change, or external_message_send.
safe_to_execute
boolean
required
Whether the requested boundary is safe to execute now.
human_review_terminal
boolean
required
Indicates whether this path should terminate into human review.
must_not_retry_same_action
boolean
required
Indicates whether the same blocked action should not be retried unchanged.
reasons
array
required
Structured reasons for the decision.
safe_next_steps
array
required
Safe next steps the workflow can take without pretending the blocked effect happened.
viewer_guidance
array
required
Extra guidance for reviewer-facing or operator-facing views.
what_would_change_this
array
required
Evidence, approvals, or context that would change the decision.
disposition
object
required
How the workflow should continue.
routing
object
required
Routing hints for the next stage of the workflow.
resume_contract
object
required
Resume and retry semantics for the blocked or warned boundary.
runtime_loopback
object
Runtime loopback information when the workflow should replan locally or upstream.
metadata
object
required
Optional runtime or adapter metadata attached by the SDK.

Example receipt

{
  "receipt_type": "verifiedx_decision_receipt",
  "decision_id": "dec_composed_replan_1",
  "outcome": "replan_required",
  "action_class": "system_change",
  "safe_to_execute": false,
  "human_review_terminal": false,
  "must_not_retry_same_action": false,
  "reasons": [
    {
      "code": "missing_upstream_support",
      "message": "The workflow update is missing required upstream approval."
    }
  ],
  "safe_next_steps": [
    {
      "code": "GET_LEGAL_REVIEW",
      "message": "Obtain legal review approval for WF-2302."
    }
  ],
  "viewer_guidance": [],
  "what_would_change_this": [
    "A legal review event confirming WF-2302 is approved_with_follow_up."
  ],
  "disposition": {
    "mode": "upstream_replan",
    "downstream_allowed": false,
    "local_replan_recommended": false,
    "upstream_replan_required": true
  },
  "routing": {
    "direction": "upstream",
    "target_hint": "workflow_supervisor",
    "return_to_node": "workflow_supervisor",
    "workflow_id": "REQ-2302",
    "node_id": "handoff_note_node"
  },
  "resume_contract": {
    "retry_this_node": true,
    "pass_receipt_upstream": true,
    "pass_new_upstream_context_on_retry": true,
    "resume_when": [
      "A legal review event confirming WF-2302 is approved_with_follow_up."
    ]
  },
  "runtime_loopback": {
    "same_goal_state": true
  },
  "metadata": {}
}

Outcome values

OutcomeMeaning
allowThe boundary can execute normally.
allow_with_warningThe boundary can execute, but the receipt still carries warnings and guidance.
replan_requiredThis exact side effect should not happen now. The workflow should continue through a safer or better-grounded path.
goal_fail_terminalThe requested path is terminally blocked for the current goal state.
When a blocked boundary is returned through a runtime or native adapter, the tool result usually also includes the same decision_receipt so the agent can replan immediately.