IU 4-Mothers Master Design Rev2 — WS1 Requirement Traceability Matrix (DRAFT 2026-05-27)
Master Design Rev2 — Requirement Traceability Matrix (WS1)
Path:
knowledge/dev/design/v0.6-iu-4mothers-event-foundation-rev2/01-requirement-traceability-matrix.mdStatus: DRAFT Rev2 (document-only). Companion to00-master-design-rev2.md. Date: 2026-05-27 Authority anchor:knowledge/dev/requirements/v0.6-iu-4mothers-event-foundation-rev2/00-requirement-brief-rev2.mdrevision 2 (Rev2 brief MP1–MP6 patched, user-approved 2026-05-27). Scope: every Rev2 requirement section → its design landing site, the law(s) it must respect, the PG artifact/registry/projection it touches, the existing infra reused, residual gap, and the sentinel test that verifies the binding. No production mutation. No final OSS selection. No law enactment.
§0. Reading guide
Each row is a contract: if the design diverges from the Rev2 brief on this row, the design is invalid. If a PG artifact or registry is candidate_requires_survey per Rev2 §12, it does not become a design dependency until the survey gate in WS8 (06-open-decisions-and-readiness.md §S1) closes.
Columns:
- Rev2 § — requirement section in the brief.
- Binding requirement — one-line restatement of the must.
- Design landing site — file + section in this Rev2 design package.
- Law boundary — constitutional / Điều clause this design respects (no-double-ownership matrix).
- PG artifact / registry / projection — concrete PG-side SoT the design touches; tagged with evidence level from Rev2 §12.
- Existing infra reused — old-infra row(s) from Rev2 §12 (with evidence_level).
- Open gap — gap registered in Rev2 §12 GAP list or §19 Open Decisions.
- Sentinel test — single binary check that would fail if the design later drifts.
Evidence-level shorthand: [VL]=verified_live, [KR]=KB_reported, [LT]=legacy_trace, [CRS]=candidate_requires_survey, [KG]=known_gap.
§1. Traceability matrix — §2 IU-Centered Doctrine
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §2 D2.1 | IU is central; every workflow (2..500 step) lắp từ IU-backed step / IU bundle | 04-iu-centered-4mothers-binding-design.md §1, §3 |
Điều 7, Điều 38, Điều 39, Hiến pháp NT2/NT4 | information_unit [VL], iu_three_axis_envelope [VL] |
row 1, row 27 | — | "No workflow_step_def row exists without a populated IU/IU-bundle binding column" |
| §2 D2.2 | Build-once, reuse-many; IU body lives in exactly one place | 04-… §2.1, 00-master-design-rev2.md §4 invariants |
Điều 38 | information_unit.canonical_body_*, iu_version |
row 1, row 4 | — | "Grep tasks.body + workflow_step_def.description_text for non-NULL non-render-only payloads → zero rows" |
| §2 D2.3 | No duplicate text invariant — instruction / contract / policy text must go through IU ref + render layer | 04-… §2.2, 03-event-5layer-realtime-dlq-design.md §2 (event payload refs-only) |
Điều 38, Điều 28 (Nuxt render shell) | iu_route_* projection [VL], information_unit [VL] |
row 1, row 21 | — | "task.body IS NULL OR task.body matches render-template marker only; event_outbox.payload carries iu_unit_id ref not body text" |
| §2 D2.4 | 4 Mothers = khuôn đúc, không sở hữu IU/queue/approval | 04-… §4 (4 Mothers binding map) |
Điều 32 (approval), Điều 38/39 (IU), Điều 45 (queue) | — | rows 9-15, row 16 | — | "Approval call sites resolve to Điều 32 surface only; queue insert sites resolve to job_queue/event_outbox, not MOW/MOT-owned tables" |
| §2 D2.5 | Uniform assembly primitive — 2-step và 500-step cùng schema | 04-… §3.4 (uniform primitive), 02-step-state-machine-and-workflow-ui-design.md §6 (long-workflow UI) |
Điều 7 | workflow_step_def, workflow_step_relations [VL] |
row 16 | — | "workflows.step_count distribution covers 2..500 with single schema; no workflow_long_step_def-like sibling table" |
| §2 D2.6 | Editing IU propagates by version policy; active workflow pins version; future workflow follows policy | 04-… §5 (version policy), 06-open-decisions-and-readiness.md §S15 (OD15) |
Điều 38, Điều 30 (reversible by default) | iu_version [VL], workflow_step_def.iu_pin_policy (design extension) |
row 1 | OD15 IU version policy (pin vs auto-upgrade vs hybrid) | "Bump an IU minor version → active workflow_run on that step continues on pinned version; new workflow_run picks per policy" |
§2. Traceability matrix — §3 IU as Process Brick (11-field requirement)
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
§3 field iu_unit_id |
Stable brick id | 04-… §3.1 brick fields |
Điều 38 | information_unit.iu_unit_id [VL] |
row 1 | — | "FK from every step/task binding row resolves" |
§3 field iu_version_id |
Version pin for workflow stability | 04-… §3.1 + §5 version policy |
Điều 38 | iu_version [VL] |
row 1 | OD15 | "workflow_run carries pinned version; render layer uses pinned" |
§3 field iu_role_in_process |
Role enum (instruction | decision_gate | input_contract | output_contract | policy | checklist | SOP | validation_rule | event_hook | report_context) |
04-… §3.2 role taxonomy |
Điều 38 | new vocab dot_config vocab.iu_role_in_process.* (design proposal) |
row 15 (dot_config) |
new vocab key | "Every IU brick binding has non-NULL iu_role_in_process ∈ vocab" |
§3 field assembly_slot |
MOW step slot / MOT region / MOIT field group / MOUT block | 04-… §4 (4 Mothers slot map) |
Điều 7 | new iu_assembly_slot_registry (design proposal) |
row 26 (iu_piece_collection*) |
new registry | "Every MOW step / MOT region / MOIT field group / MOUT block has a resolvable assembly_slot row" |
§3 field precondition_config |
Trigger/guard rules by config | 04-… §3.3 + 02-step-state-machine-… §4 (transition guard) |
Điều 45 §6.7 (state machine), Điều 30 | state_machine_registry (OD9), reuse trigger model row 4 |
row 4 IU trigger in/out [VL] | OD9 state_machine_registry placement | "Step cannot transition ready→in_progress without precondition_config resolution succeeding" |
§3 field postcondition_config |
Emitted events / output contracts / next-step signal | 04-… §3.3 + 03-event-5layer-… §3 producers |
Điều 45 §6.6 (event ≠ job), Điều 0-G | event_type_registry [VL], event_outbox [VL] |
row 9, row 10 | — | "Step completion event MUST match a registered event_type before emit" |
§3 field io_contract_refs |
MOIT/MOUT schema link | 04-… §4.3 MOIT + §4.4 MOUT |
Điều 38 | field_registry [CRS], input_form_registry [CRS], output_table_registry [CRS] |
rows 28-30 | G7 survey gate | "After survey gate: IU brick → MOIT form / MOUT table mapping resolves both ways" |
§3 field executor_class_ref |
DOT / SQL / AI / human / external / notification / render | 04-… §3.4 + 03-event-5layer-… §4 consumers |
Điều 45 §11.5 executor boundary | executor_class_registry (G3) |
row 14, row 20 (DOT) | G3 ownership boundary | "MOT must call executor class registry row; MOT body cannot embed executor logic" |
§3 field event_contract_ref |
Event types (register-before-emit) | 04-… §3.3 + 03-event-5layer-… §3.1 register-before-emit |
Điều 45 §6.6, Điều 0-G | event_type_registry [VL] |
row 10 | — | "Producer emit refused if event_type not in registry" |
§3 field kg_edge_refs |
Semantic deps / related IU / context pack | 04-… §3.5 KG bridge |
Điều 39 | iu_kg_edge (rev1 §1), iu_route_* [VL] |
row 21 | — | "KG feedback propose-only path resolves to IU edges, never auto-mutates registry" |
§3 field governance_state |
proposed | approved | active | deprecated | archived |
04-… §6 governance lifecycle |
Điều 0-G, Điều 32 | iu_lifecycle_log [VL] |
row 8 | — | "IU lifecycle transitions appear in iu_lifecycle_log with prior + next state + actor" |
| §3 boundary | IU does not own execute logic | 04-… §3.6 boundary, 03-event-5layer-… §4.2 |
Điều 45 §11.5 | — | — | — | "Grep information_unit body / IU contract artifacts for executor handler code → zero" |
§3. Traceability matrix — §4 IU Bundle / Step Pack
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §4 R4.1 | Bundle instead of merging IU (N members, ordered slots, typed roles, versioned, governed, lắp via registry, not hardcode) | 04-… §3.7 bundle schema |
Điều 38, Điều 39 | reuse iu_piece_collection + iu_piece_membership + iu_collection_template_* [VL] (mapped — confirm survey not required since rows are VL) |
row 26 | — | "Bundle row references ≥2 IU members + ordered slot index + typed role; no copied IU body" |
| §4 R4.2 | Bundle can represent step / task instruction pack / form context / output-report context | 04-… §4 (slot map per role) |
Điều 7 | bundle ↔ workflow_step_def / task_def / input_form / output_table mapping (design extension) | rows 16, 19, 28-30 | G7 | "Each of 4 representation modes is unit-tested via a real bundle in design fixtures (deferred to phase 1)" |
| §4 R4.3 | KG proposes bundle creation when co-usage strong but semantics tách biệt | 04-… §3.5 KG bridge, 00-master-design-rev2.md §7 KG feedback |
Điều 39 | iu_usage_evidence (design extension — see §10 row) |
row 21 | usage-evidence registry GAP | "KG propose-only emits propose_create_bundle event with evidence ref" |
| §4 R4.4 | Bundle first-class brick — workflow_step_def can bind (a) 1 IU, (b) 1 bundle, (c) typed IU assembly view, (d) task template IU-backed | 04-… §3.8 binding modes |
Điều 7 | workflow_step_def.binding_kind + binding_ref (design extension) |
row 16 | — | "Every step row has exactly one of {iu_ref, bundle_ref, assembly_view_ref, task_template_ref} populated" |
§4. Traceability matrix — §5 4 Mothers
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §5.1 MOW | IU Assembly Orchestrator; no duplicate IU content; chooses next step via event/trigger/condition; 2..500 uniform; long-running resume-safe / snapshot / replay; pins IU version; not queue owner / IU internals owner / approval owner | 04-… §4.1 MOW binding |
Điều 7, Điều 45 (queue), Điều 38 (IU), Điều 32 (approval) | workflows, workflow_steps, workflow_step_relations, workflow_change_requests [VL] |
rows 16, 17, 18 | OD2 (proposal table shape), OD15 | "MOW row holds graph + bindings, no IU body, no executor body, no approval logic" |
| §5.2 MOT | Task envelope around IU instruction/context/IO; 4 UI regions render from ref; automated task uses same IU contract; MOT calls executor class — not executor; no approval logic | 04-… §4.2 MOT binding + 02-step-state-machine-… §5 (task envelope) |
Điều 45 §11.5, Điều 28, Điều 32 | tasks, task_checkpoints, task_comments [VL] |
row 19 | G3 executor_class_registry | "Task row body refs IU+bundle; no inline policy/instruction text; executor call sites traceable to executor_class_registry" |
| §5.3 MOIT | field_registry + input_form_registry SoT for field/form; each field MAY link IU; form bound into IU-backed task/step context; direct vs staging by config; DOT assembles; Nuxt zero logic |
04-… §4.3 MOIT binding |
Điều 33 v2.1, Điều 28, Điều 0-G | field_registry [CRS], input_form_registry [CRS] |
rows 28, 29 | G7 survey gate | "After survey gate: every form has registry row; Nuxt <MOITForm formId /> has zero business logic" |
| §5.4 MOUT | IU-backed views of PG/Directus state; report declares iu_id source + SQL/DOT function link; inline (in MOT region 3) + matrix (independent route); realtime via governed gateway; Nuxt zero logic; permission filter backend | 04-… §4.4 MOUT binding + 03-event-5layer-… §5 realtime |
Điều 33 v2.1, Điều 28, Điều 37 v3.3 | output_table_registry [CRS], dot_function_registry [CRS], iu_sql_link [VL] |
rows 5, 30, 31 | G7, OD13 (dot_function_registry ownership) |
"MOUT block declares iu_id source + DOT/SQL function ref; Nuxt fetch route → backend gateway only" |
§5. Traceability matrix — §6 Event 5-Layer
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §6.1 Producers | Producers only emit; no business execution; sources PG DML trigger → outbox / IU axis / DOT lifecycle / cut transitions / workflow state / proposal / human decision / agent / external API via approved adapter; register-before-emit; JSON schema versioned (semver); capture-by-config | 03-event-5layer-… §3 producers |
Điều 45 §6.6, Điều 0-G | event_outbox, event_type_registry, event_pending [VL] |
rows 9, 10, 11 | OD8 (schema compat mode) | "Insert producer attempt with unknown event_type → refused with event_type_not_registered" |
| §6.2 Broker / Event Bus | Event bus ≠ job queue; queue carries signal/ref not heavy body; topic/routing; fan-out; PG-native substrate; queue does not auto-run scripts | 03-event-5layer-… §4 broker/queue split |
Điều 45 §6.6, §13.5 | event_outbox, event_subscription, job_queue [VL] |
rows 9, 11, 12 | — | "Queue row body size cap enforced; broker fan-out delivers ≥2 subscribers from one event" |
| §6.3 Consumers / Workers / Executors | Executor class registry (DOT / SQL / AI / Human / External / Notification / Render); ACK/NACK/retry-with-exponential-backoff/timeout; idempotency key bắt buộc; replay; poison → job_dead_letter; lease + heartbeat; trace_id (W3C) / correlation_id / parent_span_id always carried; MOT is not executor |
03-event-5layer-… §4 consumers + 00-master-design-rev2.md §6 invariants |
Điều 45 §11.5, §15.5 | job_queue, job_dead_letter, queue_heartbeat, dot_iu_command_catalog, dot_iu_command_run [VL] |
rows 12, 14, 20 | G3, G5 (idempotency_registry), G3 (executor_class_registry) | "Worker without heartbeat in N s → flagged silent; replay needs registered idempotency key" |
| §6.4 Realtime Gateway | Nuxt does NOT connect directly to core queue/event_outbox/NOTIFY; backend gateway filters permission + relevance; Governance UI sees summary/delta/red-flag/progress; SSE shell in Nuxt server route MAY exist but ONLY as shell calling backend gateway abstraction | 03-event-5layer-… §5 realtime gateway |
Điều 33 v2.1, Điều 28, Điều 37 v3.3 | new realtime_gateway_topic_registry (design extension) |
row 22 (iu_notification_event) |
OD4 (realtime gateway impl path) | "grep Nuxt source for LISTEN/event_outbox/job_queue → zero direct connections" |
| §6.5 DLQ / Recovery / Governance | job_dead_letter retry/replay/poison; idempotency registry; dlq_replay_request ledger (governance-approved); schema registry compat; audit timeline through MOUT; governance UI problem-first |
03-event-5layer-… §6 DLQ + 02-step-state-machine-… §7 governance UI |
Điều 32 (approval), Điều 31 v1.2 (audit), Điều 45 §6.5 | job_dead_letter [VL], dlq_replay_request (G4), idempotency_registry (G5) |
row 12 | G4, G5 | "DLQ replay without Điều 32 approval ID → refused" |
§6.6 Reconcile checklist with Bắt sự kiện của PG(3).docx |
All 9 lessons binding | 03-event-5layer-… §7 reconcile table |
Điều 45 | — | — | — | "Each of 9 lessons appears at a design section + sentinel binding" |
§6. Traceability matrix — §7 UI Requirements
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §7.1 Standard Process View | Render workflow def graph (step / bundle / trigger / branching / parallel / sub-workflow boundary) from workflow_registry; zero hardcode; Proposal mode writes workflow_change_requests only; single UI for all roles + backend permission filter; supports 2..500 step via zoom/pan/collapse |
02-step-state-machine-… §6 long-workflow UI + §8 proposal mode |
Điều 28, Điều 37 v3.3 | workflows, workflow_steps, workflow_change_requests [VL] |
rows 16, 17 | OD2 (generic vs per-domain proposal table) | "Proposal mode never writes workflow_registry; all changes land in workflow_change_requests" |
| §7.2 Runtime Progress View | Runtime instance status / deadline / PIC / output; drill-down step → task → IU content; resume-safe; long-running timeline + milestone; realtime via gateway, not Nuxt poll | 02-step-state-machine-… §6 + §3 runtime state |
Điều 28, Điều 45 §15.5 | workflow_run, step_run (extension), tasks [VL] |
row 19 | OD15 IU version policy | "Refresh during in_progress workflow_run preserves context; no Nuxt poll loop on PG" |
| §7.2.6 (MP5) Workflow status roll-up | Red>Yellow>Green; workflow NOT green if mandatory active step red; skipped/not_applicable not incomplete; optional steps không kéo; config-driven; transition matrix + per-state weight + edge cases defer here | 02-step-state-machine-… §5 roll-up rules |
Điều 30, Điều 33 v2.1 | new workflow_rollup_policy row in state_machine_registry (G6) |
row 16 | G6 | "Workflow with 1 mandatory failed step never resolves to Green roll-up" |
| §7.3 Step/Task 9-state model | 9 binding states with semantic + traffic-light + icon + text label; minimum floor; transition matrix deferred here | 02-step-state-machine-… §3 9-state floor + §4 transition matrix |
Điều 45 §6.7 (≥9-state) | state_machine_registry (G6) |
row 16, row 19 | G6 placement, OD9, OD12 (derived states accept/defer) | "Step state column constrained to 9 base codes; derived state if accepted has separate column" |
| §7.3.1 Traffic-light first | Color first, icon + text after | 02-step-state-machine-… §3.2 traffic-light tokens |
Điều 28 | new ui_design_system_registry (design extension) |
— | — | "Every state render outputs color + icon + text triplet" |
| §7.3.2 Per-step/task own state | No global lumping into workflow status | 02-step-state-machine-… §3 + §5 roll-up |
Điều 45 §6.7 | step_run / task_run | row 19 | — | "step_run.state per step is observable, not derived from workflow status" |
| §7.3.3 9-state minimum | Master Design can add derived states (paused/retrying/escalated/cancelled) only with justification | 02-step-state-machine-… §4.5 derived states decision (accept partial) |
Điều 45 §6.7 | — | — | OD12 | "Any state above 9 has registry justification row + transition policy" |
| §7.3.4 Each state has machine code + semantic short message + UI label (i18n) + traffic-light token + icon ref; declare-by-config | 02-step-state-machine-… §3.4 state registry shape |
Điều 28, Điều 0-G | state_machine_registry (G6) |
— | G6 | "All 5 attributes per state populated; Nuxt zero logic for state semantics" | |
| §7.3.5 (design implication) | state machine in PG; Nuxt zero logic; transition validation backend | 02-step-state-machine-… §4 transition validation |
Điều 33 v2.1, Điều 28 | state_machine_registry (G6), fn_state_transition_validate (design extension) |
— | G6 | "Frontend cannot transition state without backend RPC success" |
| §7.3.6 (MP3) Waiting sublabels | facet not new core state; waiting_dependency / waiting_human / waiting_external / waiting_time_gate; share Yellow; primary + secondary chips when mixed |
02-step-state-machine-… §3.3 waiting facets |
Điều 28 | step_run.waiting_facet (design extension) |
— | OD9 (registry placement) | "step_run.state=waiting → waiting_facet IS NOT NULL ∈ 4-vocab" |
| §7.3.7 (MP4) Accessibility | not color-alone; icon+text+tooltip; WCAG 2.1 AA contrast (≥4.5:1 text, ≥3:1 icon); color-blind safe; high-contrast/dark mode works; aria-label; tokens declare-by-config | 02-step-state-machine-… §3.5 a11y design tokens |
Điều 28 | ui_design_system_registry (design extension, lives in PG dot_config or Directus content registry) |
row 15 | — | "axe-core / contrast-tool sweep over state-light tokens → zero AA failures" |
| §7.4 Governance UI | Problems-only default; aggregate counts per category; concise AI/worker status; drill-down to full audit + correlation + trace_id; DLQ replay/rescue with Điều 32 approval; heartbeat / silent worker monitor; event lag p50/p95/p99 + threshold; no raw event stream surface; same layout all roles; backend permission filter | 02-step-state-machine-… §7 governance UI + 03-event-5layer-… §6 governance |
Điều 32, Điều 37 v3.3, Điều 45 §15.5 | job_dead_letter [VL], queue_heartbeat [VL], dlq_replay_request (G4), event_lag_metric (design extension) |
rows 12 | G4 | "Governance UI default route returns 0 raw event rows; drill-down requires trace_id" |
§7. Traceability matrix — §8 IU Event Contract
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §8 R8.1 | IU events on born/edited/split/merged/deprecated/linked/rendered/validated/used | 03-event-5layer-… §3.2 IU event family |
Điều 0-G, Điều 38 | event_type_registry [VL], event_outbox [VL] |
rows 9, 10 | — | "Each IU lifecycle action emits exactly one registered IU event type" |
| §8 R8.2 | Refs only — iu_unit_id, iu_version_id, workflow_run_id?, task_run_id?, event_type, trace_id (W3C), correlation_id, parent_span_id |
03-event-5layer-… §3.3 IU event envelope |
Điều 45 §13.5 (queue ≠ body), Điều 31 v1.2 | event payload contract (event_outbox.payload_json schema-validated) |
row 9 | — | "Validator rejects event with body_text/instruction_text/large blob keys" |
| §8 R8.3 | Payload không copy IU body; consumer fetches by ref | 03-event-5layer-… §3.3 + §4 consumer fetch pattern |
Điều 38, Điều 45 §13.5 | information_unit [VL] (consumer fetch target) |
row 1 | — | "Payload byte size cap enforced; consumer always fetches IU detail by ref" |
| §8 R8.4 | Register-before-emit; JSON schema in event_type_registry; semver |
03-event-5layer-… §3.1 register-before-emit + §8 compat mode |
Điều 0-G, Điều 45 §6.6 | event_type_registry [VL] |
row 10 | OD8 schema compat mode | "Schema bump: forward-compat enforced by default; breaking change requires explicit policy row" |
| §8 R8.5 | Worker reads PG/Directus/DOT for body — never inline | 03-event-5layer-… §4.2 worker fetch contract |
Điều 45 §11.5 | — | — | — | "Worker has zero inline IU body reads from payload; all body reads from PG" |
§8. Traceability matrix — §9 KG Feedback Loop
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §9 propose-only | KG proposes: step order / missing deps / typed edge / split / orphan / impact analysis / split-merge-rebundle-reparent after usage evidence; never auto-mutates registry | 04-… §3.5 KG bridge + 06-open-decisions-and-readiness.md §S7 review_decision |
Điều 39, Điều 32, Điều 0-G | iu_kg_edge (rev1 §1), workflow_change_requests [VL] (proposal landing) |
row 17 | G1 review_decision_id schema, G7 | "KG never writes workflow_registry directly; always writes to proposal/change_request" |
§9. Traceability matrix — §10 Usage Evidence Registry
| Rev2 § | Binding requirement | Design landing site | Law boundary | PG artifact | Existing infra reused | Open gap | Sentinel test |
|---|---|---|---|---|---|---|---|
| §10 8 signals | co-used-in-workflow / co-triggered / co-edited / co-retrieved / failure correlation / repeated escalation / repeated human correction / event lag-DLQ correlation; feeds KG feedback → governance | 04-… §3.5 evidence schema + 03-event-5layer-… §6 lag/DLQ correlation |
Điều 39, Điều 31 v1.2 | iu_usage_evidence (design extension; reuse event_outbox aggregation + job_dead_letter joins) |
rows 9, 12 | usage-evidence schema GAP | "Each of 8 signals has a deterministic derivation function (DOT or view) → row appears in iu_usage_evidence within window N" |
§10. Traceability matrix — §11 No-Double-Ownership matrix
Each row of Rev2 §11 maps to law boundary preservation in this design. Boundary preservation is a property — sentinel below covers all rows.
| Rev2 § | Binding requirement | Design landing site | Sentinel test |
|---|---|---|---|
| §11 (all rows) | Boundaries preserved; only NEW concern = 4 Mothers application layer (Điều XX future) |
00-master-design-rev2.md §3 no-double-ownership statement + every WS file inherits |
"Boundary-grep: queue/event/state-machine logic appears only under Điều 45 surface; IU axes only under Điều 38/39; approval only under Điều 32; 4 Mothers files contain only binding code, never owner logic" |
| §11 row 14 (Điều 34 DRAFT) | Decision path only — see WS8 OD1 | 06-open-decisions-and-readiness.md §S1 (Điều 34 decision path) |
"No design row claims Điều 34 as authority; Điều 34 row count in WS8 = 1 (decision-path only)" |
§11. Traceability matrix — §12 Old Infrastructure Coverage (31 rows incl. MP1)
Maps each of the 31 rows in Rev2 §12 to a design treatment. Evidence-level shorthand from Rev2 §12 retained.
| Row | Infra | EL | Design treatment site | Open gap |
|---|---|---|---|---|
| 1 | information_unit + axes |
VL | 04-… §3 brick fields |
— |
| 2 | IU compose ops | VL | 04-… §4.1 MOW step assembly |
— |
| 3 | IU split/merge | KG (G1) | 04-… §3.5 KG bridge — gated by review_decision_id |
G1 |
| 4 | IU trigger in/out | VL | 04-… §3.3 precondition/postcondition |
— |
| 5 | iu_sql_link |
VL | 04-… §4.4 MOUT output binding |
— |
| 6 | fn_iu_post_cut_axis_materialize |
VL + G2 | 06-… §S2 autowire decision (Phase 0) |
G2 |
| 7 | iu_metadata_tag + registry |
VL | 04-… §6 governance lifecycle (domain tags) |
— |
| 8 | iu_lifecycle_log |
VL | 04-… §6 governance audit |
— |
| 9 | event_outbox (~140k+) |
VL | 03-… §3 producers / §7 ledger |
— |
| 10 | event_type_registry |
VL | 03-… §3.1 register-before-emit |
— |
| 11 | event_pending / event_read / event_subscription |
VL | 03-… §4 consumers + §3 fanout |
— |
| 12 | job_queue / job_dead_letter / queue_heartbeat |
VL | 03-… §4 consumers / §6 DLQ / §6.3 heartbeat |
G4, G5 |
| 13 | cut_request + transition |
VL | 03-… §3.2 cut event family producer |
— |
| 14 | dot_iu_command_catalog (col mutating) |
VL | 03-… §4.2 executor class registry mapping |
G3 |
| 15 | dot_config (runtime gates) |
VL | 00-master-design-rev2.md §10 gate respect |
— |
| 16 | workflows / workflow_steps / workflow_step_relations |
VL | 04-… §4.1 MOW substrate |
— |
| 17 | workflow_change_requests |
VL | 02-… §8 proposal mode |
OD2 |
| 18 | workflow_categories |
VL | 04-… §4.1 classification taxonomy |
— |
| 19 | tasks / task_checkpoints / task_comments |
VL | 04-… §4.2 MOT substrate |
— |
| 20 | dot_iu_command_run |
VL | 03-… §6 audit ledger |
— |
| 21 | iu_route_* + iu_qdrant_collection_registry + iu_vector_sync_point |
VL (sync=false) | 04-… §3.6 + 03-… §3.4 (no cross-IU pollution) |
— |
| 22 | iu_notification_event |
VL | 03-… §4.3 notification executor |
— |
| 23 | Directus collections + legacy flows | LT | 04-… §4.5 Directus boundary; 00-master-design-rev2.md §3 boundary statement |
— |
| 24 | pg_cron legacy |
LT | 03-… §3.5 scheduled trigger producer; no queue role |
— |
| 25 | signal/event_outbox legacy (issue_opened 140 580 rows) |
KR + LT | 03-… §3.1 re-categorize via event_type_registry |
— |
| 26 | iu_piece_collection / iu_piece_membership / iu_collection_template_* |
VL | 04-… §3.7 bundle schema mapping |
— |
| 27 | iu_three_axis_envelope |
VL | 04-… §3.1 assembly_slot resolution |
— |
| 28 | field_registry |
CRS | 04-… §4.3 MOIT; depends on survey gate |
G7 |
| 29 | input_form_registry |
CRS | 04-… §4.3 MOIT; depends on survey gate |
G7 |
| 30 | output_table_registry |
CRS | 04-… §4.4 MOUT; depends on survey gate |
G7 |
| 31 | dot_function_registry |
CRS | 04-… §4.4 MOUT + 06-… §S13 OD13 ownership |
G7, OD13 |
Sentinel for CRS rows (G7): "No Phase-1 implementation depends on field_registry / input_form_registry / output_table_registry / dot_function_registry until WS8 survey gate (06-open-decisions-and-readiness.md §S1 survey checklist) returns evidence_level=verified_live."
§12. Traceability matrix — §13 Constitution / Law clause matrix
Each clause already maps in Rev2 §13. Design inherits without redefining. Below documents the design landing site so reviewers can verify in one place.
| Source | Binding | Design landing site |
|---|---|---|
| Hiến pháp NT13 | PG-first | 00-master-design-rev2.md §3 invariants |
| NT2/NT4 | Native/config-driven | 00-master-design-rev2.md §3 + each WS |
| NT12 / Điều 35 v5.2 | DOT-pair mutation | 03-event-5layer-… §4.2 executor class — DOT path |
| Điều 7 Assembly First | OSS = adapter | 05-oss-candidate-strategy-rev2.md §0 |
| Điều 28 / S178 | Nuxt render shell | 04-… §4 (Nuxt zero logic per role); 02-… §3, §6 |
| Điều 30 | Reversible by default | 06-… §S20 implementation sequencing |
| Điều 31 v1.2 | Integrity / audit | 02-… §7 governance UI; 03-… §6 DLQ |
| Điều 32 | Approval quorum | 04-… §4 (MOT does not own approval); 02-… §7 governance UI; 03-… §6 DLQ replay |
| Điều 33 v2.1 | 4-DB / 3-layer | 04-… §4 (MOIT/MOUT/realtime); 03-… §5 realtime gateway |
| Điều 34 DRAFT | Workflow law decision path | 06-… §S1 (decision-path only) |
| Điều 37 v3.3 | Governance org boundary | 02-… §7 governance UI (same layout / backend filter); each WS preserves role-permission backend |
| Điều 38 + Điều 39 | IU + KG | 04-… §3 + §3.5 |
| Điều 45 v1.0 §6.6 | Event ≠ job | 03-… §4 |
| Điều 45 §6.7 | Work_state_machine ≥9 | 02-… §3 (9-state floor) |
| Điều 45 §11.5 | Executor boundary | 04-… §4.2 MOT not executor; 03-… §4.2 executor class registry |
| Điều 45 §15.5 | Heartbeat caller | 03-… §4.3 heartbeat caller pattern; 02-… §7 governance UI |
| Điều 0-G | Birth registry | 03-… §3.1 register-before-emit |
| Vector law | No cross-IU pollution | 04-… §3.6 + 03-… §3.4 |
§13. Traceability matrix — §14 PG Maximization Map
| Artifact (Rev2 §14) | Live? | Design landing site | Open gap |
|---|---|---|---|
event_outbox |
✓ | 03-… §3 producers / §7 ledger |
— |
event_type_registry + JSON schema |
✓ | 03-… §3.1 + §8 compat |
OD8 |
trace_id / correlation_id / parent_span_id (W3C) |
partial | 03-… §3.3 envelope + 00-master-design-rev2.md §8 W3C adopt now |
— |
| Idempotency registry | GAP | 03-… §4.4 idempotency + 06-… §S11 schema (OD11) |
G5 / OD11 |
| Retry policy registry | partial | 03-… §4.5 retry policy registry |
— |
job_dead_letter (DLQ) |
✓ | 03-… §6 DLQ |
— |
| DLQ replay ledger | GAP | 03-… §6.4 replay ledger + 06-… §S10 (OD10) |
G4 / OD10 |
| Governance proposal state | ✓ (workflow_change_requests) |
02-… §8 proposal mode + 06-… §S2 (OD2) |
OD2 |
workflow_registry / step_def / steps |
partial | 04-… §4.1 + extension columns |
— |
task_def / tasks / checkpoints |
partial | 04-… §4.2 + extension columns |
— |
field_registry / input_form_registry |
CRS | 04-… §4.3 + 06-… §S1 survey gate |
G7 |
output_table_registry / dot_function_registry |
CRS | 04-… §4.4 + 06-… §S1 survey gate + OD13 |
G7 / OD13 |
executor_class_registry |
GAP | 03-… §4.2 + 06-… §S3 (OD3) |
G3 / OD3 |
| DOT catalog | ✓ | 03-… §4.2 (DOT executor class) |
— |
Runtime gates (dot_config) |
✓ | 00-master-design-rev2.md §10 (gate respect) |
— |
Audit evidence (iu_lifecycle_log, etc.) |
✓ | 04-… §6 + 03-… §6.5 audit timeline |
— |
Healthcheck (queue_heartbeat) |
✓ | 03-… §4.3 heartbeat caller pattern |
— |
| State machine registry (step/task) | GAP | 02-… §3.4 + 06-… §S9 (OD9) |
G6 / OD9 |
| Usage evidence registry (§10) | GAP | 04-… §3.5 schema + 06-… §S14 (OD14) |
usage-evidence GAP |
| IU bundle registry (§4) | partial | 04-… §3.7 mapping over iu_piece_collection* |
— |
§14. Traceability matrix — §15 OSS Candidate Strategy
| Tool / pattern | Rev2 §15 labels | Design landing site |
|---|---|---|
| pg-boss / Graphile Worker | L2 + L5 + L7 | 05-oss-candidate-strategy-rev2.md §3.1 |
| Temporal | L2 + L3 + L4 | 05-… §3.2 |
| Camunda | L2 + L6 | 05-… §3.3 |
| Airflow | L2 + L6 | 05-… §3.4 |
| Benthos / Redpanda Connect | L3 + L5 + L7 | 05-… §3.5 |
| NATS | L4 + L7 | 05-… §3.6 |
| Redis Streams | L4 + L7 | 05-… §3.7 |
| Hasura subscriptions | L2 + L6 | 05-… §3.8 |
| Directus realtime | L2 + L6 | 05-… §3.9 |
| Watermill | L3 + L6 | 05-… §3.10 |
| Centrifugo | L4 + L5 | 05-… §3.11 |
| W3C trace_id shape | L1 (adopt NOW) | 05-… §3.12 + 00-master-design-rev2.md §8 |
| OpenTelemetry collector | L4 (after trace_id ubiquity) | 05-… §3.13 |
| SSE / WebSocket / Centrifugo (gateway) | covered via Centrifugo L4/L5 + native SSE shell start | 05-… §3.14 |
| Jaeger | L4 (consumer-side OTel) | 05-… §3.15 |
Sentinel: "OSS strategy doc lists no tool with a final pin; every tool row has Gate A (state-vocab fit) + Gate B (config-first fit) verdict; no CI step / version pin / dockerfile mention."
§15. Traceability matrix — §16 Điều 34 DRAFT decision path
| Rev2 § | Binding | Design landing site | Open gap |
|---|---|---|---|
| §16 (decision path only — 3 branches; 4 criteria) | Decision path only; never authority; no enact, no merge, no draft new law | 06-open-decisions-and-readiness.md §S1 (Điều 34 decision path) |
OD1 |
Sentinel: "Master Design Rev2 cites Điều 34 zero times as authority; only one section enumerates the 3 decision branches (promote / merge-archive / keep-draft)."
§16. Traceability matrix — §17 Acceptance Criteria + §18 Completeness Checklist
Rev2 §17 PASS items (19 items, MP1–MP6 included) and §18 C1–C36 are inherited as design acceptance items. Master Design Rev2 acceptance = Rev2 brief acceptance ∪ the design-specific acceptance items in 00-master-design-rev2.md §11.
Sentinel: "Every Rev2 §17 PASS item appears, by reference, in 00-master-design-rev2.md §11 acceptance, with the design landing site cited."
§17. Traceability matrix — §19 Open Decisions (15 items)
All 15 items (OD1..OD15) flow to 06-open-decisions-and-readiness.md. Each OD also has a default proposal in Rev2 §19, which Master Design Rev2 keeps unless it has a counter-proposal with reason.
| OD | Topic | Design landing site | Default kept? |
|---|---|---|---|
| OD1 | Điều 34 decision path | 06-… §S1 |
Yes — decision pending Council |
| OD2 | Generic proposal table vs per-domain | 06-… §S2 |
Refined — see §S2 (reuse workflow_change_requests + design a generic proposal table for non-workflow proposals) |
| OD3 | executor_class_registry ownership |
06-… §S3 |
Refined — Điều XX referent (4 Mothers framework law future) with Điều 45 cross-ref as substrate |
| OD4 | Realtime gateway | 06-… §S4 |
Default kept — Nuxt SSE shell → backend gateway abstraction; preserve Centrifugo adapter slot |
| OD5 | CDC threshold | 06-… §S5 |
Refined — explicit Benthos/NATS adoption triggers |
| OD6 | Temporal/Camunda re-evaluation | 06-… §S6 |
Default kept — Phase 6+ review with metric triggers |
| OD7 | review_decision schema (split/merge) | 06-… §S7 |
Default kept — Phase 0 closes |
| OD8 | Event schema compat mode | 06-… §S8 |
Refined — event_type_registry with semver + forward-by-default, breaking changes need policy row |
| OD9 | Step state machine registry placement | 06-… §S9 |
Default kept — PG state_machine_registry table |
| OD10 | DLQ replay ledger schema | 06-… §S10 |
Default kept — dlq_replay_request ledger with Điều 32 approval |
| OD11 | Idempotency registry schema | 06-… §S11 |
Default kept — per-executor namespace + key |
| OD12 | Step states above 9 | 06-… §S12 + 02-… §4.5 |
Refined — adopt paused + cancelled as derived states; defer retrying + escalated (retrying captured by retry registry, escalated captured by waiting facet + governance) |
| OD13 | dot_function_registry ownership / naming |
06-… §S13 |
Default kept — MOUT-aligned namespace, registry SoT in PG |
| OD14 | Governance UI category taxonomy | 06-… §S14 + 02-… §7 |
Default kept — Rev2 §7.4 categories as v1 |
| OD15 | IU version policy | 06-… §S15 + 04-… §5 |
Default kept — pin by default + opt-in upgrade per workflow |
§18. Traceability matrix — §20 Forbidden block
Each Rev2 §20 forbidden mirrors a sentinel in this design:
| Rev2 §20 forbidden | Design sentinel |
|---|---|
| Không PG mutation | "Zero INSERT / UPDATE / DELETE against production PG in this macro" |
| Không Directus mutation | "Zero Directus writes; only read for boundary diagnostics" |
| Không Qdrant / vector write hay reindex | "Zero business-Qdrant write; iu_vector_sync_enabled=false respected; no iu_route_* / iu_vector_sync_point mutation" |
| Không migration | "No new migration in this macro; existing migrations referenced only for context" |
| Không DOT command run | "Zero dot_iu_command_run insert via this macro" |
| Không law enactment | "Master Design Rev2 references Điều XX as future framework only; Điều 34 only as decision path" |
| Không implementation macro | "No Phase 0/1/… implementation triggered; Phase sequencing is paper-only in WS8" |
| Không final OSS tool selection | "Tool labels only; no tool pin / version / CI step" |
| Không UI deployment | "No Nuxt/Directus deploy; UI is design-level only" |
| Không Master Design Rev2 until approval | "Triggered ONLY after user approval of Rev2 brief 2026-05-27 (per Rev2 §21 MP6); macro carries explicit approval reference" |
§19. Cross-cutting sentinels
These apply across all design docs and are listed once so reviewers can verify them in one pass:
- No-double-ownership grep — every law-owned concern referenced ≤1× per concern, and only under the law's surface.
- IU body singleton —
information_unit.canonical_body_*is the only IU body source; render layer is the only consumer; notasks.body/workflow_step_def.description_text/event_outbox.payload.body_textcarrying IU body. - Register-before-emit —
event_type_registrylookup precedes every producer write. - Heartbeat caller — every worker class has a heartbeat caller mapped to
queue_heartbeat. - Backend filter — every UI route fetches via backend; no Nuxt direct PG / outbox / NOTIFY.
- Gate respect —
dot_configruntime gates respected; design does not assumeiu_vector_sync_enabled=true, does not assumecomposer_enabledfor arbitrary IUs, etc. - Reversibility — every design extension declared with rollback path.
- Survey gate (G7) — Phase-1 design depends on no CRS row until survey returns VL.
§20. Summary
Rev2 brief sections covered: §0..§21, MP1–MP6 (= 19 PASS items + 36 completeness rows + 15 open decisions). Every section has a design landing site in this Rev2 design package. No requirement section is silently dropped.
Residual gaps tracked: G1, G2, G3, G4, G5, G6, G7 + the design-extension registries (state_machine_registry, executor_class_registry, idempotency_registry, dlq_replay_request, ui_design_system_registry, usage_evidence registry, iu_assembly_slot_registry, realtime_gateway_topic_registry). All extensions are paper-only in this macro and require Phase 0/1 approval before any DDL.
End traceability matrix.