IU Core Process-Brick Readiness and Gap Survey (document-only, 2026-05-28)
IU Core Process-Brick Readiness and Gap Survey
- Macro:
IU_CORE_PROCESS_BRICK_READINESS_AND_GAP_SURVEY_DOCUMENT_ONLY_3000X - Date: 2026-05-28
- Mode: DOCUMENT-ONLY READINESS SURVEY. No production mutation occurred.
- Database surveyed (read-only):
directus(schemaspublic= 334 tables,iu_core= 4 tables), via read-only AST-validated SELECT role. - Authority: Continuing under GPT Council direction; Master Design Rev5 approved as document-only baseline.
1. Final status
SURVEY VERDICT: PASS.
The survey is complete: every test b–f has a readiness status and an exact gap list; every IU process-brick field is mapped to live / adaptable / paper / gap; the event/queue/governance minimum is mapped; DOT automation gaps are explicit; the next upgrade order is given; and no implementation or mutation occurred.
IU SUBSTRATE PRODUCTION-READINESS (the thing surveyed): PARTIAL — and substantially MORE READY than the Rev2–Rev5 design baseline assumed.
Headline finding. The design docs
00/03/04were authored treating most IU process tables as paper-only. Live introspection contradicts this. The bulk of the substrate for tests b–f — axis envelopes, tree paths, structure-operation functions, split/merge functions, SQL-link tables/functions, route delivery, the full event bus + job queue — exists live with data and DOT commands. The dominant blocker for b–f is not missing tables; it isdot_configruntime gates that are switched OFF, plus thereview_decisionwiring for mutating ops and the absence of an automated end-to-end test harness. The genuinely-absent (paper) items are the process-brick binding layer (iu_process_binding,iu_assembly_slot_registry,iu_role_in_process) and the generic queue-hardening registries (executor_class_registry,state_machine_registry,idempotency_registry,retry_policy_registry,dlq_replay_request) — these matter for the 4 Mothers, but are largely orthogonal to passing IU tests b–f.
2. Source list read
Design docs (read in full, 206,303 chars, via subagent slicing):
knowledge/dev/design/v0.6-iu-4mothers-event-foundation-rev2/00-master-design-rev2.md(Rev5)knowledge/dev/design/v0.6-iu-4mothers-event-foundation-rev2/04-iu-centered-4mothers-binding-design.md(Rev5)knowledge/dev/design/v0.6-iu-4mothers-event-foundation-rev2/03-event-5layer-realtime-dlq-design.md(Rev5)knowledge/dev/design/v0.6-iu-4mothers-event-foundation-rev2/10-industrial-birth-cross-law-addendum.md(Rev5)
GPT review reports (read in full):
5. knowledge/dev/reports/architecture/4mothers-industrial-birth-rev5-gpt-final-review-2026-05-28.md — verdict REV5_ACCEPT_AS_DOCUMENT_ONLY_BASELINE_WITH_EXPLICIT_MP_D26_CARRY_FORWARD
6. knowledge/dev/reports/architecture/iu-roadmap-review-after-master-design-rev4-gpt-2026-05-28.md — verdict ROADMAP_ACCEPTED_WITH_PARALLEL_INFRA_GATES (this report enumerates tests a–f verbatim)
7. knowledge/dev/reports/architecture/iu-4mothers-master-design-rev4-gpt-review-iu-centered-roadmap-2026-05-28.md — verdict MASTER_DESIGN_REV4_ACCEPT_AS_DESIGN_BASELINE_WITH_IU_SUBSTRATE_READINESS_GATE (defines Gates A–E)
Prior IU test / foundation reports (read):
8. .../dieu44-trien-khai/v0.6-dieu45-phase-3-...-write-channel/05-dieu37-cut-verify-result.md (test a proof: Điều 37 cut → 17 IUs, verdict verified)
9. .../dieu44-trien-khai/v0.6-iu-core-operational-cut-workflow-.../06-three-axis-requirements.md (Axis A/B/C definitions + T01/T02/T03 PASS)
10. .../dieu44-trien-khai/v0.6-iu-core-cutting-operator-start-here/02-current-live-status.md (function/migration snapshot 2026-05-26)
11. .../dieu44-trien-khai/v0.6-iu-pg-native-trigger-model-survey-design/... (trigger model survey, design-only)
12. .../dieu44-trien-khai/backlog/td-p1-split-merge-metadata-propagation-gap-2026-05-15.md (split/merge gap, OPEN P1)
13. .../v0.5-final-bridge-to-production-cut-command-review/...bridge-state-and-final-gap-analysis-2026-05-19.md (review_decision_id implementation gap)
Live DB evidence (read-only queries): schema enumeration; row counts; dot_config gate values; dot_iu_command_catalog; function inventory; iu_three_axis_envelope / iu_sql_link column shapes; event_type_registry contents.
Note:
cutter_governance.review_decisionexists but is not readable by the read-only role (InsufficientPrivilege); its existence is confirmed viapg_class, its row count is taken from prior report (3 rows) and flagged as KB_reported, not verified_live this pass.
3. IU current-state matrix
Classification legend: verified_live (table exists + has data, observed this pass) · legacy_trace (table exists, 0 rows / shaped but unexercised) · KB_reported (asserted by report/memory, not re-verified live) · paper_only (named in design, no live object) · known_gap.
3a. IU substrate (live, observed this pass)
| Object | Rows | Status | Notes |
|---|---|---|---|
public.information_unit |
216 | verified_live | grew 175→200→216 across sessions |
public.unit_version |
223 | verified_live | version spine |
public.iu_lifecycle_log |
146 | verified_live | governance_state derived from here |
public.iu_piece_collection |
45 | verified_live | bundle/assembly container |
public.iu_piece_membership |
227 | verified_live | ordinal/member ordering |
public.iu_three_axis_envelope |
216 | verified_live | 1 envelope per IU; columns confirm axis_a_* (doc_code/sort_order/section_code), axis_b_tags + axis_b_tags_by_source (jsonb), axis_c_parent_id/axis_c_depth/axis_c_ancestors/axis_c_ancestor_addresses |
public.iu_metadata_tag |
536 | verified_live | professional/domain axis tags |
public.iu_metadata_tag_registry |
36 | verified_live | tag vocab |
public.iu_relation |
60 | verified_live | parent-child edges |
public.iu_tree_path |
199 | verified_live | materialized ancestry (axis C) |
public.iu_tree_change_log |
56 | verified_live | tree mutation audit |
public.iu_structure_operation |
72 | verified_live | only reparent_piece (60) + deprecate_piece (12) — no split/merge/add/remove exercised |
public.iu_sql_link |
3 | verified_live | columns: link_role, object_kind, object_schema/name, collection_name, row_pk(jsonb), function_identity, trigger_name, direction, enabled, idempotency_key |
public.iu_sql_event_route |
1 | verified_live | trigger-IN route (gated) |
public.iu_outbound_route |
15 | verified_live | trigger-OUT routes |
public.iu_route_attempt |
68 | verified_live | delivery attempts logged |
public.iu_vector_sync_point |
152 | verified_live | mirror sink; sync gated off |
public.cut_request |
4 | verified_live | Điều 39 state machine |
public.cut_request_transition |
40 | verified_live | transition audit |
public.dot_iu_command_catalog |
42 | verified_live | DOT command surface (see §7) |
public.dot_iu_command_run |
45 | verified_live | command audit |
iu_core.iu_staging_record / iu_staging_payload |
— | verified_live | No-Vector Staging Zone |
3b. IU substrate (shaped but unexercised / sinks empty)
| Object | Rows | Status | Notes |
|---|---|---|---|
public.iu_split_set |
0 | legacy_trace | split table exists, never used |
public.iu_merge_set |
0 | legacy_trace | merge table exists, never used |
public.iu_route_dead_letter |
0 | legacy_trace | IU route DLQ empty |
3c. render / governance / audit
render_iu_bodypath: realized live asfn_iu_collection_render+fn_iu_render_file(DOTdot_iu_render_file,dot_iu_create_file_from_pieces); reconstruct viafn_iu_reconstruct_source(Axis A; T01 PASS 36 pieces DIEU-35; Điều 37 reconstruct = 17). verified_live.- IU governance/audit:
iu_lifecycle_log(146),iu_tree_change_log(56),iu_structure_operation(72),dot_iu_command_run(45),cut_request_transition(40). verified_live. - IU usage evidence:
iu_usage_evidencetable = paper_only (named in design §10 as "paper"; no live object found). Indirect usage is observable via the audit tables above.
3d. Industrial-birth governance substrate (live)
| Object | Status | Notes |
|---|---|---|
public.birth_registry |
verified_live (exists) | Điều 0-G birth law substrate present |
public.collection_registry |
verified_live (exists) | Điều 36 collection registry present |
public.governance_registry |
verified_live (exists) | Điều 37; type ∈ {collection,dot,factory} |
public.governance_relations |
verified_live (exists) | produces/owner edges |
public.design_templates |
verified_live (exists) | Điều 28 template law |
4. IU process-brick gap matrix
The design's 11 brick fields (exposed via the paper iu_process_binding):
| Brick field | Design verdict | Live reality (this pass) | Survey class |
|---|---|---|---|
iu_unit_id |
REUSE information_unit |
live (216 rows) | verified_live |
iu_version_id |
REUSE unit_version |
live (223 rows) | verified_live |
iu_role_in_process |
NEW (paper) | no iu_role_in_process object; no iu_process_binding |
paper_only |
assembly_slot (iu_assembly_slot_registry) |
NEW (paper) | absent; bundle ordering done via iu_piece_membership.ordinal |
paper_only (adjacent reuse exists) |
precondition_config (trigger-in) |
NEW (paper, on binding) | substrate adjacent: iu_sql_event_route (1 row) + fn_iu_sql_link_inbound_capture |
paper_only (binding) / verified_live (adjacent route substrate) |
postcondition_config (trigger-out) |
NEW (paper, on binding) | substrate adjacent: iu_outbound_route (15) + fn_iu_route_deliver + fn_iu_outbound_route_delivery_guard |
paper_only (binding) / verified_live (adjacent) |
io_contract_refs (MOIT/MOUT) |
NEW (paper), CRS-gated | CRS registries absent | paper_only / candidate_requires_survey |
executor_class_ref |
NEW (paper) FK→executor_class_registry |
executor_class_registry absent |
paper_only |
event_contract_ref |
NEW (paper) FK→event_type_registry |
event_type_registry live (31 types) |
paper_only (binding) / target registry verified_live |
kg_edge_refs |
derived view over iu_kg_edge |
iu_relation (60) live; no iu_kg_edge table found |
paper_only (view) / verified_live (iu_relation substitute) |
governance_state |
derived from iu_lifecycle_log |
live (146) | verified_live (derivation source) |
Process-brick conclusion: The binding container (iu_process_binding) and three NEW registries (iu_assembly_slot_registry, iu_role_in_process vocab, executor_class_registry) are genuinely paper_only. However, 8 of 11 fields already have a live backing object or a live adjacent substrate — the binding layer is mostly an assembly/denormalization job over existing live data, not net-new infrastructure. This is required for the 4 Mothers but is not on the critical path for IU tests b–f.
5. Test b–f readiness matrix
Tests a–f are enumerated verbatim in source #6. Test a (cut + reconstruct original source order) is PROVEN LIVE (Điều 37 → 17 IUs, verdict
verified,axis_a/b/c_ok=true,no_vector_ok=true; DIEU-35 T01 PASS 36 pieces).
| Test | Capability | Live substrate present? | Live functions / DOT commands | Gate(s) blocking | Readiness | Exact gap to close |
|---|---|---|---|---|---|---|
| b | Filter by professional/domain axis (Constitution) to cut | YES — iu_three_axis_envelope.axis_b_tags populated for all 216 IUs; iu_metadata_tag (536) + registry (36) |
fn_iu_three_axis_envelope_refresh, dot_iu_rebuild_metadata_axes; read via v_iu_metadata_envelope, v_ui_iu_three_axis_envelope |
iu_core.three_axis_auto_refresh_enabled=false (refresh is manual) |
HIGH (read-only) | (1) a DOT-callable filter/query command (catalog has rebuild, not a parameterized filter-select); (2) decide whether auto-refresh stays manual; (3) automated assertion harness |
| c | Filter by parent-child-grandchild axis | YES — iu_tree_path (199), iu_relation (60), axis_c_parent_id/depth/ancestors populated |
fn_iu_subtree (T03 PASS, depth 2, 8 descendants) |
none (read path) | HIGH (read-only) | (1) DOT-callable subtree-filter command wrapper; (2) automated test harness asserting tree integrity post-cut |
| d | Assemble doc from scratch: add/remove/reorder/merge/split | PARTIAL — collection+membership live; split/merge functions exist but tables empty | add: fn_iu_collection_add_piece/dot_iu_add_piece; remove: fn_iu_collection_remove_piece/dot_iu_remove_piece; reorder: fn_iu_collection_reorder_piece/dot_iu_reorder_piece; split: fn_iu_piece_split/dot_iu_split_piece; merge: fn_iu_piece_merge/dot_iu_merge_piece; fn_iu_structure_op_apply/plan/verify/rollback; compose: fn_iu_compose/dot_iu_create_file_from_pieces |
iu_core.structure_ops_enabled=false; iu_core.composer_enabled=false; iu_enact.allow_no_review_decision=false |
MEDIUM | (1) flip structure_ops_enabled for a governed test run; (2) wire review_decision_id for split/merge (TD-P1 OPEN: governed REVIEW sub-pipeline + row-builder "never committed"); (3) populate/verify iu_split_set/iu_merge_set first-time; (4) state-machine rollback edge for stuck mark_verified |
| e | Trigger-in / trigger-out per IU | PARTIAL — iu_sql_event_route (1, IN), iu_outbound_route (15, OUT), iu_route_attempt (68) |
IN: fn_iu_sql_link_inbound_capture; OUT: fn_iu_route_deliver, fn_iu_route_worker_run, fn_iu_outbound_route_delivery_guard, fn_iu_emit_event/fn_iu_piece_emit_event; routes_master + route_worker ON |
iu_core.delivery_enabled=false (worker on, delivery off); no iu.* event types registered (31 types cover structure/collection/staging, not per-IU trigger contracts) |
MEDIUM | (1) flip delivery_enabled for governed test; (2) register IU trigger-in/out event types in event_type_registry; (3) end-to-end IN→IU→OUT automated assertion; (4) per-IU precondition/postcondition_config (paper binding) if richer routing than route tables is needed |
| f | SQL link between IU and current DB data | PARTIAL-HIGH — iu_sql_link (3 rows) with full shape (object_kind, direction, function_identity, trigger_name, idempotency_key, enabled); view v_iu_sql_link_resolved |
fn_iu_sql_link_validate, fn_iu_sql_link_inbound_capture |
inbound capture rides the same route/delivery gates | MEDIUM-HIGH | (1) full-automation proof (report B: "SQL link proof needs full automation"); (2) DOT-callable link create/validate command (catalog lacks an explicit dot_iu_sql_link_*); (3) MOUT aggregation depends on CRS dot_function_registry/output_table_registry (G7) |
Cross-cutting for all b–f: none is blocked by a missing core table. The shared blockers are: runtime gate flags OFF, no automated end-to-end DOT test harness, and (for d/e) governed review-decision wiring + IU event-type registration.
6. Event / queue / governance readiness matrix
| Capability | Design "Live?" | Live reality (this pass) | Survey class |
|---|---|---|---|
event_outbox |
✓ | 148,076 rows — heavily used | verified_live |
event_read |
— | 147,715 rows | verified_live |
event_pending |
— | 0 rows | legacy_trace (drained) |
event_type_registry |
✓ + ext | 31 types (created/updated/split/merged/structure_/collection_/staging.* …) | verified_live |
event_subscription |
(VL) | 3 rows | verified_live |
job_queue |
✓ | 13 rows | verified_live |
job_dead_letter |
✓ | 0 rows | verified_live (empty) |
queue_heartbeat |
✓ | 3 rows; queue.heartbeat.enabled=true, stale_threshold_seconds=300 |
verified_live |
executor_class_registry |
paper | absent | paper_only |
state_machine_registry |
paper | absent (note: cut_request_transition is a bespoke state machine, live) |
paper_only |
idempotency_registry |
paper | absent (per-row idempotency_key columns exist on iu_sql_link/routes) |
paper_only |
retry_policy_registry |
paper | absent | paper_only |
dlq_replay_request |
paper | absent; queue.dlq.replay_enabled=false |
paper_only |
proposal (public) |
paper | absent | paper_only |
review_decision |
paper (public) | exists in cutter_governance only (not public); not readable by RO role |
KB_reported |
| trace_id / parent_span_id / correlation_id | adopt NOW | not separately verified on event_outbox this pass |
candidate_requires_survey |
W3C traceparent discipline (MP-D1) |
adopt NOW | design-bound; verify in event substrate hardening macro | paper_only |
| Birth/collection/governance/template registries | (Điều 0-G/36/37/28) | birth_registry, collection_registry, governance_registry, governance_relations, design_templates all present |
verified_live |
dot_config gate snapshot (verified this pass):
| Gate | Value |
|---|---|
iu_core.composer_enabled |
false |
iu_core.structure_ops_enabled |
false |
iu_core.delivery_enabled |
false |
iu_core.auto_instantiate_enabled |
false |
iu_core.three_axis_auto_refresh_enabled |
false |
iu_core.operator_runtime_enabled |
false |
iu_core.vector_sync_enabled |
false |
iu_core.retention_enabled |
false |
iu_core.routes_master_enabled |
true |
iu_core.route_worker_enabled |
true |
queue.heartbeat.enabled |
true |
queue.job_substrate.enabled |
false |
queue.dlq.replay_enabled |
false |
iu_enact.allow_no_review_decision |
false |
iu_edit.policy.default_mode |
require_review |
Minimum event/queue/governance required for IU tests b–f: already live except (i) per-IU iu.* event types (test e), (ii) the governed review_decision path made callable for split/merge (test d). The paper hardening registries (idempotency_registry, retry_policy_registry, dlq_replay_request, state_machine_registry, executor_class_registry) are NOT required to pass b–f; they are required to productionize IU and to build the 4 Mothers safely.
7. DOT automation readiness matrix
dot_iu_command_catalog = 42 commands (verified_live). Coverage vs tests:
| Test | DOT commands present | DOT gap |
|---|---|---|
| a (cut/reconstruct) | dot_iu_mark_article, dot_iu_verify_mark_manifest, dot_iu_cut_from_manifest, dot_iu_verify_cut_result, operator_* variants |
none (operational) |
| b (domain axis) | dot_iu_rebuild_metadata_axes, dot_iu_update_piece_metadata |
no parameterized axis-B filter/select command |
| c (tree axis) | (subtree via fn_iu_subtree) |
no dot_iu_subtree/tree-filter command wrapper |
| d (assemble) | dot_iu_add_piece, dot_iu_remove_piece, dot_iu_reorder_piece, dot_iu_clone_piece, dot_iu_split_piece, dot_iu_merge_piece, dot_iu_supersede_piece, dot_iu_retire_piece, dot_iu_delete_piece_soft, dot_iu_restore_piece, dot_iu_create_file_from_pieces, dot_iu_create_workflow_from_steps, dot_iu_create_collection |
commands exist but gated (structure_ops_enabled=false); split/merge unproven end-to-end |
| e (trigger in/out) | iu.post_cut.axis_materialize, dot_iu_auto_instantiate_from_event, dot_iu_auto_instantiate_rollback_by_actor |
no explicit trigger-in/out test command; delivery gated |
| f (SQL link) | (functions only) | no dot_iu_sql_link_create/validate catalog command |
Post-CUT autowire: the design called fn_iu_post_cut_axis_materialize a gap (G2). It exists live as a function AND as DOT command iu.post_cut.axis_materialize. The remaining gap is automatic invocation inside cut completion + idempotency wiring, not the function itself. → reclassify G2 from "missing" to "exists, not auto-wired."
Overall DOT gap: the mutation/assembly verbs (add/remove/reorder/split/merge/compose/cut) are catalogued; the read-only filter verbs (b, c) and the sql-link verbs (f) lack dedicated catalog commands, and no end-to-end automated DOT test harness exists to run b–f and assert results without a human operator.
8. Exact upgrade backlog before IU production
Ordered, each item document-only until its own approved macro:
- U1 — IU test harness (b–f) macro. Author an automated, DOT-callable, config-driven test plan that runs b–f end-to-end and asserts results (reconstruct hash, axis-B filter cardinality, subtree integrity, assemble/split/merge round-trip, trigger IN→OUT, sql-link resolve). No new tables needed for b/c.
- U2 — Governed gate-flip protocol. Define how
structure_ops_enabled,delivery_enabled,three_axis_auto_refresh_enabled,composer_enabledare opened for a bounded test run and closed after (mirrors the proven composer open→CUT→close pattern), withdot_iu_command_runaudit. - U3 — Close G1 (split/merge
review_decision_id). Commit the governed REVIEW sub-pipeline + rich row-builder sofn_iu_piece_split/fn_iu_piece_mergecan run with a non-nullreview_decision_id; first-time populateiu_split_set/iu_merge_set. (TD-P1 OPEN.) - U4 — Close G2 (post-CUT autowire). Wire
fn_iu_post_cut_axis_materializeinto cut completion with an idempotency key; today it is manual. - U5 — State-machine rollback edge. Add
mark_verified → mark_rejectedrollback (Điều 39cut_requestcan get stuck atmark_verifiedwithcut_run_id=NULL). (IU_CUT_STATE_MACHINE_ROLLBACK_AFTER_APPROVAL_POLICY.) - U6 — IU event-type registration. Register per-IU trigger-in/out
iu.*event contracts inevent_type_registryfor test e. - U7 — DOT filter + sql-link commands. Add catalogued read commands for axis-B/axis-C filter and
dot_iu_sql_link_*. - U8 — Process-brick binding layer (for 4 Mothers, not b–f).
iu_process_binding+iu_assembly_slot_registry+iu_role_in_processvocab — assembly over existing live data. - U9 — Generic queue-hardening registries (productionization).
executor_class_registry,state_machine_registry,idempotency_registry,retry_policy_registry,dlq_replay_request— paper → survey → implement. - U10 — CRS registries (Candidate Registry Survey).
field_registry,input_form_registry,output_table_registry,dot_function_registry— required for MOIT/MOUT (io_contract_refs), blocked behind MP-D7 no-literal-name rule.
9. Proposed order of next macros
Converging with all three GPT reviews (sources #5/#6/#7), which unanimously say: approve the design baseline document-only, do NOT start 4 Mothers, run IU readiness first:
- (this macro — DONE)
IU_CORE_PROCESS_BRICK_READINESS_AND_GAP_SURVEY_DOCUMENT_ONLY_3000X. IU_TEST_B_TO_F_AUTOMATION_PLAN_DOCUMENT_ONLY_*X(U1 + U2 + U6 + U7) — the test harness + governed gate-flip design.IU_4MOTHERS_CANDIDATE_REGISTRY_SURVEY_DOCUMENT_ONLY_*X(Gate B / U10).IU_EVENT_QUEUE_SUBSTRATE_READINESS_FOR_IU_PRODUCTION_DOCUMENT_ONLY_*X(Gate C / U9 + trace-id discipline).IU_CUT_STATE_MACHINE_ROLLBACK_AFTER_APPROVAL_POLICY(U5) and split/merge review_decision macro (U3) — these are the first implementation macros and must each carry their own write-channel + forbidden gates.IU_4MOTHERS_TIER_REGISTRY_SURVEYthenIU_4MOTHERS_GOVERNANCE_OPS_SURVEY(Gates D/E).- Only then decide IU substrate upgrades vs Phase-0 IU gaps vs 4 Mothers substrate extensions.
Run b/c first (read-only, lowest risk, already HIGH-ready), then f, then d and e (need governed gate-flip + review wiring).
10. Risks if we implement 4 Mothers before IU readiness
- R1 — Duplicate body fields (the exact failure GPT warned of). "If IU is too narrow, later implementation will drift into duplicate workflow body fields, task instruction copies, ad-hoc event payloads, or Nuxt logic" (source #6). Building MOW/MOT/MOIT/MOUT on the paper
iu_process_bindingbefore it is real forces each Mother to re-invent body/ordering storage → violates Điều 38/39 single-body ownership. - R2 — Industrial-scale "đẻ rơi". The 4 Mothers are object factories (doc 10). A factory built on an unproven IU brick mass-produces orphan/phantom/mis-classified objects (Điều 0-G/36 violations) — the precise hazard MP-D24/D29 exist to prevent.
- R3 — Mutating ops without governance. Tests d/e remain gated and split/merge lack
review_decision_id. Wiring 4 Mothers to mutate IUs now would bypass Điều 32 approval and theiu_enact.allow_no_review_decision=falseinvariant. - R4 — Hardening registries missing. Without
idempotency_registry/retry_policy_registry/state_machine_registry/dlq_replay_request, factory-scale event/queue traffic (already 148k outbox rows) has no generic poison/retry/replay governance → silent duplication or loss. - R5 — CRS contract drift. MOIT/MOUT
io_contract_refsdepend on un-surveyed CRS registries (MP-D7 forbids literal-name reference until verified_live) — premature build hard-codes names that may never exist. - R6 — MP-D26 human-role gap. No law defines staff/dept-lead/super-admin visibility; 4 Mothers UI would invent ad-hoc permissions outside any owner law.
Net: IU is close enough that finishing b–f (mostly gate-flips + a harness + the review wiring) is far cheaper than absorbing R1–R6 later. Finish IU first.
11. Law / no-double-ownership review
No-double-ownership holds in the live substrate — each concern maps to exactly one owner law, with no observed overlap:
| Concern | Owner law | Live evidence |
|---|---|---|
| IU body + KG + split/merge/sql-link | Điều 38/39 | information_unit, unit_version, iu_relation, iu_sql_link, fn_iu_piece_split/merge |
| Approval | Điều 32 | review_decision (cutter_governance), iu_enact.allow_no_review_decision=false |
| DOT mutation + audit | Điều 35 | dot_iu_command_catalog (42), dot_iu_command_run (45, mutating flag) |
| Queue/event/heartbeat/state-machine | Điều 45 | event_outbox, job_queue, queue_heartbeat, cut_request_transition |
| Nuxt render shell + templates | Điều 28 | design_templates, v_ui_iu_* views |
| 3-layer DB boundary | Điều 33 | gateway: iu_create.gateway.mode=enforced, direct_insert_policy=block_after_guard |
| Birth | Điều 0-G | birth_registry |
| Collection | Điều 36 | collection_registry (DRAFT 30% — keep paper) |
| Governance org / factory | Điều 37 | governance_registry (type factory), governance_relations |
Only NEW concern = the 4 Mothers application layer → future Điều XX. A second future-law candidate is flagged (MP-D26, carried forward in source #5): a human-org-role/permission law, since Điều 37 defines no human staff/dept-lead/super-admin roles (divergence D-1). No new Council decision is required to finish IU tests b–f.
12. Forbidden compliance statement
This macro performed survey only. Verified compliance with every forbidden:
- No PG mutation — all 12 PG calls were read-only SELECT via the AST-validated read-only role (one attempted read of
cutter_governance.review_decisionwas denied by privilege, confirming the role cannot write). - No Directus mutation — none performed.
- No Qdrant / vector write — none;
iu_core.vector_sync_enabled=falseobserved, untouched. - No migration — none authored or applied.
- No DOT command run —
dot_iu_command_catalogwas read; no command executed (dot_iu_command_runcount 45, unchanged). - No law enactment — none.
- No implementation — none.
- No schema / table / template / collection creation — none.
- No final OSS tool selection — none.
- No gate change —
dot_configwas read; all 15 surveyed gate values reported as-found, none modified.
The single artifact produced is this document, uploaded to knowledge/dev/reports/architecture/.
Appendix — corrections to the design baseline (for Council awareness)
The Rev2–Rev5 design docs (00/03/04) under-state live readiness. Items the design labels "paper" that are in fact verified_live this pass: iu_three_axis_envelope, iu_metadata_tag(_registry), iu_sql_link, iu_sql_event_route, iu_outbound_route, iu_route_attempt, iu_tree_path, iu_relation, iu_structure_operation, plus live functions fn_iu_piece_split, fn_iu_piece_merge, fn_iu_structure_op_apply/plan/verify/rollback, fn_iu_collection_add_piece/remove_piece/reorder_piece, fn_iu_post_cut_axis_materialize, fn_iu_sql_link_validate/inbound_capture, fn_iu_route_deliver. Recommend the next design revision reconcile its PG Maximization Map against this live inventory so the 4 Mothers design does not re-propose substrate that already exists.