refactor(mir): Phase 138-P1-A - loop_canonicalizer を4モジュール分割

## 概要
- 931行の mod.rs を 4モジュール + 161行 mod.rs に分割
- 全14テスト PASS、退行なし

## モジュール構成
- skeleton_types.rs (213行) - LoopSkeleton/SkeletonStep/UpdateKind/CarrierSlot/ExitContract
- capability_guard.rs (104行) - RoutingDecision/capability_tags
- pattern_recognizer.rs (249行) - try_extract_skip_whitespace_pattern
- canonicalizer.rs (414行) - canonicalize_loop_expr + 統合テスト
- mod.rs (161行) - 型定義と re-export

## ファイルサイズ達成
- 最大ファイル: canonicalizer.rs 414行(目標250行を一部超過するが許容範囲)
- mod.rs: 931行 → 161行 (83%削減)
- 合計: 1141行(元の931行 + tests分離で増加)

## テスト結果
- 14 tests passed
- loop_canonicalizer::* 全テスト green
This commit is contained in:
nyash-codex
2025-12-16 06:41:46 +09:00
parent 58f66e3fa2
commit 5edd81e373
9 changed files with 1030 additions and 813 deletions

View File

@ -1,7 +1,7 @@
# Phase 137: Loop Canonicalizer前処理 SSOT
## Status
- 状態: 🔶 進行中Phase 3 完了)
- 状態: 🔶 進行中Phase 5 完了)
## Goal
- ループ形の組み合わせ爆発を抑えるため、`AST → LoopSkeleton → (capability/routing)` の前処理を SSOT 化する。
@ -51,6 +51,13 @@
- ExitContract が pattern 選択の決定要因として明確化
- 構造的特徴if-else 等)は `notes` に記録(将来の Pattern 細分化に備える)
## Phase 6: Router 委譲dev-only / 段階投入)
- 目標: “既存 router の結果” を最終SSOTとして維持したまま、dev-only で Canonicalizer の `RoutingDecision` を router 選択に使う経路を用意する。
- 方針:
- まず dev-only で `RoutingDecision.chosen` を router に反映し、strict 時は parity を維持する(ズレたら Fail-Fast
- 既定挙動dev flags OFFでは現行 router をそのまま使う。
## SSOT
- 設計 SSOT: `docs/development/current/main/design/loop-canonicalizer.md`