25000x · 00 — PASS summary (Event Automation + Real Product Scaleout + UI/Ops Finalization, 38b954d → 6db364d)
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 tableiu_auto_instantiate_event_log(sidecar, PK=instance_collection_id, FK to mig 031 lineage withON DELETE CASCADE, UNIQUE idempotency_key, CHECK emit_mode)+2 viewv_iu_auto_instantiate_event_log(per-row template+instance digest match) +v_iu_auto_instantiate_event_summary(per-template/per-mode rollup)+2 fnfn_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 configiu_core.auto_instantiate_enabled = false(LIVE-mode gate, default closed)+1 event_typeiu.template.instance_auto_composed(registered, inert)- Rollback
sql/iu-core/rollback/033_auto_instantiate_from_event.rollback.sqlwith 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_composedevent_type is registered withdelivery_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.dumpsha256f8f8c80222bf56d2aca5daa715cee154c61c4f93dc5ee74d12081b6e0ed96f8f - Post-mutation pg_dump:
/root/backups/directus-post-iucore-25000x-20260525T050158Z.dumpsha256c00074d69b9106cc0e664080284f70504f17c0efcc675d1ee6757aaabb9ff68b