diff --git a/docs/development/current/main/phases/phase-137/README.md b/docs/development/current/main/phases/phase-137/README.md index e0f31803..4fef7118 100644 --- a/docs/development/current/main/phases/phase-137/README.md +++ b/docs/development/current/main/phases/phase-137/README.md @@ -51,13 +51,48 @@ - ExitContract が pattern 選択の決定要因として明確化 - 構造的特徴(if-else 等)は `notes` に記録(将来の Pattern 細分化に備える) -## Phase 6(次): Router 委譲(dev-only / 段階投入) +## Phase 6(完了): Router 委譲(dev-only / 段階投入) -- 目標: “既存 router の結果” を最終SSOTとして維持したまま、dev-only で Canonicalizer の `RoutingDecision` を router 選択に使う経路を用意する。 +- 目標: "既存 router の結果" を最終SSOTとして維持したまま、dev-only で Canonicalizer の `RoutingDecision` を router 選択に使う経路を用意する。 - 方針: - まず dev-only で `RoutingDecision.chosen` を router に反映し、strict 時は parity を維持する(ズレたら Fail-Fast)。 - 既定挙動(dev flags OFF)では現行 router をそのまま使う。 +### Phase 137-6(完了): Router 委譲の段階投入 + +- **S1(完了)**: choose_pattern_kind SSOT 入口を新設 + - Pattern 選択ロジックを `routing.rs` の1関数に集約 + - `LoopPatternContext::new()` から使用 + - 重複コード削減 + +- **S2(完了)**: dev-only で canonicalizer decision を提案として受け取る + - `choose_pattern_kind()` に parity check 統合 + - dev-only 時に Canonicalizer を呼び出し + - 不一致時: strict mode は panic、debug mode はログのみ + - 既定挙動: `router_choice` を維持(Canonicalizer は提案のみ) + +- **S3(完了)**: Router 委譲の準備コメント追加(TODO のみ) + - 将来の委譲に備えた TODO コメント拡充 + - 有効化条件と注意事項を明記 + - コード例を追加 + +### 効果 +- ✅ Pattern 選択ロジックの SSOT 化(choose_pattern_kind) +- ✅ Canonicalizer → Router の parity check 統合 +- ✅ 将来の委譲に備えた構造確立 +- ✅ 新 env 追加なし(既存の `joinir_dev_enabled()` と `strict_enabled()` を使用) + +### 受け入れ基準達成 +- ✅ strict parity green(skip_whitespace) + ``` + NYASH_JOINIR_DEV=1 HAKO_JOINIR_STRICT=1 ./target/release/hakorune \ + tools/selfhost/test_pattern3_skip_whitespace.hako + → [choose_pattern_kind/PARITY] OK + ``` +- ✅ 既定挙動不変(フラグOFF時) +- ✅ スモークテスト(simple_*): 5/5 PASS +- ✅ 全テスト PASS(退行なし) + ## Phase 138(完了): 基盤整備(箱化モジュール化) - **P1-A**: loop_canonicalizer を 4 モジュール分割(931行 → 最大414行/ファイル) diff --git a/src/mir/builder/control_flow/joinir/routing.rs b/src/mir/builder/control_flow/joinir/routing.rs index d66d0783..64c9bd13 100644 --- a/src/mir/builder/control_flow/joinir/routing.rs +++ b/src/mir/builder/control_flow/joinir/routing.rs @@ -66,6 +66,19 @@ pub(in crate::mir::builder) fn choose_pattern_kind( // TODO (Phase 137-6-S3): ここで canonical_choice を返す // 現時点では router_choice を維持(既定挙動不変) + // + // 有効化条件(将来実装): + // 1. joinir_dev_enabled() && 新フラグ(例: canonicalizer_preferred()) + // 2. または joinir_dev_enabled() をそのまま使用 + // + // 注意: 有効化時は全 Pattern の parity が green であること + // + // 有効化後のコード例: + // ```rust + // if crate::config::env::canonicalizer_preferred() { + // return canonical_choice; + // } + // ``` } } }