KB-D289

IU Core 120x Three-Axis — 04 Non-reparent rollout + delivery seam

4 min read Revision 1
dieu44iu-core-mvp120xnon-reparent-rolloutdeprecate-pieceruntime-240delivery-seamv0.62026-05-22

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.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-iu-core-120x-three-axis-metadata-delivery-autocut-textcode-open-goal/04-nonreparent-rollout-delivery.md