S05 Cutover II - same-allocation/view + funded-dup family
Goal
The same-allocation identity scans and funded-duplication scans retire into partition classes + ledger events; per-field aggregate decomposition goes live; the hard 2+-owned-field aggregate-move cluster (struct_list_field flagship, carried dead-end 253’s named cure) is green.
Family (verified module list)
move_alias.rs, dup_inc.rs, call_arg_dup.rs, store_dup.rs, construct_fed.rs, nested_construct_return_passthrough.rs, sibling_union/, owner_borrow_view.rs, multi_exit_borrow_view.rs, closure_extract_borrow_view.rs, live_extract.rs + live_extract_site.rs, collection_literal_dead_source.rs, sharing_view_surplus.rs.
Work Items
- Cut the same-allocation/view + funded-dup family: move_alias.rs, dup_inc.rs, call_arg_dup.rs, store_dup.rs, construct_fed.rs, nested_construct_return_passthrough.rs, sibling_union/, owner_borrow_view.rs, multi_exit_borrow_view.rs, closure_extract_borrow_view.rs, live_extract.rs + live_extract_site.rs, collection_literal_dead_source.rs, sharing_view_surplus.rs replaced by partition classes + ledger events (sharing-view via the S02 CREDIT contract field)
- Per-field aggregate decomposition live: BurdenDecPartial skip_fields derived from partition consume marks (moved_fields fixpoint consumers migrate); the 2+-owned-field aggregate-move cluster (struct_list_field flagship) green under the gated probe
- Delete retired scans + toggles same-commit; KEPT cycles; family matrix (aggregates x niche-family sums x slices/substr views x closure captures x match-extract) + pins incl. sole-owner vs shared-across-N store shapes
- Gated probe zero-new (debug AND release); full ./test-all.sh green; cross-executor behavior, exact logical ownership/drop/unwind-event, and leak legs
Governing rules (embedded per plan self-containment)
- Calculus-first per arc.md CP-1: the governing theorem lands in compiled Lean BEFORE the consumer ships; never weaken a theorem to pass a shape; four-surface sync per CP-2 on every AIMS change.
- Verdict surface until S08 lands: the gated burden-sole probe
ORI_DISABLE_PREDICATE_STACK_RC=1 ORI_VERIFY_ARC=1 ORI_VERIFY_EACH=1viacompiler_repo/diagnostics/aot-guardrail.sh --floor(debug AND release), zero-new vscompiler_repo/compiler/ori_llvm/tests/aot/fixtures/corpus_under_flag_gate/baseline_failing_ids.txt. The default path is FALSE-GREEN until S08 (per arc.md STOP); never cite it as an RC verdict. - test-all is the compiler-state SSOT: every section-close verdict comes from a full ./test-all.sh run (background, flock-serialized; consume test-all-summary.json), never targeted runs alone.
- Banned cures (each a carried dead-end): use-count/type-membership PROXY discriminators (DE-150/174/175); broadening compute_genuine_same_alloc_reps / ForwarderUnionFind phi edges (DE-181); relocating a release past a multi-pred merge (DE-225/243/249/250); inc-only pair splits (attempt-287 290-UAF class); broad caller-side keep-alive incs (DE-254).
- Every retired scan/toggle records a KEPT ledger cycle with before/after teeth (collapse metric + floor).
- Cross-executor parity over evaluator, VM, LLVM debug/release/AOT, and admitted native/direct-WASM/JIT projections, plus exact logical ownership/drop/unwind-event correspondence and leak freedom, are per-section backend legs (L9 + L10). The AOT burden probe remains a current LLVM-projection migration gate, not the definition of AIMS correctness.
Test strategy
- Matrix: aggregates (1/2/3 owned heap fields) x niche-family sums x seamless-slice views x closure captures x match-extract x store-into-1/2 containers (sole-owner vs shared-across-N derived, not certified).
- Pins: struct_list_field exactly-one-release-per-field; slice co-owner no-surplus-inc + escaping-slice inc; DE-244/DE-250 negative pins (no whole-var admit change; per-field decs local).
- Before cutting any file, grep every real consumer of compute_funded_store_dup_aliases and compute_funded_call_arg_dup_aliases beyond the two Phase-5 dispatchers (scan_helpers::compute_owned_rc_filter, scan_orchestration::emit_burden_ops) — confirmed against source, not graph (the extractor under-resolves pub(crate)/crate:: re-export paths in this crate): compute_funded_call_arg_dup_aliases is REAL-called from BOTH scan_helpers.rs:205 AND scan_orchestration.rs:349, a joint Phase-A+Phase-B per-function cutover risk identical in shape to S04’s borrowed.rs/forwarder.rs treatment; compute_funded_store_dup_aliases is called from branch_release.rs:156 (S04’s OWN retiring file — verify against S04’s actual landed diff whether that import still exists before assuming a clean slate), construct_fed.rs:207 (S05-internal), aims/realize/burden_elim.rs:283 (Phase 6 elimination, direct crate::lower::burden_lower:: call), and aims/realize/emit_unified.rs:9296 (Phase 6/7). Retire compute_funded_store_dup_aliases and compute_funded_call_arg_dup_aliases as joint multi-site cutovers verified against ALL confirmed call sites, not per-dispatcher deletions — a worker touching only one dispatcher’s call list leaves the other half silently orphaned. Then cut the remaining family (move_alias.rs, dup_inc.rs, construct_fed.rs, nested_construct_return_passthrough.rs, sibling_union/, owner_borrow_view.rs, multi_exit_borrow_view.rs, closure_extract_borrow_view.rs, live_extract.rs + live_extract_site.rs, collection_literal_dead_source.rs, sharing_view_surplus.rs) over to partition classes + ledger events (sharing-view via the S02 CREDIT contract field).
Items
-
struct_list_field is NOT a floor cell today — confirmed absent from baseline_failing_ids.txt; it already passes via the OLD whole-var mechanism (burden_inc_kept_by_whole_var_disposition, RC-remark-confirmed: 70 locality-blocked + 32 cardinality-blocked of the 102-survivor population). ‘Green under the gated probe’ is therefore NOT sufficient success evidence — it is already true today and cannot distinguish a genuinely-exercised NEW per-field mechanism from the OLD mechanism silently still carrying the case. The actual evidence bar: (1) S03’s w-37cfb516 differential emitter-vs-scan harness proving the NEW per-field ledger mechanism produces equivalent-or-correct output vs the OLD mechanism on struct_list_field’s corpus — gated on S03’s own undischarged kill-criterion (the transfer_anchor_net / BUG-04-237 cyclic-CFG non-convergence regression pin) actually landing first; (2) a positive pin proving struct_list_field’s exactly-one-release-per-field fires via the NEW BurdenDecPartial skip_fields derived from partition-consume marks, not via the OLD moved_fields whole-var admission silently still firing underneath (the DE-244/DE-250 negative pins — no whole-var admit change; per-field decs local — are this mechanism); (3) a no-regression pin keeping struct_list_field out of the floor for the whole cutover. Per-field aggregate decomposition (BurdenDecPartial skip_fields derived from partition consume marks; moved_fields fixpoint consumers migrate) counts as live only once all three hold.
-
Author and green the family matrix (aggregates x niche-family sums x slices/substr views x closure captures x match-extract) + pins incl. sole-owner vs shared-across-N store shapes FIRST — including negative regression pins for the four historical bug shapes whose sole fix-site was compute_funded_store_dup_aliases (BUG-04-139 list-literal double-owned-field leak, BUG-04-173 direct two-store SIGSEGV + alias-store leak, BUG-04-176 branch-exclusive terminal-move leak, BUG-04-179 both-arms-store switch-match leak: four closed bugs, one function, each a special case added to the same ratchet the mission exists to replace), since store_dup.rs’s entire mechanism is being replaced and these are its own documented four-time-repeated failure history. Verify per-function test coverage by direct grep against lower/burden_lower/tests.rs and ownership_scans/tests.rs BEFORE assuming any of the ~90 family symbols is covered — the graph’s caller-resolution signal for this family is confirmedly unreliable across pub(crate)/crate:: re-export boundaries (3 of 3 spot-checked functions were false-negative). Only THEN delete each retired scan module + its ORI_DISABLE_* toggle in the same commit as recording its KEPT ledger cycle (collapse metric + floor teeth) — deleting before the matrix and pins are green removes the bisection fallback a cutover this size needs, the same sequencing defect S04’s own review corrected.
-
Close BUG-04-186’s S05-half (high, open, no scaffolded plan dir: ‘Aliveness-aware Phase-7 elision verdict flips 3 passing cells - needs the dup-funded/branch-exclusive event model before it can land’). Repro: the reverted BUG-04-182 cure (b) — aliveness-aware compute_elidable_fresh_self_alloc_incs via the Phase-6.99 walk — full-corpus A/B flipped cow_set_union_shared, set_int_operations_canonical, and probe_collect_set_result_multibranch_dead_freed; the verdict is provably righter per RL3_elision_net_preserving (position-blind elision strips load-bearing incs) but the walk must model dup-funded release events before it can land without flipping those cells. S04’s own already-landed fold-in work item (w-98394977) verifies S04’s branch-exclusive-event half of this repro and explicitly records this section’s dup-funded half as a residual cross-section dependency rather than closing prematurely — this item is that complementary S05-half, NOT a re-fold of BUG-04-180/-183/-241 (S04’s own scope, already dispositioned there; do not duplicate S04’s item). Once store_dup.rs/call_arg_dup.rs/dup_inc.rs are cut over to dup-funded ledger events (w-766222ca), re-run the full-corpus A/B against the three previously-flipped cells under the gated burden-sole probe with the aliveness-aware verdict now modeling dup-funded release events, and confirm the zero-flip obligation holds; treat the repro as a kill-criterion pin folded into the family matrix (w-79c0afb6). Close BUG-04-186 via the bug_tracker atomic flip API citing this section once green; if the branch-exclusive half S04 already verified plus this dup-funded half still cannot jointly discharge the zero-flip obligation, record the residual explicitly with an updated bug note rather than leaving it silently open through the cutover.
-
Before cutting any file, re-run the full consumer census for compute_funded_store_dup_aliases and compute_funded_call_arg_dup_aliases by direct source grep (grep -rn ‘compute_funded_store_dup_aliases|compute_funded_call_arg_dup_aliases’ compiler_repo/compiler/ori_arc/src/ —include=’.rs’), NEVER the graph (extractor confirmed under-resolves pub(crate)/crate:: re-export paths in this crate: call-arg fan-in reads 2 in the graph vs 5 in source). Verified census at 2026-07-07 HEAD: compute_funded_call_arg_dup_aliases <- scan_helpers.rs:205 (Phase-A dispatcher) + scan_orchestration.rs:349 (Phase-B dispatcher) + construct_fed.rs:208 (S05-internal) + burden_elim.rs:280 (Phase 6 elimination) + emit_unified.rs:9113 (Phase 6/7 realize); compute_funded_store_dup_aliases <- branch_release.rs:156 (S04 family file, ALIVE — S04 retired zero scan files) + construct_fed.rs:207 + burden_elim.rs:291 + emit_unified.rs:9320. The two computations are cross-phase SHARED PREDICATES, not Phase-5 scans. Design the cutover accordingly and record the decision in the section body: EITHER (a) derive ‘funded’ once in Stage-B (partition classes + CREDIT/Consume events) and migrate ALL Phase-6/7 consumers onto the ledger-derived facts, OR (b) retire only the SCAN role and record the predicates as legacy-fallback-only until S08 sweeps the legacy realize tail — naming which source is canonical at each stage (two live ‘is this consume funded’ authorities is LEAK:algorithmic-duplication). Kill-criterion: the compute_funded_ functions may be DELETED only when class-ledger-diff.sh shows zero fallback functions whose shapes exercise them AND all confirmed call sites are removed in the same commit; a per-dispatcher deletion silently orphans the Phase-6/7 half. The family cut itself is w-766222ca’s deliverable.
-
Retire each cut scan with an explicit, census-gated disposition — never a silent reinterpretation. Per scan module: (1) deletion is permitted ONLY when diagnostics/class-ledger-diff.sh shows zero fallback functions whose shapes exercise that scan AND w-5da6d021’s family matrix + pins are green under the NEW mechanism (S04’s corrected sequencing — deleting earlier removes the bisection fallback); (2) when deletion lands, delete the scan module + its ORI_DISABLE_* toggle in the SAME commit as recording its KEPT ledger cycle with before/after teeth (collapse metric + floor), sweeping every toggle doc home (oric/src/debug_flags.rs registration + arc.md Debugging entry; check-flag-docs.sh is the consistency gate) and coordinating with S10 (toggle-consolidation, in-progress in parallel) before touching debug_flags.rs/arc.md; (3) a scan whose fallback census cannot reach zero within S05 records an explicit deferral to S08’s compiled-counter adapter cutover in the section body/HISTORY — replacement coverage + KEPT teeth are then S05’s deliverable for that scan, with file deletion recorded as S08’s. The deletion-vs-coverage decision per scan is recorded, not implied.
-
Adjudicate BUG-04-255 and BUG-04-256 as S05 kill-criterion pins BEFORE the family cut completes — both re-verified open/critical this session and both fail the CLASS-LEDGER path (not just the legacy path) in S05-family shapes: BUG-04-255 (owned aggregate param branch-stored into a collection literal leaks its payload on ALL paths) is construct_fed/branch-store payload-funding territory; BUG-04-256 (struct-with-heap-field through a NESTED identity-forwarder chain double-frees on ALL paths; single hop green) is forwarder-identity/nested_construct_return_passthrough credit-chain territory. S04’s close anchored both to S09/S08 as ‘legacy-predicate-stack defects’, but the ALL-paths-incl-class-ledger repro contradicts that framing for their class-ledger half: cutting more shape families onto an emitter that mis-accounts these two shapes propagates the miss. Author their minimal repros as adversarial rows of the w-5da6d021 family matrix proving Stage-B’s funded-dup CONSUME and forwarder CREDIT-passthrough event families classify them correctly (green under the gated burden-sole probe with ORI_CLASS_LEDGER_EMITTER=1), OR record an explicit routing decision (which section owns each half, with rationale) in the section body + updated bug notes per routing.md — never a silent ride-along through the cutover.
-
Implement per-field aggregate decomposition in the class-ledger planner — the mechanism w-82951b54’s abandonment re-homed here and no other live item builds. Verified gap: PlannedOpKind in class_ledger/emit.rs:35 is exactly {Inc, Dec} (whole-var only). CP-1 calculus-first: BEFORE any Rust, name the governing compiled-Lean theorem for per-field decomposition consuming partition consume-marks (T1-T5 + PV-comp are landed; if no existing theorem covers the skip_fields derivation shape, prove the extension in scratch Lean first, land it, then implement; four-surface sync per CP-2). Then: add the per-field planned op (or a skip-set parameter on Dec) deriving BurdenDecPartial skip_fields from the S02 partition’s consume marks — the compile-time analog of Rust drop-elaboration’s Static/Dead per-field classification; scope per the Swift/Rust convergence: named struct/enum fields only (dynamically-indexed collection elements stay on the sharing-view CREDIT avenue), the user-drop-glue gate keeps declining (custom-Drop exclusion), niche-family sum variants gated by discriminant; migrate the moved_fields fixpoint consumers (IA-MF1’s release-active-assert discipline carries to any new fixpoint) and sibling_union/ per-field widening onto the partition-derived marks. Per-field accounting is an ADDITIVE side-table consumption — NEVER a widening of whole-var admission (DE-181 dead-end; compute_genuine_same_alloc_reps / ForwarderUnionFind are constrained symbols). Done only when w-b5b9372b’s three-part evidence bar holds.
Fresh intel (regenerated)
The terrain FLIPPED between this section’s authoring and now. The prior recon (2026-07-02) was written against a not-started plan; today S01-S04 are complete, and the class-ledger emitter is not a target — it is a LIVE, per-function-gated Phase-5 replacement (pipeline/aims_pipeline/mod.rs:269 -> apply_class_ledger_replacement; on replaced=true the legacy emit_burden_ops is SKIPPED, line 280) whose latest checked-in differential report says: 62 programs, 0 divergent, 187 functions REPLACED, 89 fallback — and the fallback ranking names S05’s work by name: zero-classes (67) > field-view-liveness (17) > readiness-not-clean (4) > trmc-context (1). The field-view-liveness gate (replace.rs:157, computed by field_view_hazard_classes at class_ledger/mod.rs:200) is EXACTLY this section’s same-allocation/view problem: a locally-released container class whose field-path VIEW classes are eventful in a different class — and a cure pass ALREADY EXISTS (cure_view_with_extraction_funding, mod.rs:246: RL-1 dup inc after each member-defining Project, re-planned + re-verified under owned semantics) but fails to verify Clean on 17 corpus functions. S05’s Stage-A/B/C work begins INSIDE that cure’s decline set, not on a blank slate.
Five decisive facts, each verified fresh this session:
- S04 set the cutover precedent: ZERO scan files were deleted. All 8 S04-family files (
borrowed.rs,forwarder.rs,branch_release.rs, …) still exist and are still dispatcher-wired (scan_orchestration.rs:666,719,771re-verified). S04 closed on replacement COVERAGE (187 replaced, floor-parity, valgrind matrix) with the legacy scans retained as the fallback path. [JOIN] S05’sw-79c0afb6(“Delete retired scans + toggles same-commit”) therefore needs an explicit re-scoping decision: a scan cannot be deleted while ANY fallback function still routes through it — deletion is gated on the fallback census for the scan’s shapes reaching zero (or explicitly deferred to S08’s compiled-counter adapter cutover), and the S04 precedent suggests the plan’s real per-section deliverable is replacement coverage + KEPT teeth, with file deletion landing later (§1, §2.2, §4.1). - The funded-dup fan-in GREW since the section body’s own
w-27894d74grep was recorded.compute_funded_call_arg_dup_aliasesnow has FIVE real call sites (scan_helpers.rs:205,scan_orchestration.rs:349,construct_fed.rs:208,burden_elim.rs:280NEW,emit_unified.rs:9113NEW);compute_funded_store_dup_aliaseshas FIVE (branch_release.rs:156— S04’s file, alive;construct_fed.rs:207,burden_elim.rs:291,emit_unified.rs:9320, +mod.rsre-exports). Phase 6 AND Phase 7 now consume BOTH funded sets. Cutting the scans requires migrating those Phase-6/7 consumers onto partition/ledger facts (or keeping the compute fns alive as shared predicates past the scan retirement) — a per-dispatcher deletion orphans four downstream consumers (§2.2, §3.1). - Two NEW critical bugs sit in S05’s exact shape territory and fail the class-ledger path too.
BUG-04-255(owned aggregate param branch-stored into a collection literal leaks its payload on ALL paths incl.ORI_CLASS_LEDGER_EMITTER=1— construct-fed / branch-store payload accounting) andBUG-04-256(struct-with-heap-field through a NESTED identity-forwarder chain double-frees on ALL paths; single hop green — forwarder-identity / nested-construct territory). Both were discovered by S04’s ownmove_borrow_matrixvalgrind harness. S04’s close routed their fold-in anchors to S09/S08 as “legacy-predicate-stack defects” — but both FAIL THE CLASS-LEDGER PATH, in S05-family shapes (construct_fed.rs,nested_construct_return_passthrough.rs,move_alias.rsforwarder-identity). [JOIN] Cutting more shape families over to an emitter that itself mis-accounts these two shapes propagates the miss; S05 must adjudicate them as its own kill-criterion pins or record an explicit deferral rationale (§4.2). - The class-ledger planner has NO per-field op.
PlannedOpKindis exactly{Inc, Dec}(emit.rs:35) — whole-var only.w-82951b54’s “BurdenDecPartial skip_fields derived from partition consume marks” is genuinely NEW planner machinery, and the legacymoved_fields/fixpoint (IA-MF1, release-active assert) +sibling_union/per-field widening are the consumers that must migrate. Per CP-1, a new planner op kind needs its governing compiled-Lean anchor named BEFORE the Rust (T1-T5 + PV-comp are landed; the per-field DECOMPOSITION consumption of partition consume-marks must cite which theorem covers it or extend via scratch-Lean-first) (§1, §3H). - The evidence bar the body already encodes still stands, with one gate DISCHARGED.
struct_list_fieldis still NOT a floor cell (live gated floor = 14 failing ids atb61c7ea61, percompiler_repo/build/aot-floor-gated.json; the 42-line baseline file carries stale prune-candidates), and the 102-survivorburden_inc_kept_by_whole_var_dispositionpopulation (70 locality-blocked + 32 cardinality-blocked) is unchanged perrc-cause-rank— so “green under the gated probe” remains a NON-signal for this cell, exactly asw-b5b9372brecords. The prior dossier’s decision-5 blocker is CLEARED:BUG-04-237(transfer-anchor entry-net non-convergence) is resolved — the differential harness’s verify core no longer carries that undischarged kill-criterion (§6, §9).
Decisions this package forces before any Rust is written:
- Pull the CURRENT fallback census per shape (
diagnostics/class-ledger-diff.sh;ORI_LOG=ori_arc::aims::class_ledger=debugfor per-functionmode/fallback_reason) and treat the 17field-view-liveness+ relevantzero-classesfunctions as the cutover worklist — the leverage is inevents.rs/emit.rs/verify.rs/cure_view_with_extraction_fundingcompleteness, NOT in touching the 13 old scans first (§3D). - Decide the deletion question explicitly against the S04 precedent: replacement-coverage-then-delete-later vs delete-in-section. Record the decision in the section body/HISTORY; do not let
w-79c0afb6be silently reinterpreted (§0 fact 1). - Adjudicate BUG-04-255/256 routing NOW (S05 pins vs S09/S08 anchors) — both fail the class-ledger path in S05-family shapes; the “legacy-only defect” framing S04’s close used does not hold for these two (§4.2).
- Resolve the BUG-04-186 landing-surface tension: the bug note says “stays open pending S05+S07 (landing surface S07)”, S05’s own
w-92fa46c5says close it citing this section once green. Re-run the 3-cell zero-flip A/B after the dup-funded events land and record which section closes it (§4.2). - Design the per-field planner op (
w-82951b54) as an ADDITIVE side-table consumption per the Swift/Rust convergence (§7): named struct/enum fields only, never dynamic-index paths; whole-var default untouched; the Rust drop-elaboration Static/Dead/Conditional/Open categorization is the closest shipped analog of skip_fields derivation (§7.2).
DIG DEEPER
python -m scripts.plan_corpus.read plans/aims-provenance-ledger --completion
python3 -c "import json; d=json.load(open('compiler_repo/build/class-ledger-diff.json')); print(json.dumps(d['summary'],indent=1))"
python3 -c "import json; print(json.load(open('compiler_repo/build/aot-floor-gated.json'))['failing_ids'])"
grep -rn 'compute_funded_store_dup_aliases\|compute_funded_call_arg_dup_aliases' compiler_repo/compiler/ori_arc/src/ --include='*.rs' | grep -v tests
(full dossier: cutover-same-alloc-views—s-48dfbd12.intel.md)
Funded-predicate census + cutover authority decision (w-e313740b, 2026-07-07)
- Census re-verified by direct source grep at compiler HEAD 61738a851 (graph under-resolves this crate’s re-export paths; source grep is the census instrument):
compute_funded_call_arg_dup_aliases<- scan_helpers.rs:205 (Phase-A dispatcher), scan_orchestration.rs:349 (Phase-B dispatcher), construct_fed.rs:208 (S05-internal), burden_elim.rs:280 (Phase-6 elimination), emit_unified.rs:9113 (Phase-6/7 realize). 5 live call sites.compute_funded_store_dup_aliases<- branch_release.rs:156 (S04 family file, alive), construct_fed.rs:207, burden_elim.rs:291, emit_unified.rs:9320. 4 live call sites.
- DECISION: option (b) — retire the SCAN role only; the predicates stay legacy-fallback-only until S08 sweeps the legacy realize tail. Canonical funded-authority per stage:
- REPLACED functions (
ORI_CLASS_LEDGER_EMITTER=1, readiness gate green): Stage-B ledger facts are the SOLE authority — partition classes + Credit/Consume events + seed-funded demand surfaces (demand_blocks_excluding_seeded/plan_incsfunded pricing). The replacement skips legacy emission AND Phase-6 elimination/repairs wholesale (ArcFunction::class_ledger_emission), so no function ever mixes the two authorities. - FALLBACK functions:
compute_funded_*remain the sole cross-phase authority (Phase-5 scans, Phase-6burden_elim, Phase-6/7emit_unified) — the per-function replacement gate IS the dispatcher between the two authorities; within any one function exactly one authority is live (noLEAK:algorithmic-duplication— the duplication is partitioned, never co-consulted).
- REPLACED functions (
- Kill-criterion (unchanged): DELETE
compute_funded_*only whenclass-ledger-diff.shshows zero fallback functions whose shapes exercise them AND all 9 confirmed call sites are removed in the same commit; per-dispatcher deletion silently orphans the Phase-6/7 half.
Per-scan retirement dispositions (w-9d2bed53, 2026-07-07)
Census instrument: diagnostics/class-ledger-diff.sh at compiler HEAD 61738a851 — 208 fallback functions remain (zero-classes 171, trmc-context 23, field-view-liveness 11, field-decomposition-shape 2, readiness-not-clean 1), so NO cut scan’s fallback census can reach zero within S05 (a zero-classes fallback runs the whole legacy walk, exercising every scan). Every cut scan therefore takes disposition (3) — explicit deferral, never silent:
| Cut scan module | Disposition | S05 deliverable (done) | File deletion owner |
|---|---|---|---|
| move_alias.rs, dup_inc.rs, call_arg_dup.rs, store_dup.rs | (3) deferred | Replacement coverage via seed-funded demand surfaces + credit-kill funding; KEPT teeth below | S08 compiled-counter adapter cutover |
| construct_fed.rs, nested_construct_return_passthrough.rs | (3) deferred | Forwarder CREDIT-passthrough + construct-fed classification; BUG-04-255/256 adversarial pins green under the emitter | S08 |
| sibling_union/ | (3) deferred | Per-field accounting via partition consume marks + DecPartial skip derivation (PV-6/IA-T6) | S08 |
| owner_borrow_view.rs, multi_exit_borrow_view.rs, closure_extract_borrow_view.rs | (3) deferred | Field-view hazard discrimination + extraction-funding / field-decomposition cure ladder | S08 |
| live_extract.rs + live_extract_site.rs | (3) deferred | Fresh-sum live-extract shapes replace via congruence-composed field classes | S08 |
| collection_literal_dead_source.rs, sharing_view_surplus.rs | (3) deferred | Funded store-family pricing + sharing-view CREDIT avenue | S08 |
compute_funded_store_dup_aliases/compute_funded_call_arg_dup_aliasesare cross-phase shared predicates, NOT scans — their authority partition is the w-e313740b decision (b) record above; same S08 deletion gate.- No ORI_DISABLE_* toggle is deleted in S05 (disposition (2) fires only at deletion); S10 toggle-consolidation coordinates any debug_flags.rs/arc.md sweep at that point.
- KEPT coverage teeth (ledger cycle appended this date): replaced functions 532 -> 598 and field-view fallbacks 77 -> 11 across the S05 increments, differential sweep 0 divergent over 226 programs, gated AOT floor 14 ids byte-identical to the S04 close.