KB-492D
Endgame Campaign — 09 Expanded 4 Mothers Non-Runtime Dry Assembly
4 min read Revision 1
4mothersdry-assemblynon-runtimeconfig-envelopecapabilityno-double-ownershipmowmotmoitmout2026-05-28
09 — Expanded 4 Mothers Non-Runtime Dry Assembly
Verdict: COHERENT and closer to live substrate than before. This dry assembly now binds to committed live objects: 4 draft factory rows (governance_registry), the capability jsonb matrix, assembly.* domains, and 9 dormant mother.* event types. No runtime, no generation, no UI, no queue execution.
1. Substrate now live (vs prior paper-only)
- Factory identity:
GOV-MOW/MOT/MOIT/MOUT(draft) — real rows. - Capability matrix: real
capabilityjsonb per factory (can_create / can_reference / must_not_own). - Output domains:
assembly.workflow/.task/.input/.output— realdot_domains. - Event taxonomy:
mother.*(9, dormant) — realevent_type_registryrows.
2. Per-Mother config envelopes (dry — no runtime)
MOW (Mother of Workflows) — output_target workflows
- can_create:
workflows; can_reference: tasks, input_form_registry, design_templates, IU; must_not_own: all referenced. - input contract: a workflow spec (IU refs + task refs). output contract: a
workflowsrow (proposed). event contract:mother.config.created→mother.output.created|mother.output.failed. governance: proposal →mother.proposal.created→ human approve.
MOT (Mother of Tasks) — tasks
- can_create:
tasks; can_reference: IU, field_registry, workflows; must_not_own: workflows, IU, design_templates. - output: a
tasksrow (proposed); references workflows but never owns them (no double ownership).
MOIT (Mother of Input Templates) — input_form_registry
- can_create:
input_form_registry,field_registry; can_reference: IU, design_templates; must_not_own: workflows, tasks, design_templates. - Depends on G1 (input_form_registry/field_registry tables don't exist yet) — config valid, production blocked until G1.
MOUT (Mother of UI/Output Templates) — design_templates
- can_create:
design_templates; can_reference: IU, input_form_registry; must_not_own: workflows, tasks, input_form_registry.
3. Cross-cutting contracts
- Input: all Mothers read IU via
fn_iu_subtree/v_kg_edges_all(read-only); never mutate IU. - Output: each writes exactly one output family as a proposal, never active, never another Mother's family.
- Event: lifecycle =
factory.registered→config.created→output.created/output.failed; governance =proposal.created→proposal.approved/rejected; gating =governance.blocked/unblocked. All dormant. - Governance: activation + every output requires human Điều 32 (G3); roles per G2 (doc 04).
- KG usage: Mother outputs relate to source IU via
iu_relation(derived_from/contains) once the vocab + DOT enrichment land (doc 06).
4. No-double-ownership (live-proven, doc 02 §3)
Pairwise can_create disjoint; per-row can_create ∩ must_not_own = ∅. The 4 envelopes are mutually exclusive on creation and reference-only on everything else. Điều 7 Assembly-First holds at the data level, not just on paper.
5. What's still paper (blocks runtime)
- G1 (MOIT/MOUT output tables), G3 (proposal certification), G2 (human roles), Điều 45 enactment + job substrate (
executor_class/retry_policy/idempotency_keyabsent). Until all clear, the assembly is config-describable but not executable.