KB-7A3D

IU Core MVP — 03 Architecture Lock + Gap Matrix

4 min read Revision 1
dieu44iu-core-mvparchitecture-lockgap-matrixneeds-rulingv0.62026-05-21

IU Core MVP — 03 Architecture Lock + Gap Matrix

Date: 2026-05-21 · FACT = proven by schema/repo/report · PROPOSAL = authored safely, needs approval before production DDL · NEEDS_RULING = unresolved.

FACT (proven)

  • F1. information_unit has id uuid, unique canonical_address, parent_or_container_ref uuid, sort_order, identity_profile jsonb, deleted_at — verified live.
  • F2. unit_version has id uuid, unit_id, content_hash, version_seq, unique (unit_id, version_seq), content_profile jsonb — verified live.
  • F3. No iu_sql_link / route / relation / tree / operation table exists — IU-core surface is greenfield.
  • F4. universal_edges uses integer source_id/target_id — cannot address IU uuid rows.
  • F5. event_outbox exists with a partial unique index on (event_domain,event_type,event_subject_table,event_subject_ref) for delivery_lane='immediate'; event_type_registry has no IU event types.
  • F6. cutter_governance change-set/affected-row/review/verify tables exist.
  • F7. Database event triggers evt_trigger_guard_ddl/_drop police trigger DDL.
  • F8. Repo has no migration framework; sql/lifecycle/ is operator-runbook.

PROPOSAL (authored this macro, NOT approved for production)

# Decision Resolution taken Rationale
P1 Reuse vs supplement parent_or_container_ref Reuse as primary adjacency; add iu_tree_path sidecar + v_iu_tree view Brief §G1; no ALTER on information_unit
P2 universal_edges vs dedicated lineage Dedicated iu_relation (uuid-capable) F4 — integer keys cannot carry IU uuids
P3 Route tables: new vs existing event tables New iu_sql_event_route + iu_outbound_route; reuse event_outbox for movement DDL brief §G1.2–1.3
P4 Structure ops → existing cut_change_set? New iu_structure_operation; execution macros route enactment through cutter_governance.cut_change_set Keep authoring additive; reuse governance at enact time
P5 Delivery audit: ALTER event_pending vs new table New iu_route_attempt Avoids ALTER on a live table (acceptance checklist) — resolves DDL-brief Open Decision #1
P6 Table namespace / layout public schema; sql/iu-core/NNN_*.sql + rollback/ DDL brief Open Decision #3 default; Directus visibility
P7 MVP now vs deferred NOW: all 7 tables + functions authored. DEFERRED: trigger attachment, event-type DML seed, route enabling, iu_tree_path population Briefs' staged rollout
P8 iu_tree_path table vs view BOTH: iu_tree_path table (durable, populated later) + v_iu_tree view (usable immediately) Parent-child brief Open Decision #1 — view gives immediate value, table is the durable cache

NEEDS_RULING (carry to GPT/User before sandbox/execution)

  • R1. Should IU event types be seeded into event_type_registry in the same package as a DML candidate, or a separate DOT seed macro? (DDL brief OD#6)
  • R2. First controlled trigger target: event_pending vs event_outbox? (DDL brief OD#4) — iu_route_attempt is used as the interim audit sink.
  • R3. First harmless source table for the sandbox controlled trigger. (DDL brief OD#7)
  • R4. Lifecycle vocabulary for replaced/superseded IUs: add superseded / retired or reuse existing statuses? (parent-child brief OD#4)
  • R5. Should iu_tree_path stay a physical table or become a materialized view? Authored as a table; ruling can downgrade it. (parent-child OD#1)
  • R6. Max containment depth — config key, or unbounded? (parent-child OD#7)
  • R7. Should contains be duplicated into iu_relation or stay only in parent_or_container_ref? Authored: iu_relation.contains is the lineage record; adjacency pointer stays primary. (parent-child OD#2)

Lock statement

The 7-table additive sidecar architecture is locked for authoring. No PROPOSAL is treated as approved. R1–R7 must be ruled before the sandbox macro.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-iu-core-mvp-pg-native-parent-child-structure-ops-authoring/03-architecture-lock-gap-matrix.md