2025-12-16 05:10:29 +09:00
|
|
|
|
# Phase 137: Loop Canonicalizer(前処理 SSOT)
|
|
|
|
|
|
|
|
|
|
|
|
## Status
|
2025-12-16 05:38:18 +09:00
|
|
|
|
- 状態: 🔶 進行中(Phase 2 完了)
|
2025-12-16 05:10:29 +09:00
|
|
|
|
|
|
|
|
|
|
## 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 にはまだ介入しない。
|
|
|
|
|
|
|
2025-12-16 05:38:18 +09:00
|
|
|
|
## Phase 2(完了): dev-only 観測の導入
|
2025-12-16 05:10:29 +09:00
|
|
|
|
|
2025-12-16 05:38:18 +09:00
|
|
|
|
- 入口:
|
|
|
|
|
|
- Canonicalize: `src/mir/loop_canonicalizer/mod.rs`(`canonicalize_loop_expr`)
|
|
|
|
|
|
- 観測ポイント: `src/mir/builder/control_flow/joinir/routing.rs`(`joinir_dev_enabled()` 配下)
|
|
|
|
|
|
- 既定挙動: 不変(dev-only 観測のみ)
|
|
|
|
|
|
|
|
|
|
|
|
## Phase 3(次): Pattern 検出(Skeleton→Decision の精密化)
|
|
|
|
|
|
|
|
|
|
|
|
- 目標: `skip_whitespace` を Skeleton から安定に識別し、`RoutingDecision.chosen` と `missing_caps` を期待通りに固定する。
|
|
|
|
|
|
- 注意: routing/lowering の変更は dev-only の観測結果が固まってから。
|
2025-12-16 05:10:29 +09:00
|
|
|
|
|
|
|
|
|
|
## SSOT
|
|
|
|
|
|
|
|
|
|
|
|
- 設計 SSOT: `docs/development/current/main/design/loop-canonicalizer.md`
|
|
|
|
|
|
- JoinIR 契約 SSOT: `docs/development/current/main/joinir-architecture-overview.md`
|