KB-4906
Branch A — IU Design-vs-Live Gap Matrix (2026-05-29)
8 min read Revision 1
iudesign-vs-livegap-matrixbranch-a2026-05-29
Branch A — IU Design-vs-Live Gap Matrix
Doc 01 (2026-05-29)
Design sources: iu-mow-mot-event-foundation-design.md, iu-mow-mot-event-foundation-requirements.md, v0.6-iu-4mothers-event-foundation-rev2/ (00/03/04/10). Live evidence: iu-a-to-f-automated-evidence-and-demo-pack-2026-05-29/, d/e/f governed suite, production-hardening, day1 rehearsal, plus this session's live introspection (context_pack_readonly).
Reading: LIVE = design requirement met & proven live. PARTIAL = met with a stated limit. GAP = required behaviour missing. BUG = built but mis-wired. DEFERRED = intentionally out of pilot scope. DOC-STALE = live ahead of design text.
| # | Capability | Design requirement (source) | Live function / table / DOT | Evidence | Status | Risk | Required fix | Prio |
|---|---|---|---|---|---|---|---|---|
| A1 | Cut | Cut mechanics owned by Đ38/39; cut pipeline emits cut.* events (REV2-03 §1, §3.2) |
fn_iu_cut_from_manifest (G1–G7 guards) + fn_cut_* pipeline (10 fns); DOTs dot_iu_cut_from_manifest, dot_iu_operator_cut_staging, dot_iu_mark_article |
A-pack 01 | PARTIAL | Med | Add raw-text→auto-segment→manifest path (today manual/upstream) | P2 |
| A2 | Reconstruct | Design names only fn_iu_post_cut_axis_materialize (post-CUT rebuild); a discrete source-reconstruct op is not in design text |
fn_iu_reconstruct_source(doc_code) STABLE; no DOT wrapper |
A-pack 01: DIEU-37 17 pieces digest 33e5a1a3…, DIEU-35 36 pieces b079d615…, 0 gaps |
LIVE / DOC-STALE | Low | Document in design; add dot_iu_reconstruct_source |
P2 |
| A3 | Post-cut axis materialize (G2) | "fn_iu_post_cut_axis_materialize KEEP + AUTOWIRE into fn_cut_complete or subscriber — Phase-0 gap" (DESIGN §12; REV2-00 G2) |
Function exists; DOT iu.post_cut.axis_materialize exists (mutating). Live check: fn_cut_complete exists but cut_fns_calling_materialize=0 |
This session live introspection | BUG / GAP (OPEN) | High | Wire materialize into fn_cut_complete (or an event subscriber on cut.completed); add Tier-A verify |
P0 |
| A4 | Domain axis (B) | Source A / Domain B / Tree C reused, never redefined (REQ §8; Đ38/39) | fn_iu_filter_axis_b; DOT dot_iu_filter_axis_b |
A-pack 02: legal_domain:knowledge_systems→16, consistent=true |
LIVE | Low | — | — |
| A5 | Tree axis (C) | parent→child→grandchild, reuse fn_iu_subtree |
fn_iu_filter_axis_c_subtree→fn_iu_subtree; DOT dot_iu_subtree |
A-pack 03: root→8 nodes, 0 orphan, 0 cycle | LIVE | Low | — | — |
| A6 | Compose | reuse; never re-implement (DESIGN §3) | fn_iu_compose; DOT dot_iu_create_file_from_pieces / dot_iu_create_workflow_from_steps |
A-pack 04 D3 (4 attached, 3 minted) | LIVE | Low | — | — |
| A7 | Add / Remove / Reorder | reuse compose ops (REQ §8) | fn_iu_collection_add/remove/reorder_piece; DOTs present |
A-pack 04 D4–D6 | LIVE | Low | — | — |
| A8 | Split / Merge | "PARTIAL_WITH_EXACT_GAP — needs review_decision_id" (REQ §1, G1) |
fn_iu_piece_split / fn_iu_piece_merge (additive, require review_decision_id); DOTs dot_iu_split_piece / dot_iu_merge_piece |
A-pack 04 D7/D8; d/e/f §5 rd_bound=true |
LIVE / DOC-STALE (G1 closed live) | Low | Update design to mark G1 closed | P3 |
| A9 | Render | every body render emits iu.rendered (REV2-04 §2.3) |
fn_iu_collection_render; DOT dot_iu_render_file |
A-pack 04 D9 | LIVE | Low | Confirm iu.rendered emission wired (delivery gate off in pilot) |
P3 |
| A10 | Trigger OUT (emit) | precondition/postcondition DSL; referenced events must exist in event_type_registry (REV2-04 §3.3) |
fn_iu_emit_event / fn_iu_piece_emit_event (gate piece_event_runtime.emit_enabled) / fn_iu_route_worker_run; no DOT |
A-pack 05 E3–E5 (refs-only, dry_run) | LIVE (DOT gap) | Med | Add dot_iu_emit + Tier-A |
P1 |
| A11 | Trigger IN (capture) | trigger-in config in registry, not hardcoded (REQ §5.3) | trg_iu_sql_in_iu_sql_link→fn_iu_sql_link_inbound_capture; no DOT |
d/e/f F.3b live capture | LIVE (DOT gap) | Low | Add dot_iu_capture_* health view |
P2 |
| A12 | DLQ / Replay | dlq_replay_request ledger; replay never bypasses Đ32; emits dlq_replay.* (REV2-03 §6.2) |
fn_iu_route_dead_letter_replay (gated by master routes gate); no DOT |
A-pack 05 E6; prod-hardening 5B (durable) | LIVE (DOT gap) | Med | Add dot_iu_dlq_replay + Tier-A; honor queue.dlq.replay_enabled |
P1 |
| A13 | SQL link | bind IU↔SQL view/function, reuse iu_sql_link |
fn_iu_sql_link_resolve_all / _validate; DOTs dot_iu_sql_link_resolve / _validate |
A-pack 06: 3 links, view==direct | LIVE | Low | — | — |
| A14 | KG / IU relation | provenance-or-quarantine (Đ39 A8); KG proposes only, never auto-mutates registry | iu_relation(60, 60/60 provenance) + universal_edges(2199) → v_kg_edges_all(2259); read DOT dot_iu_kg_edge_audit; edge-write has no DOT |
day1 §5; this session count=2259 | LIVE (write-DOT gap) | Med | Add dot_iu_relation_assert (ABox) honoring kg_auto_approve_rules |
P1 |
| A15 | Audit | every transition logged; trace_id mandatory (Đ31; REV2-03 §5) | dot_iu_command_run(55), iu_lifecycle_log, fn_dot_iu_command_log (fail-closed) |
bcf §3/§6 | LIVE | Low | — | — |
| A16 | Rollback / reversibility | reversible by default; soft-delete only (Đ30/36) | BEGIN..ROLLBACK method; fn_iu_retire/supersede (soft); DOTs present |
prod-hardening 5A (3 retired) | LIVE | Low | — | — |
| A17 | Gate protocol | dot_config gates respected; design assumes vector off (REV2-00 §141) |
fn_iu_gate_open/close/verify_closed/watchdog (fail-closed) |
Gate0 all_safe=true | LIVE | Low | — | — |
| A18 | Vector boundary | 1 IU = ≥1 Qdrant point, no mix; reindex via DOT command (DESIGN §14; REQ §4 #12) | iu_vector_sync_point/iu_qdrant_collection_registry; fn_iu_vector_sync_record_v2 (CHECK-backed per-IU); reindex via CLI, no DOT |
Doc 02 | PARTIAL | Med | DOT-ify reindex; PG↔Qdrant reconcile; see Doc 02 | P1 |
| A19 | Pilot ↔ full-production boundary | Phase 0..7 + G1..G7 + 3 surveys + IU-substrate Gate A (REV2-10 §10.3) | Live verdict = LIMITED-PRODUCTION-PILOT READY | prod-hardening 8 | LIVE (aligned) | Low | Carry forward P-pub block + prod review_decision authoring | P2 |
| A20 | Đ35 DOT registry integration | NT3: everything via registered DOT; dot_tools is single SSOT; Tier-A paired_dot (Đ35 §3) |
53 IU DOTs in dot_iu_command_catalog; dot_tools has 309 rows, only 2 IU; no paired Tier-A |
this session | GAP | Med | Register IU DOTs in dot_tools (or formally ratify the IU catalog as a recognised sub-registry) + add Tier-A checks |
P1 |
Summary
- Live machinery is ahead of the design documents on most IU capabilities (reconstruct, split/merge gate, DOT catalog). The design docs (DRAFT 2026-05-27) lag the 2026-05-28/29 live state.
- One genuine open bug: A3 — post-cut axis materialize is not auto-wired (P0). This is the single clearest design-vs-live defect.
- Doc-stale items (A2 reconstruct naming, A8 G1 closed) should be reconciled into the design text so the design stops under-claiming live capability.
- DOT-coverage and Đ35-integration gaps (A10–A14, A20) are the systematic theme handled in Doc 03.