Verdicts
Every governance evaluation returns one of three verdicts. Each verdict tells your application exactly what to do next.
The Three Verdicts
PROCEED
{ "verdict": "proceed" }
All 8 governance laws passed. The action is safe to execute immediately.
Your code should: Execute the action and record the result.
if result.passed:
execute_action()
ESCALATE
{ "verdict": "escalate" }
One or more laws returned a warning, but none failed outright. The action is not clearly dangerous, but it requires human judgment.
Common reasons for escalation:
- Medium-risk action without prior approval
- AI agent approaching the boundary of its autonomy
- Action cost is close to the budget limit
- Missing optional context that would improve evaluation
Your code should: Queue the action for human review. Do not execute automatically.
if result.needs_approval:
approval_id = queue_for_human_review(result)
# When approved, re-evaluate with has_approval=True
BLOCK
{ "verdict": "block" }
One or more laws failed. The action violates a governance constraint and must not be executed.
Common reasons for blocking:
- High-risk irreversible action without human approval
- Actor does not have authority for this action
- Budget would be exceeded
- Safety concern detected
- Audit trail cannot be maintained
Your code should: Reject the action, log the reason, and alert the operator if appropriate.
if result.blocked:
log_blocked_action(result.explanation)
alert_operator(result)
Verdict Decision Logic
| Condition | Verdict |
|---|---|
All 8 laws return pass | proceed |
Any law returns warn, none return fail | escalate |
Any law returns fail | block |
Per-Law Results
Each law evaluation returns one of three results:
| Result | Meaning |
|---|---|
pass | Law is fully satisfied |
warn | Law is conditionally satisfied — human review recommended |
fail | Law is violated — action must not proceed |
Inspecting Why
The evaluations array in the response shows exactly which laws contributed to the verdict:
result = client.governance.evaluate("data.delete", description="Delete user data")
# Find which laws caused the verdict
for evaluation in result.evaluations:
if evaluation.result.value != "pass":
print(f"{evaluation.law_name}: {evaluation.result.value}")
print(f" Reason: {evaluation.reason}")
Example output for a blocked action:
Safety Dominance: fail
Reason: High-risk irreversible action requires human approval
Bounded Autonomy: warn
Reason: AI agent trust score below threshold for data deletion
Handling Escalations
When an action is escalated, you can resolve it by re-evaluating with additional context:
# Original evaluation — escalated
result = client.governance.evaluate(
"payment.process",
description="Process $4,200 vendor payment",
context={"risk_level": "medium", "is_irreversible": True},
)
# result.verdict == "escalate"
# After human reviews and approves:
result = client.governance.evaluate(
"payment.process",
description="Process $4,200 vendor payment",
context={
"risk_level": "medium",
"is_irreversible": True,
"has_approval": True, # Human approved
},
)
# result.verdict == "proceed"
Best Practices
- Always handle all three verdicts — never assume an action will proceed
- Log blocked actions — they indicate potential security issues or misconfiguration
- Track escalation rate — a high escalation rate may indicate your agents need tighter scoping
- Provide rich context — more context leads to more accurate evaluations
- Use the explanation — show it to operators so they understand why an action was blocked or escalated