## Step A: Feature Detection - LoopPatternKind::InfiniteEarlyExit (Pattern 5) 追加 - LoopFeatures::is_infinite_loop フィールド追加 - detect_infinite_loop() で loop(true) 検出 ## Step B: Classification Logic - classify() を更新: Pattern 5 を Pattern 4 より優先 - Pattern 4 を狭化: has_continue && !has_break のみ - 誤ルーティング完全除去 ## Step C: Pattern Module - pattern5_infinite_early_exit.rs 新規作成 - Fail-Fast 設計: 超狭い shape guard - lowering はスケルトン(Phase 131-11-D で実装) ## 動作確認 - Pattern 5 正常検出 ✅ - Shape guards 動作(1 break, 1 continue, 1 carrier)✅ - Pattern 4 誤ルーティング回避 ✅ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
loop_scope_shape
LoopScopeShape を箱化し、JoinIR lowering からの質問をここに集約するよ。
shape.rs: 変数分類の SSOT。pinned/carrier/body_local/exit_live と API を提供。builder.rs: LoopForm + Trio を受け取って LoopScopeShape を組み立て。Case-A ルーティング込み。case_a.rs: Case-A minimal ターゲット判定(Phase 30 F-3.1 のハードコード集合)。context.rs: generic_case_a 共通の CaseAContext。tests.rs: 既存仕様の回帰テスト。
責務の境界:
- 解析・分類の仕様は shape.rs に閉じ込める(他層は API で参照)。
- 新しい入力経路を足すときは builder.rs に箱を追加し、shape.rs の SSOT を崩さないこと。