Branch C — IU DOT Operational Completeness Matrix (2026-05-29)
Branch C — IU DOT Operational Completeness
Doc 03 (2026-05-29)
Goal of the IU-as-smart-brick program: an agent should perform every repeated IU operation by calling one DOT command — never bespoke SQL, code, or paste-work (GPT-DIR workstream 2; NT3).
Verdict: PARTIAL. ~15 of 22 repeated operations have a dot_iu_* wrapper (≈68% operation coverage). Eight operations still require bare function calls. Separately, the 53-row IU DOT catalog is a parallel registry not integrated with the constitutional dot_tools SSOT and lacks Đ35 Tier-A paired checks (low governance integration).
1. Catalog shape (live)
dot_iu_command_catalog (53 rows): columns command_name, category{collection,piece,lifecycle,read,health}, mutating bool, reversible bool, target_functions text[]. Every invocation writes a dot_iu_command_run audit row via fail-closed fn_dot_iu_command_log. This is NOT the dot_tools table (309 rows, only 2 IU-related) that Đ35 §3 names as the single DOT SSOT, and it carries no paired_dot Tier-A field.
2. Operation-by-operation matrix
| Operation | Live fn? | DOT command? | Mutating flag correct? | Gate? | Rollback path | One-command-safe? | Status |
|---|---|---|---|---|---|---|---|
| create / write IU | fn_iu_create |
dot_iu_create_piece / dot_iu_clone_piece |
✓ mutating | birth-gate (warn) | retire/supersede | ✓ | LIVE |
| create piece | fn_iu_create |
dot_iu_create_piece |
✓ | — | retire | ✓ | LIVE |
| edit piece metadata | fn_iu_metadata_refresh |
dot_iu_update_piece_metadata |
✓ | — | version | ✓ | LIVE |
| edit piece body | (new version via fn_iu_create/supersede) |
— (no discrete "edit body" DOT) | n/a | — | supersede | ✗ | PARTIAL |
| add piece to document | fn_iu_collection_add_piece |
dot_iu_add_piece |
✓ | structure_ops | remove | ✓ | LIVE |
| remove piece | fn_iu_collection_remove_piece |
dot_iu_remove_piece |
✓ (soft) | structure_ops | re-add | ✓ | LIVE |
| reorder piece | fn_iu_collection_reorder_piece |
dot_iu_reorder_piece |
✓ | structure_ops | reorder | ✓ | LIVE |
| split piece | fn_iu_piece_split |
dot_iu_split_piece |
✓ (additive) | review_decision_id | source untouched | ✓ | LIVE |
| merge pieces | fn_iu_piece_merge |
dot_iu_merge_piece |
✓ (additive) | review_decision_id | sources untouched | ✓ | LIVE |
| render | fn_iu_collection_render |
dot_iu_render_file |
✓ (read) | — | n/a | ✓ | LIVE |
| reconstruct source | fn_iu_reconstruct_source |
— none | n/a | — | n/a (read) | ✗ | GAP |
| filter axis B | fn_iu_filter_axis_b |
dot_iu_filter_axis_b |
✓ (read) | — | n/a | ✓ | LIVE |
| filter axis C | fn_iu_filter_axis_c_subtree |
dot_iu_subtree |
✓ (read) | — | n/a | ✓ | LIVE |
| validate SQL link | fn_iu_sql_link_validate(_all) |
dot_iu_sql_link_validate |
✓ (read) | — | n/a | ✓ | LIVE |
| resolve SQL link | fn_iu_sql_link_resolve_all |
dot_iu_sql_link_resolve |
✓ (read) | — | n/a | ✓ | LIVE |
| emit trigger out | fn_iu_emit_event / fn_iu_piece_emit_event |
— none | — | emit_enabled | deprecate event | ✗ | GAP |
| capture trigger in | fn_iu_sql_link_inbound_capture (trigger) |
— none (auto via trigger) | — | — | n/a | partial-auto | GAP (DOT) |
| route worker run | fn_iu_route_worker_run |
— none | — | routes master | n/a | ✗ | GAP |
| DLQ replay | fn_iu_route_dead_letter_replay |
— none | — | routes master | resolve | ✗ | GAP |
| create/update IU relation | (iu_relation writes) | — none (read-only dot_iu_kg_edge_audit exists) |
— | — | delete edge | ✗ | GAP |
| KG edge audit | fn_iu_kg_edge_audit |
dot_iu_kg_edge_audit |
✓ (read) | — | n/a | ✓ | LIVE |
| retire / supersede | fn_iu_retire / fn_iu_supersede |
dot_iu_retire_piece / dot_iu_supersede_piece |
✓ | — | restore | ✓ | LIVE |
| enact | fn_iu_enact |
— none | — | never-flip no-rd=false | supersede | ✗ | GAP |
| vector reindex/sync | fn_iu_vector_sync_record_v2 / qdrant_register |
— none | — | vector_sync_enabled | retire collection | ✗ | GAP (see Doc 02) |
| health check | fn_iu_collection_healthcheck / fn_phase0_cockpit |
dot_iu_healthcheck |
✓ (read) | — | n/a | ✓ | LIVE |
| gate open/close/verify | fn_iu_gate_* |
dot_iu_gate_open/close/verify_closed/watchdog |
✓ | — | inverse | ✓ | LIVE |
| post-cut axis materialize | fn_iu_post_cut_axis_materialize |
iu.post_cut.axis_materialize |
✓ | — | rematerialize | ✓ (but not autowired — Doc 01 A3) | LIVE (mis-wired) |
3. DOT completeness score
- Operation coverage: 15 LIVE / 22 audited core ops ≈ 68%. (Plus collection/staging/template families fully covered: ~38 of 53 catalog rows.)
- Missing DOT wrappers (8): reconstruct, emit, capture(in), route-worker, DLQ-replay, IU-relation-write, enact, vector-reindex. Plus 1 PARTIAL (edit-body).
- Đ35 governance integration: LOW — IU DOTs are not in
dot_tools; no Tier-Apaired_dot(NT12 / Đ35 §3). Themutating/reversibleflags are a lighter-weight model than Đ35's 11 mandatory fields.
4. Next implementation pack (DOT layer)
Pack DOT-IU-1 — close operation gaps (Tier-B + paired Tier-A):
dot_iu_reconstruct_source(read) + verify-digest Tier-A → wrapsfn_iu_reconstruct_source.dot_iu_emit(mutating, gateemit_enabled) +dot_iu_emit_verifyTier-A →fn_iu_emit_event/fn_iu_piece_emit_event.dot_iu_dlq_replay(mutating, gate routes +queue.dlq.replay_enabled) +dot_iu_dlq_inspectTier-A →fn_iu_route_dead_letter_replay.dot_iu_route_worker_run(mutating, gate routes) +dot_iu_route_statusTier-A →fn_iu_route_worker_run.dot_iu_relation_assert(mutating, ABox; honorskg_auto_approve_rules, provenance-or-quarantine Đ39) + reusedot_iu_kg_edge_auditas Tier-A.dot_iu_enact(mutating, requires review_decision_id; never bypassiu_enact.allow_no_review_decision) +dot_iu_enact_precheckTier-A →fn_iu_enact.dot_iu_capture_status(read Tier-A over inbound-capture trigger results).dot_iu_vector_reindex+dot_iu_vector_verify(Doc 02 P1).
Pack DOT-IU-2 — Đ35 integration: register all IU DOTs (existing 53 + new) into the constitutional dot_tools SSOT with the 11 mandatory fields and paired_dot links — OR formally ratify dot_iu_command_catalog as a recognised Đ35 sub-registry via APR, with a reconcile DOT proving every Tier-B has a Tier-A companion (trg_dot_enforce_paired analogue). Decision belongs to Council.
All new DOTs follow the proven additive/reversible pattern (dress-rehearse BEGIN..ROLLBACK → author rollback → COMMIT small → verify in fresh connection). No gate flips required to register catalog rows.