refactor(edgecfg): add Frag/ExitKind API entrypoint (Phase 264 design-first)

Phase 264 P0: EdgeCFG Fragment 入口API作成(実装置換なし)

- 入口フォルダ作成: src/mir/builder/control_flow/edgecfg/api/
- コア型定義: ExitKind, EdgeStub, Frag
- 合成関数シグネチャ: seq, if_, loop_, cleanup(中身TODO、pub(crate))
- 最小テスト: 3個のユニットテスト追加(frag.rs)
- ドキュメント連動: edgecfg-fragments.md に実装入口追記

制約遵守:
- 既存 pattern6/7/8 未改変
- merge/EdgeCFG 未改変
- 既存LoopId使用(control_form.rs に PartialOrd, Ord 追加)
- MIR側EdgeArgs使用(JoinIRと混線回避)
- BTreeMap採用(決定的順序保証、Phase 69-3 教訓)

次フェーズ: Phase 265 で Pattern8 適用時に compose::loop_ を実装

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-21 12:49:53 +09:00
parent be4de67601
commit 923a442326
12 changed files with 630 additions and 22 deletions

View File

@ -64,14 +64,25 @@ Related:
- 最小再現 fixture + smoke で固定(先に失敗を SSOT 化)
- Pattern2 が不成立のときは “部分続行” せず `Ok(None)` で fallback既定挙動不変
- **Phase 263+planned / refactor: Pattern2 PromoteDecision API hardening**
- ねらい: “Reject でも続行して後段で落ちる” を構造で不可能にする(迷子防止)
- 形(最小):
- `PromoteStepBox::try_promote(...) -> Result<PromoteDecision, String>`
- `PromoteDecision::{Promoted, NotApplicable, Freeze}`
- 受け入れ条件:
- orchestrator が `NotApplicable` を受け取ったら Pattern2 を `Ok(None)` で抜けて fallbackSSOT
- “Reject=continue” のような曖昧挙動がコードから消える
- **DONEPhase 263 P0.2: Pattern2 PromoteDecision API hardening**
- 入口SSOT: `src/mir/builder/control_flow/joinir/patterns/pattern2/api/`
- `PromoteDecision::{Promoted, NotApplicable, Freeze}``try_promote(...)` に参照点を収束Option揺れを撤去
- **Phase 264✅ 入口作成完了): EdgeCFG Fragment 入口作成design-first**
- **ステータス**: ✅ 入口作成完了(適用は次フェーズ)
- **実装内容**:
- `edgecfg/api/` フォルダに SSOT 入口作成
- `ExitKind`, `EdgeStub`, `Frag` の型定義
- `seq`, `if_`, `loop_`, `cleanup` のシグネチャ固定pub(crate)
- 最小ユニットテスト 3個
- ドキュメント連動edgecfg-fragments.md
- **制約遵守**:
- 既存 pattern6/7/8 未改変
- merge/EdgeCFG 未改変
- cargo test -p nyash-rust --lib --no-run 成功確認
- **次フェーズへの橋渡し**:
- Phase 265 で Pattern8 適用時に `compose::loop_` を実装
- 再利用確認後、pattern番号分岐を段階的に削減
- **real-app loop regression の横展開VM + LLVM EXE**
- ねらい: 実コード由来ループを 1 本ずつ最小抽出して fixture/smoke で固定する(段階投入)。