02 — PROC-OWN-01..05 Execution Packet
02 — PROC-OWN-01..05 Execution Packet
Views: v_rp_proc_own_execution_packet, v_rp_proc_own_side_effect_preview, v_rp_proc_own_no_go_guard.
Underlying scaffold: v_process_axis_post_vote_handler_readiness, v_process_axis_approval_side_effect_preview, fn_pa_domain_handler, fn_pa_post_vote_dryrun.
Request inventory (all pending, unreviewed)
| code | request_type | entity | handler | proposed_action |
|---|---|---|---|---|
| PROC-OWN-01 | axis_ownership | AX-PROCESS | fn_pa_handler_assign_axis_owner | assign_axis_owner |
| PROC-OWN-02 | axis_canon | AX-PROCESS | fn_pa_handler_register_axis | register_axis |
| PROC-OWN-03 | process_registration | PROC-CAND:job:cut | fn_pa_handler_register_process | assign_governance_owner |
| PROC-OWN-04 | process_family_registration | PROC-CAND:dot:kg | fn_pa_handler_assign_governance_owner | assign_governance_owner |
| PROC-OWN-05 | event_activation | process.* | fn_pa_handler_activate_event_type | activate_event_type |
Guarded execution order: 01 → 02 → 03 → 05 → 04
| exec_order | code | depends_on | gate_status | side effect (after canon) |
|---|---|---|---|---|
| 1 | PROC-OWN-01 | — | BLOCKED_NO_PRESIDENT_VOTE | INSERT ownership(axis:AX-PROCESS) |
| 2 | PROC-OWN-02 | PROC-OWN-01 | BLOCKED_NO_PRESIDENT_VOTE | UPDATE axis_registry SET status=ACTIVE, approval_ref=PROC-OWN-02 |
| 3 | PROC-OWN-03 | PROC-OWN-02 | BLOCKED_NO_PRESIDENT_VOTE | INSERT axis_assignment(AX-PROCESS, job:cut) → official RP 0→1 |
| 4 | PROC-OWN-05 | PROC-OWN-02 | BLOCKED_NO_PRESIDENT_VOTE | UPDATE event_type_registry SET active=true (7 rows) |
| 5 | PROC-OWN-04 | PROC-OWN-01 | BLOCKED_NO_PRESIDENT_VOTE | INSERT ownership(dot:kg) + authorize 10-process split post REAL_RUN |
Why 04 is last (and different)
PROC-OWN-04 authorizes the dot:kg family 10-process definition split, which only materializes post-REAL_RUN. It is the largest irreversible birth and depends only on the axis owner (01), not on canon (02). It is deliberately sequenced after the reversible-first chain (01→02→03→05) so official-RP increments stay minimal and each earlier step is independently reversible before the big split is authorized. 03 registers the first official process (job:cut, RP 0→1) under the canon'd axis; 05 (event activation) needs only canon (02), so it slots before 04.
Side-effect preview + rollback (per request)
| code | target | write_effect_after_canon | rollback_step |
|---|---|---|---|
| 01 | governance_object_ownership | INSERT ownership(axis:AX-PROCESS) | DELETE ownership row |
| 02 | axis_registry | UPDATE status=ACTIVE | UPDATE status=CANDIDATE |
| 03 | axis_assignment | INSERT (AX-PROCESS, job:cut) | DELETE row (RP 1→0) |
| 04 | governance_object_ownership | INSERT ownership(dot:kg) + split | DELETE ownership + revoke split |
| 05 | event_type_registry | UPDATE active=true (7) | UPDATE active=false (7) |
No-go guard (v_rp_proc_own_no_go_guard) — all hold
- all_5_blocked_no_president_vote — true
- zero_president_votes_on_proc_own — true (0)
- zero_axis_owner — true (no AX-PROCESS owner)
- official_rp_zero — true
- ai_agent_handler_blocked — true (
fn_pa_domain_handler(...,'ai_agent',false)→ phase BLOCKED)
Fail-closed proof
Every handler preview returns phase=BLOCKED, blocker = "actor_type=ai_agent cannot satisfy president authority (human-only)". fn_pa_post_vote_dryrun() is annotated "HYPOTHETICAL / READ-ONLY: this function writes nothing" and even after authority, "each step is still a deliberate canon action; no handler auto-writes." Do not approve. Action-ready only.