IU Core 120x Three-Axis — 04 Non-reparent rollout + delivery seam
04 — Non-reparent Rollout + Delivery Seam
Non-reparent rollout — runtime/240
240_durable_deprecate_scratch_batch.sql completed the non-reparent rollout
the 60x macro began. The 60x macro durably deprecated ONE stale scratch IU;
this batch deprecated every remaining one in a single bounded transaction.
Candidates selected by live discovery — the same structural predicate
runtime/210 used, without the LIMIT 1: every live IU that is draft, has
no doc_code, is flat, a leaf, in no iu_relation edge and in no
iu_structure_operation. No id, no doc baked.
| Check | Result |
|---|---|
| batch | 11 stale pilot.*/test/* scratch IUs deprecated |
| B1 ops | deprecate_piece total = 12 (1 from runtime/210 + 11 here), all enacted |
| B3 remaining | 0 scratch IU still draft — the stale scratch population is fully retired |
| B4 gate | iu_core.structure_ops_enabled = false (layer inert) |
Each op ran plan → apply → verify inside one BEGIN…COMMIT; the structure-op
gate was opened and closed inside the same transaction; any verify failure
RAISEs and rolls the whole batch back (all-or-nothing). Each op is reversible
via fn_iu_structure_op_rollback (compensation snapshot in impact_summary).
Worker dry-run evidence — runtime/150
The 11 deprecate_piece applies emitted 11 structure_piece_deprecated
events. runtime/150 ran the route worker over them:
| Stage | Result |
|---|---|
| I1 pre-health | healthy=true, backlog_iu_events=11 |
| I2 run | seen=11 attempts_written=11 dead_lettered=0 |
| I3 post-health | backlog=0, events_seen_total=56, dead_lettered_total=0 |
| I4 audit | route_attempts=56, dead_letters=0 |
This is the first durable worker dry-run evidence for the non-reparent
structure-event family — 11 durable dry_run iu_route_attempt rows on the
iu.structure_piece_deprecated.workflow route (closes 60x open gap #2).
Delivery seam — stays internal-only
The migration-013 delivery seam is unchanged: fn_iu_route_deliver delivers
ONLY to the internal fn_iu_structure_consumer, triple-gated
(fn_iu_delivery_enabled + the route allowlist + the target whitelist).
iu_core.delivery_enabled=false, iu_core.delivery_live_routes='' — the seam
is inert. The 11 deprecate events were processed dry_run, not delivered.
Decision on broader internal sent attempts: sandbox/080 D7 already proved
the worker→deliver→consumer chain safe at scale (44 internal deliveries,
BEGIN…ROLLBACK). Broader durable internal delivery is therefore proven safe
but was deliberately NOT exercised durably this macro — the macro's durable
delivery footprint stays exactly the one sent row from the 60x macro. A
broader durable internal-delivery run is a bounded next-macro option, not a
120x requirement. External delivery stays blocked.
State after
iu_structure_operation 46→57 (45 reparent + 12 deprecate); information_unit
lifecycle 12 deprecated / 86 draft / 60 enacted; event_outbox iu 45→56;
iu_route_attempt 45→56 (55 dry_run + 1 sent); iu_route_dead_letter 0.