KB-7603
08 Action handler safety proof (Phase 9)
2 min read Revision 1
Phase 9 — v_rp_action_handler_safety_proof (7/7 PASS)
fn_wf_candidate_action_execute gates (read from source):
- Gate A: president action + actor_type≠human → BLOCKED.
- Gate B: president action requires a real human president 'approve' vote scoped to the subject → BLOCKED (none for candidates).
- Gate C: owner action requires an active assigned owner → BLOCKED (ownership=0).
- Gate D: canon-mutating action → never executed here → BLOCKED.
- Safe-triage: PREVIEW (preview=true) or EXECUTED (preview=false) both write only
wf_candidate_action_log(audit), triage-only, no canon/owner/birth/event. - Unknown action_code → BLOCKED before any INSERT.
Live refusal proof (preview=true)
| test | result |
|---|---|
| ASSIGN_OWNER (ai) | BLOCKED "no active assigned owner" (Gate C) |
| RECONCILE_TO_DOT (ai) | BLOCKED "no active assigned owner" (Gate C) |
| CREATE_BIRTH_REQUEST (ai_agent) | BLOCKED "actor_type=ai_agent cannot satisfy president vote" (Gate A) |
| CREATE_BIRTH_REQUEST (human) | BLOCKED "no human president approve vote" (Gate B) |
| SEND_TO_GOVERNANCE (human) | BLOCKED "no human president approve vote" (Gate B) |
| unknown action_code | BLOCKED, 0 log rows |
Assertions (7/7)
GATE_A (2 president actions require human) · GATE_B (0 president votes scoped to candidates/PROC-OWN — note 14 exist globally for other governance objects) · GATE_C (0 active owners) · GATE_D (3 canon actions never executed) · SAFE_TRIAGE_audit_only (7) · REAL_RUN_independent_and_off · UNKNOWN_action_clean_block.