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_unithasid uuid, uniquecanonical_address,parent_or_container_ref uuid,sort_order,identity_profile jsonb,deleted_at— verified live. - F2.
unit_versionhasid 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_edgesuses integer source_id/target_id — cannot address IU uuid rows. - F5.
event_outboxexists with a partial unique index on(event_domain,event_type,event_subject_table,event_subject_ref)fordelivery_lane='immediate';event_type_registryhas no IU event types. - F6.
cutter_governancechange-set/affected-row/review/verify tables exist. - F7. Database event triggers
evt_trigger_guard_ddl/_droppolice 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_registryin the same package as a DML candidate, or a separate DOT seed macro? (DDL brief OD#6) - R2. First controlled trigger target:
event_pendingvsevent_outbox? (DDL brief OD#4) —iu_route_attemptis 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/retiredor reuse existing statuses? (parent-child brief OD#4) - R5. Should
iu_tree_pathstay 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
containsbe duplicated intoiu_relationor stay only inparent_or_container_ref? Authored:iu_relation.containsis 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.