# Phase 29aa: RC insertion safety expansion(CFG-aware design) Status: P3 In Progress (Jump→Return single-predecessor propagation) Scope: Phase 29z の単一block限定実装から、誤releaseを起こさない形で CFG-aware に拡張するための設計を固める。 Entry: - SSOT: `docs/development/current/main/phases/phase-29y/20-RC-INSERTION-SSOT.md` - 指示書: `docs/development/current/main/phases/phase-29aa/P0-RC_INSERTION_CFG_AWARE_DESIGN-INSTRUCTIONS.md` Non-goals: - 既定挙動変更(feature `rc-insertion-minimal` 以外は no-op 維持) - SSA last-use を根拠にした drop - いきなり全ケース実装(設計+最小プロトタイプを優先) Deliverables (P0): - RcPlan(解析→挿入の二段階)設計 - PHI/loop/early-exit の危険パターン整理と Fail-Fast 方針 - release 安全条件の契約 - P1 で実装する最小ターゲットを 1 個に絞る Progress: - P0: CFG-aware 設計の固定(RcPlan/危険パターン/安全条件の契約) - P1: rc_insertion を RcPlan の Plan→Apply 2-stage へ分離(挙動不変) - P2: Jump/Branch 終端では cleanup を入れない契約を SSOT 化(Fail-Fast guard) - P3: Jump→Return(単一 predecessor)で state 伝播し ReturnCleanup を成立させる(P2維持) P3 SSOT: - Contract: - cleanup は Return block の BeforeTerminator のみ(Jump/Branch block には入れない) - Jump→Return かつ predecessor が 1 つの場合のみ state 伝播を許可 - 条件不一致で伝播/cleanup を試みたら debug_assert! で Fail-Fast - Non-goals: - Branch/PHI/loop/early-exit の cleanup - multi-predecessor の合流(PHI 問題回避) - Jump block への release 挿入(P2維持) - Acceptance: - quick 154/154 PASS 維持 - `cargo run --bin rc_insertion_selfcheck --features rc-insertion-minimal` PASS - 既定OFF維持(featureなしは no-op)