KB-5657

25000x · 00 — PASS summary (Event Automation + Real Product Scaleout + UI/Ops Finalization, 38b954d → 6db364d)

9 min read Revision 1
iu-corev0.625000xpass-summaryevent-automationauto-instantiate-productizationmigration-033bulk-scaleout-orchestratorfile-template-versioningreadiness-matrix

25000x · 00 — PASS summary

Macro: IU_CORE_25000X_EVENT_AUTOMATION_REAL_PRODUCT_SCALEOUT_UI_OPS_FINALIZATION Outcome: IU_CORE_25000X_EVENT_AUTOMATION_REAL_PRODUCT_SCALEOUT_UI_OPS_PASS Date: 2026-05-25 Repo HEAD (start): 38b954d (clean, main) — IU_CORE_18000X_PASS state Repo HEAD (end): 6db364d Parent baseline: IU_CORE_18000X_TEMPLATE_VERSIONING_BULK_SCALEOUT_EVENT_OPS_PASS

Headline

Moved Product Factory from "template versioning + bulk + sandbox auto-instantiate proof" (18000x) → "durable event-driven product factory + cross-template observability hardened + UI/Ops closeout documented".

The macro turned 18000x's sandbox-only auto-instantiate proof (file 08-auto-instantiate-from-event-proof.md) into a gate-guarded, idempotent, rollback-addressable, observable orchestrator (migration 033 — fn_iu_auto_instantiate_from_event + sidecar log + REFUSED-guarded rollback). Then drove it in LIVE mode to compose 13 durable instances (1 closeout proof + 12 bulk scaleout from 2 templates) — all digest-matching, all event-correlated, all rollback-addressable by actor tag.

Also closed 18000x's last carry-forward observability flag: tpl:file:status-report/v1 is no longer unversioned — v2 created with 6 pieces (5 reused + 1 new executive_summary intro piece) and registered into a 2-step version chain that auto-supersedes v1.

Surface

  • Migration 033 authored + applied LIVE @ prod:
    • +1 table iu_auto_instantiate_event_log (sidecar, PK=instance_collection_id, FK to mig 031 lineage with ON DELETE CASCADE, UNIQUE idempotency_key, CHECK emit_mode)
    • +2 view v_iu_auto_instantiate_event_log (per-row template+instance digest match) + v_iu_auto_instantiate_event_summary (per-template/per-mode rollup)
    • +2 fn fn_iu_auto_instantiate_from_event(uuid, text, uuid, text, text, text, text) (orchestrator) + fn_iu_auto_instantiate_rollback_by_actor(text, boolean) (actor-scoped cleanup with dry_run default)
    • +1 config iu_core.auto_instantiate_enabled = false (LIVE-mode gate, default closed)
    • +1 event_type iu.template.instance_auto_composed (registered, inert)
    • Rollback sql/iu-core/rollback/033_auto_instantiate_from_event.rollback.sql with REFUSED guard on non-empty log rows.
  • D9 conformance: 7/7 PASS at 181 objects (table 28→29, view 28→30, function 63→65, trigger 6, config 12→13, event_type 21→22, route 16).
  • DOT catalog: 24 governed entries — unchanged (the new orchestrator is a function with gate enforcement, not yet a DOT command; carry-forward).

Durable artifacts

Artifact Identifier Counts Status
File template v2 tpl:file:status-report/v2 coll 8f9c8a29-3962-4b60-b557-4358dcfac7f6 digest 378497f617b4… 6 active pieces (5 reused from v1 + 1 new exec_summary) current
File template family chain tpl:file:status-report v1 superseded → v2 current family_chain_length=2, digest_drift_from_previous=t green
Durable auto-instantiate proof tpl-inst:auto:25000x-durable-001 coll c23fd63d-…cee14 event 25000d25-…0001, actor iu-core-25000x-durable, idemp df7bcf71… digest_matches=t
Bulk scaleout from tpl:wf:onboarding/v2 tpl-inst:auto:25000x-bulk-wf-001..008 (8 instances) actor iu-core-25000x-bulk, events 25000b00-…001..008 all digest_matches=t
Bulk scaleout from tpl:file:status-report/v2 tpl-inst:auto:25000x-bulk-file-001..004 (4 instances) actor iu-core-25000x-bulk, events 25000b10-…001..004 all digest_matches=t

Total auto-instantiate log rows: 13 (1 durable + 12 bulk), 100% live mode, 100% digest_matches_template=true, distributed across 2 actors for clean rollback addressability.

Cross-template observability — final state

