# Phase 137: Loop Canonicalizer(前処理 SSOT) ## Status - 状態: 🔶 進行中(Phase 1 完了) ## Goal - ループ形の組み合わせ爆発を抑えるため、`AST → LoopSkeleton → (capability/routing)` の前処理を SSOT 化する。 - 既存の方針(fixture + shape guard + Fail-Fast)を維持したまま、pattern 数を増やさずにスケールさせる。 ## Phase 1(完了): 型/語彙の SSOT - 実装: `src/mir/loop_canonicalizer/mod.rs` - `LoopSkeleton` / `SkeletonStep` / `UpdateKind` - `ExitContract` / `CarrierSlot` / `CarrierRole` - `RoutingDecision` / capability tags(`CAP_MISSING_*`) - 注意: Phase 1 は「型と語彙」のみ。routing/lowering にはまだ介入しない。 ## Phase 2(次): dev-only 観測の導入 - 目標: ループ入口で `LoopSkeleton` と `RoutingDecision` を生成し、dev-only で観測できるようにする。 - 既定挙動: 不変(dev-only の観測から開始) - スイッチ: 新しい env を増やさず、`joinir_dev_enabled()`(既存)配下で有効化する。 ## SSOT - 設計 SSOT: `docs/development/current/main/design/loop-canonicalizer.md` - JoinIR 契約 SSOT: `docs/development/current/main/joinir-architecture-overview.md`