Branch E — DOT Action Map
Branch E — DOT Action Map
Every UI action → exactly one DOT. No UI action writes raw SQL or Directus items to design columns. DOT_SPEC_ONLY = specified in Phase 1 doc 03 / v1 but not yet registered in dot_iu_command_catalog (catalog currently 54; the 6 read dot_mow_design_* were rehearsed GREEN but rolled back). Read DOTs registerable post-EXTEND; mutating DOTs deferred behind fn implementation + approval.
Legend: R/M read|mutate · Gate required gate · Appr approval needed · payload→response · UI-after.
1. Navigation / read actions (canvas)
| UI action | DOT | R/M | Gate | Appr | Payload → Response | UI after success / fail |
|---|---|---|---|---|---|---|
| Load tier | dot_mow_canvas_get_nodes |
R | none | no | {tier,parent_id,filters,page} → CanvasNode[] (child_preview≤3, rollup traffic_light) |
render grid / error banner+retry · DOT_SPEC_ONLY (new canvas read DOT) |
| Get context | dot_mow_canvas_get_context |
R | none | no | {node_id} → CanvasContext |
set breadcrumb+tabs / banner · DOT_SPEC_ONLY |
| Drill down | dot_mow_canvas_drill_down |
R | none | no | {from_node_id,from_tier} → {context, nodes[]} |
descend one tier / banner · DOT_SPEC_ONLY |
| Open task card | dot_mot_get_task_card |
R | none | no | {task_type_id,instance_id?} → TaskCardData (MOIT/MOUT/guide) |
open Surface 2 / banner · DOT_SPEC_ONLY |
| Open design | dot_mow_design_get |
R | none | no | {workflow_id} → header+steps |
open Surface 3 · registerable P1 |
| List designs | dot_mow_design_list |
R | none | no | {filters} → v_mow_design_workflow rows |
render list · registerable P1 |
| Render tree | dot_mow_design_render_tree |
R | none | no | {workflow_id} → DAG (steps+relations+condition refs) |
draw Standard Process View · registerable P1 |
| Audit health | dot_mow_design_audit |
R | none | no | {workflow_id,range} → change history |
history panel · registerable P1 |
| Validate design | dot_mow_design_validate |
R | none | no | {workflow_id} → findings (doc-06 checks) |
🟢/🟡/🔴 badge + findings · registerable P1 |
| Health rollup | dot_mow_design_health |
R | none | no | {workflow_id?} → health JSON |
traffic-light + Control-Tower metrics · registerable P1 |
| View gate | dot_iu_gate_verify_closed |
R | none | no | {} → gate JSON (all_safe…) |
cockpit gate light · live |
2. Proposal / Kaizen actions
| UI action | DOT | R/M | Gate | Appr | Payload → Response | UI after |
|---|---|---|---|---|---|---|
| Propose change ("Đề xuất cải tiến") | dot_mow_design_propose_change |
M | none (queue insert) | no (draft) | {workflow_id, target_node_id, target_tier, change_type:add|edit|delete|reorder, proposed_data{title,order_index,parent_id}, reason, iu_ref} → {proposal_id, status:draft} |
inline "✓ Đã gửi" + proposal_count++ / toast error · may reuse workflow_change_requests; registerable as mutating |
| Add step | dot_mow_design_propose_change (change_type=add/add_step) → on approval applied by activate |
M | structure_ops (on apply) | council on activate | add-step proposal | proposal queued / error · structural-apply DOT DOT_SPEC_ONLY |
| Remove step | dot_mow_design_propose_change (change_type=delete) |
M | structure_ops (on apply) | council | delete proposal + warn-box impact count |
queued / error · DOT_SPEC_ONLY apply |
| Reorder step | dot_mow_design_propose_change (change_type=reorder) |
M | structure_ops (on apply) | council | {order_index} change |
queued / error · DOT_SPEC_ONLY (reorder not built in prototype) |
add/remove/reorder are proposals first (never direct mutation). The structural apply (after approval) is a deferred mutating DOT family; flagged
DOT_SPEC_ONLYuntil fn + approval exist.
3. Binding actions (designer, MOW owner)
| UI action | DOT | R/M | Gate | Appr | Payload → Response | UI after |
|---|---|---|---|---|---|---|
| Bind design IU | dot_mow_design_bind_iu |
M | structure_ops (design) | no | {workflow_id, design_iu_ref} → set |
header IU chip resolves / error · deferred-mutating |
| Bind step IU | dot_mow_design_bind_step_iu |
M | structure_ops | no | {step_id, step_iu_ref, guide_iu_ref?} → set |
step 🟡→🟢 / error · deferred-mutating |
| Bind DOT | dot_mow_design_bind_dot |
M | structure_ops | no | {step_id, dot_ref} → set |
dot chip resolves / error · deferred-mutating |
| Bind event | dot_mow_design_bind_event |
M | structure_ops | no | {step_id, event_domain, event_type} → set composite |
event chip resolves / error · deferred-mutating |
All binds are idempotent set-to-value (re-run = no-op); reversible (re-bind prior/NULL).
4. Freeze / lifecycle (MOW owner + council)
| UI action | DOT | R/M | Gate | Appr | Payload → Response | UI after |
|---|---|---|---|---|---|---|
| Freeze workflow | dot_mow_design_freeze |
M | structure_ops | no (owner) | {workflow_id, reason, by} → freeze_active=true |
banner "frozen", mutate buttons disabled / error · deferred-mutating |
| Unfreeze workflow | dot_mow_design_unfreeze |
M | structure_ops | no (owner) | {workflow_id, by} → clear |
banner cleared / error · deferred-mutating |
| Activate design | dot_mow_design_activate |
M | structure_ops + approval | GOV-COUNCIL ≥2 | {workflow_id, version, apr_id} → bump active_design_version, flip status |
version chip bumps, audit row / disabled+explained for non-council · deferred-mutating |
| Rollback design | dot_mow_design_rollback |
M | structure_ops + approval | GOV-COUNCIL ≥2 | {workflow_id, to_version, apr_id} → forward-only version-pin |
version pinned, freeze optional / error · deferred-mutating |
| Approve / Reject proposal | (NOT a DOT) writes apr_approvals |
M | — | human/council only | decision row | proposal advances / backend rejects agent decision (Điều 32) |
5. Catalog readiness snapshot
- Registerable now (post-EXTEND, read subset):
dot_mow_design_list/get/health/validate/render_tree/audit— rehearsed GREEN (54→60→54). - DOT_SPEC_ONLY (new canvas read DOTs, need fns):
dot_mow_canvas_get_nodes/get_context/drill_down,dot_mot_get_task_card. - Deferred-mutating (need fn + approval):
dot_mow_design_bind_iu/bind_step_iu/bind_dot/bind_event/freeze/unfreeze/propose_change/activate/rollback(+ structural add/remove/reorder apply).
6. DOT action map verdict
Complete. All 14 campaign-listed actions (propose/add/remove/reorder/bind-IU/bind-DOT/bind-event/freeze/unfreeze/validate/activate/rollback/render/audit) plus 4 canvas-nav reads are mapped with R/M, gate, approval, payload, response, and UI-after-success/fail. Unbuilt/unregistered DOTs explicitly flagged DOT_SPEC_ONLY. No DOT executes runtime; activation/rollback are council-owned + approval-gated; agent is forbidden to self-approve.