Template Version Status Instances Digest matches Digest diverges template_without_version
tpl:file:status-report/v1 v1 superseded 0 0 0 f (cleared by 25000x)
tpl:file:status-report/v2 v2 current 4 4 0 f
tpl:wf:onboarding/v1 v1 superseded 1 1 0 f
tpl:wf:onboarding/v2 v2 current 12 12 0 f
  • Zero unversioned current templates (was 1 carry-forward from 18000x).
  • Zero orphan instances (no lineage row points at an unmarked template).
  • Zero digest drift between any instance and its template.
  • Both template families have explicit version chains with digest_drift_from_previous=t (genuine evolution between v1 and v2).

Phase C bounded BEGIN/ROLLBACK proof — 12 probes, all green

Probe Path Expected Actual
C1 invalid_input (NULL event_id) refused {"status":"invalid_input"}
C2 invalid_emit_mode ('shadow') refused {"status":"invalid_emit_mode"}
C3 live mode with auto-instantiate gate CLOSED refused {"status":"live_gate_closed"}
C4 dry_run with composer gate CLOSED refused {"status":"composer_gate_closed"}
C5 template_not_marked (non-template target) refused {"status":"template_not_marked"}
C6 template_collection_not_found (zero UUID) refused {"status":"template_collection_not_found"}
C7 happy-path dry_run ok, 5 pieces attached, digest match
C8 idempotent_replay (same event×template×suffix twice in TX) second call returns existing instance_collection_id
C9 happy-path LIVE (both gates ON in TX) ok, 5 pieces attached, digest match
C10 actor-scoped rollback dry_run reports 1/1/1 would-delete
C11 post-rollback log durability 0 rows for any C* actor
C12 post-rollback gates both gates false

Phase E bulk scaleout — 12/12 ok

fn_iu_auto_instantiate_from_event looped twice inside one TX (8 wf + 4 file), gate-toggle inside BEGIN/COMMIT per [[feedback-in-tx-gate-toggle-reversibility]]. 12 NOTICE lines all -> ok, digest_matches=true for all 12, gates returned to false before COMMIT, 12/12 durable post-commit.

Regression matrix

Surface Before After Delta Verdict
information_unit 174 175 +1 (exec_summary piece) expected
iu_piece_collection 10 24 +14 (1 file/v2 + 1 durable + 12 bulk) expected
iu_piece_membership 43 118 +75 (6 + 5 + 85 + 46) expected
iu_collection_template_instance_lineage 4 17 +13 (1 durable + 12 bulk) expected
iu_auto_instantiate_event_log n/a 13 new (mig 033) expected
iu_collection_template_registry (templates) 3 4 +1 (file/v2) expected
iu_collection_template_version 2 4 +2 (file v1+v2) expected
iu_vector_sync_point 152 152 0 invariant ✓
Qdrant iu_core_iu_chunks 149 149 0 invariant ✓
Qdrant production_documents 9456 9456 0 invariant ✓
iu_lifecycle_log 146 146 0 invariant ✓
event_outbox (iu domain) 125 214 +89 expected (compose+lineage events)
event_outbox (system domain) 123246 123246 0 invariant ✓
DIEU-28/32/35 envelope axes 27/23/36 27/23/36 0 invariant ✓
IU Core write gates inert 10/10 11/11 +1 gate (auto_instantiate_enabled) all closed post
Tests passing 1324 1324 0 green ✓
D9 conformance 174 / 7 PASS 181 / 7 PASS +7 green ✓

Authority boundary — what this macro did NOT do

Per the authority pack:

  • PR #669 — UNTOUCHED. No comment posted, no merge attempted.
  • Nuxt — UNDEPLOYED. No deploy/restart.
  • Retention — NOT ENABLED. Gate remained false; retention dry-run check confirmed candidates count surface is still operational without enabling cleanup.
  • production_documents — UNTOUCHED. No Qdrant writes; iu_core_iu_chunks count unchanged.
  • No external delivery. Internal-only event substrate; the iu.template.instance_auto_composed event_type is registered with delivery_lane='delayed' and no route attached.
  • No daemon / no cron started. The orchestrator is a SQL function the operator drives; bulk scaleout used a single PL/pgSQL loop inside one TX.

Lessons + carry-forward

See 11-lessons-and-carry-forward.md. Five new lessons added; 16 pinning tests bumped per macro per [[feedback-pinning-tests-bump-per-macro]].

Pointers

  • Evidence bundle: 12-evidence-bundle-pointer.md
  • Operator runbook addendum: OPERATOR_RUNBOOK_25000X_ADDENDUM.md
  • Pre-mutation pg_dump: /root/backups/directus-pre-iucore-25000x-20260525T044033Z.dump sha256 f8f8c80222bf56d2aca5daa715cee154c61c4f93dc5ee74d12081b6e0ed96f8f
  • Post-mutation pg_dump: /root/backups/directus-post-iucore-25000x-20260525T050158Z.dump sha256 c00074d69b9106cc0e664080284f70504f17c0efcc675d1ee6757aaabb9ff68b
Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-iu-core-25000x-event-automation-real-product-scaleout-ui-ops-open-goal/00-pass-summary.md