From 632e495e51bad726db345a48003e004dbeb02dd5 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Tue, 16 Dec 2025 07:44:57 +0900 Subject: [PATCH] =?UTF-8?q?docs(mir):=20Phase=20137-6-S3=20-=20Router?= =?UTF-8?q?=E5=A7=94=E8=AD=B2=E3=81=AE=E6=BA=96=E5=82=99=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 目的 将来の Router → Canonicalizer 委譲に備えた TODO コメント拡充 ## 変更内容 ### routing.rs の TODO コメント拡充 - 有効化条件を明記(新フラグ or 既存フラグ) - 注意事項追加(全 Pattern の parity green 必須) - コード例を追加(将来実装時の参考) ### Phase 137 README 更新 - Phase 137-6(完了)セクション追加 - S1/S2/S3 の実装内容を記録 - 効果と受け入れ基準達成を記録 ## 効果 - ✅ 将来の委譲に備えた明確なガイド - ✅ Phase 137-6 完了記録 - ✅ 既定挙動不変(フラグOFF時) ## Phase 137-6 完了サマリー ### 実装完了内容 - **S1**: choose_pattern_kind SSOT 入口(61行追加) - **S2**: dev-only parity check 統合(52行追加) - **S3**: Router 委譲準備コメント(ドキュメント拡充) ### 受け入れ基準 - ✅ strict parity green(skip_whitespace) - ✅ 既定挙動不変(フラグOFF時) - ✅ 新 env 追加なし - ✅ choose_pattern_kind が SSOT 入口として機能 - ✅ 全テスト PASS(退行なし) ### テスト結果 - ✅ `cargo build --release`: 成功 - ✅ スモークテスト(simple_*): 5/5 PASS - ✅ parity check 動作確認: ``` NYASH_JOINIR_DEV=1 HAKO_JOINIR_STRICT=1 ./target/release/hakorune \ tools/selfhost/test_pattern3_skip_whitespace.hako → [choose_pattern_kind/PARITY] OK ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../current/main/phases/phase-137/README.md | 39 ++++++++++++++++++- .../builder/control_flow/joinir/routing.rs | 13 +++++++ 2 files changed, 50 insertions(+), 2 deletions(-) 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; + // } + // ``` } } }