KB-1B99

03 — IU Object Relationship & Điều 39 KG Enrichment Readiness/Design Pack (2026-05-28)

8 min read Revision 1
iukgdieu39universal-edgesiu-relationrelationship-enrichmentprovenanceconfidencedesign-packno-hidden-graph-sot2026-05-28

Doc 03 — Branch D: IU Object Relationship & Điều 39 KG Enrichment Readiness/Design Pack

Verdict: DESIGN/READINESS PACK (paper-only). A generic, Điều-39-shaped edge table already exists (universal_edges) but it is integer-keyed and does NOT contain IU. IU relationships live in dedicated uuid-keyed tables. Recommendation: enrich IU-native edges in place + a governed read-only projection — NO hidden second graph SoT, vector stays disabled.


1. Existing IU relationship substrate (live, 2026-05-28)

Table Keying Rows Role Đ39 enrichment present?
iu_relation uuid (source_unit_id/target_unit_id), version-pinned 60 (contains/active) typed lineage edges: contains/derived_from/supersedes/replaced_by/merged_from/split_from temporal (valid_from/to) + metadata jsonb; no explicit provenance/confidence/inferred columns
iu_sql_link uuid IU ↔ SQL/Directus object 3 (all enabled=false) IU→object link; validate/resolve fingerprint, status; no confidence
iu_tree_path uuid materialised containment 199 axis-C path rebuildable from parent_or_container_ref
iu_metadata_tag uuid IU ↔ classifier tag 536 axis-B domain tags enrichment_source (derived/confirmed vs inferred/proposed)
iu_split_set / iu_merge_set uuid 1 / 0 structure-op grouping review_decision-bound
event/trigger ETR 31, outbox 150,114, DLQ 0 emission/capture gated by emit_enabled
lifecycle iu_lifecycle_log on retire/supersede Đ30/31
review_decision governing approval token (Đ32) manifest-bound

Key structural fact: information_unit.id is uuid.

2. The generic system edge table — universal_edges (CAT-130)

  • 2,199 rows, governance_infra, layer 4. Comment: "Quan hệ toàn hệ thống — xuyên lớp composition, mirror FK + semantic edges."
  • Edge types in use: USES (1,486), BELONGS_TO (431), CONTAINS (282).
  • Source/target collections: taxonomy, dot_tools, trigger_registry, checkpoint_*, collection_registry, workflows, tasks, task_comments, ui_pages, agents, … — information_unit is NOT present.
  • Keying: source_id/target_id are integer + source_collection/target_collection varchar.
  • Đ39 enrichment columns already present (25 cols): edge_type, edge_subtype, weight numeric, confidence numeric, valid_from/valid_to/valid_time tstzrange (temporal), provenance jsonb, metadata jsonb, symmetry_group_id uuid (inverse/symmetric pairs), source/target_composition_level, is_auto_managed, _dot_origin, status, source_info.

2.1 The compatibility gap (central finding)

universal_edges is the system's integer-keyed graph SoT for legacy collections; IU is uuid-keyed and absent. Forcing IU into universal_edges would require an integer surrogate per IU → a fragile, drift-prone mapping and a second identity space. This is the exact "hidden second graph SoT" the macro forbids if done covertly. Therefore IU relationships must remain in their uuid-native tables; any unified graph view must be an explicit, governed projection, not a copy.

3. Standard object relation pairs — coverage map

The system's canonical relation vocabulary (information-atom-law: IDENTITY, BELONGS_TO, CONTAINS, DEPENDS_ON, USED_BY, TRANSITIVE, PEERS, SIMILAR) maps to the requested pairs:

Requested pair IU-native today universal_edges Gap for IU
belongs_to / contains iu_relation.contains (60); iu_tree_path; membership BELONGS_TO/CONTAINS inverse belongs_to not materialised on IU
uses / used_by USES (1,486) not modelled for IU
depends_on / dependency_of (entity_dependencies) not modelled for IU
parent_of / child_of parent_or_container_ref + tree_path CONTAINS present (containment)
produced_by / produces event/operation_ref lineage partial (operation_ref)
triggers / triggered_by event routes / trigger seam trigger_registry edges partial
references / referenced_by iu_sql_link (IU→object) object-only, no IU↔IU reference
similar_to — (vector OFF) SIMILAR (atom-law) blocked by vector_sync_enabled=false
conflicts_with not modelled
supersedes / superseded_by iu_relation (defined, unpopulated) type defined, 0 rows

4. Điều 39 enrichment fields — required vs present

Điều 39 KG Law is ENACTED v2.3 (+v2.1 amendment): A8 every edge links back to source (W3C PROV-O); edge without provenance = quarantine; C7 explainability (explanation_path); C8 ACL/graph-projection; negative knowledge; override; temporal; confidence ranges in PG config kg_constraint_config (not hardcoded); soft constraints 3 levels.

Đ39 field universal_edges iu_relation IU enrichment action
provenance provenance jsonb ❌ (only metadata) add provenance jsonb (or namespaced metadata) — required by A8 or IU edges quarantine
confidence confidence add confidence numeric
temporal validity valid_time valid_from/to OK (consider tstzrange parity)
evidence source ✅ (provenance) via provenance
inferred vs asserted partial (is_auto_managed) add assertion_mode ∈ {asserted,inferred}
negative knowledge model as relation_type or negation flag (paper)
override override_of ref + reason (paper)
explanation (XAI) explanation_path jsonb (paper)
feedback / learning RLKGF feedback link (paper)

5. PG-first storage recommendation

  1. Keep IU relationships in uuid-native tables (iu_relation, iu_sql_link, iu_tree_path, iu_metadata_tag). Do not migrate IU into integer universal_edges.
  2. Enrich iu_relation in place with the Đ39 fields (additive columns or a disciplined metadata/provenance jsonb contract). A8 compliance (provenance-or-quarantine) is the first must-have.
  3. Unified graph = explicit governed projection. If a system-wide view over IU + legacy edges is needed, build a read-only VIEW/materialized projection that UNIONs universal_edges with an IU-edge adapter (uuid-keyed), tagged by origin. The projection is derived, never authoritative — no write-back, no second identity space. This satisfies "no hidden second graph SoT."
  4. No generic IU edge table needed yetiu_relation already is the IU edge table; broaden its relation_type vocabulary (add uses/used_by, depends_on, references, conflicts_with) rather than create a new table.
  5. Qdrant/vector stays governed-disabled (iu_core.vector_sync_enabled=false, never_flip). similar_to edges remain blocked until policy permits — Đ39 SIMILAR is paper for IU.
  6. Confidence/constraint thresholds live in kg_constraint_config (Đ39 C4), not hardcoded.

6. How 4 Mothers will use this (forward map)

Mother Relations consumed
MOW (workflow) workflow/task/IU contains, belongs_to, triggers/triggered_by
MOT (task) assigned, used_by, depends_on/dependency_of
MOIT / MOUT (input/output) input/output contract references, produces/produced_by
Governance Cockpit depends_on impact graph + dependency/impact projection

These all read the projection (or IU-native tables directly); none requires moving IU into universal_edges.

7. Outcome

  • Applied this run: nothing (paper-only; no schema change, no edge write).
  • Deliverable: substrate inventory + gap map + PG-first recommendation + Đ39 enrichment plan + 4-Mothers forward map.
  • Next macro: IU_KG_RELATIONSHIP_ENRICHMENT_READINESS_AND_DESIGN_PATCH_*X (doc 06, macro 3).
Back to Knowledge Hub knowledge/dev/reports/architecture/iu-limited-production-promotion-kg-relationship-and-4mothers-gate-authority-2026-05-28/03-iu-kg-relationship-enrichment-readiness.md