|
|
5edd81e373
|
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
|
2025-12-16 06:41:46 +09:00 |
|
|
|
58f66e3fa2
|
feat(mir): Phase 137-5 - Decision Policy SSOT化完了
## 目的
Canonicalizer の RoutingDecision.chosen を「lowerer 選択の最終結果」にする
(構造クラス名ではなく ExitContract ベースの決定)
## 実装内容
### 1. Canonicalizer の決定ロジック修正
- `src/mir/loop_canonicalizer/mod.rs`
- `skip_whitespace` パターン認識で ExitContract (has_break=true) を考慮
- Pattern3IfPhi → Pattern2Break に修正(構造は似ているが break あり)
- 単体テスト更新(Pattern2Break 期待に変更)
### 2. Parity 検証テスト修正
- `src/mir/builder/control_flow/joinir/routing.rs`
- `test_parity_check_mismatch_detected` → `test_parity_check_skip_whitespace_match`
- Canonicalizer と Router の一致を検証(ミスマッチ検出からマッチ検証へ)
- Phase 137-5 の SSOT 原則を反映
### 3. ドキュメント更新
- `docs/development/current/main/design/loop-canonicalizer.md`
- Phase 137-5: Decision Policy SSOT セクション追加
- ExitContract 優先の原則を明記
- skip_whitespace の例を追加
- `docs/development/current/main/phases/phase-137/README.md`
- Phase 4 完了マーク追加
- Phase 5 完了セクション追加(実装・検証・効果)
## 検証結果
- ✅ 単体テスト: `cargo test --release --lib loop_canonicalizer::tests` (11/11 passed)
- ✅ Parity テスト: `cargo test --release --lib 'routing::tests::test_parity'` (2/2 passed)
- ✅ Strict モード: `HAKO_JOINIR_STRICT=1` で skip_whitespace parity OK
## 効果
- Router と Canonicalizer の pattern 選択が一致
- ExitContract が pattern 決定の SSOT として明確化
- 構造的特徴(if-else 等)は notes に記録(将来拡張に備える)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2025-12-16 06:17:03 +09:00 |
|
|
|
a0009d474d
|
feat(mir): Loop Canonicalizer Phase 3 - skip_whitespace pattern recognition
## Summary
skip_whitespace パターンを Skeleton→Decision で認識可能に。
dev-only 観測で chosen=Pattern3IfPhi / missing_caps=[] を固定。
## Changes
- src/mir/loop_canonicalizer/mod.rs:
- try_extract_skip_whitespace_pattern() 追加
- loop(cond) { ... if check { p = p + 1 } else { break } } パターン認識
- carrier name, delta, body statements を抽出
- canonicalize_loop_expr() 拡張(skip_whitespace 対応)
- Pattern3IfPhi 成功時は RoutingDecision::success 返却
- Skeleton に HeaderCond, Body, Update ステップ追加
- CarrierSlot に Counter role 設定
- ExitContract に has_break=true 設定
- Phase 3 unit tests 追加
- test_skip_whitespace_pattern_recognition: 基本パターン
- test_skip_whitespace_with_body_statements: body 付きパターン
- test_skip_whitespace_fails_without_else: else なし失敗
- test_skip_whitespace_fails_with_wrong_delta: 減算パターン失敗
- Phase 2 obsolete tests 削除
- src/mir/builder/control_flow/joinir/routing.rs:
- Debug 出力拡張(chosen pattern 表示)
## Tests
- cargo test --release --lib loop_canonicalizer::tests: PASS(11 tests)
- cargo test --release --lib: PASS(1044 tests, 退行なし)
- HAKO_JOINIR_DEBUG=1 test_pattern3_skip_whitespace.hako:
- chosen=Pattern3IfPhi ✅
- missing_caps=[] ✅
## Validation
- ✅ dev-only 観測(HAKO_JOINIR_DEBUG=1)のときだけログ出力
- ✅ フラグ OFF 時は完全不変
- ✅ skip_whitespace パターンで SUCCESS 固定
- ✅ unit tests で全パターン固定
Phase 137-3 complete
|
2025-12-16 05:38:18 +09:00 |
|
|
|
ec1ff5b766
|
docs: update Phase 137-1 completion status and Phase 2 roadmap
## Summary
Loop Canonicalizer Phase 1(型定義)の完了と、Phase 2(dev-only 観測)への
ロードマップを記録。
## Changes
### loop-canonicalizer.md
- Status: Design (P0) → Phase 1 done(型定義まで)
- 実装の入口を明記(src/mir/loop_canonicalizer/mod.rs)
- NYASH_LOOP_ROUTING_TRACE → joinir_dev_enabled() に変更
(新 ENV を増やさず、既存のスイッチに寄せる)
### CURRENT_TASK.md
- Phase 137-1 完了を追記
- P0 を「設計」→「Phase 2(dev-only 観測)」へ更新
### phases/README.md
- Phase 137 を追加
### phases/phase-137/README.md (NEW)
- Phase 1 完了サマリ
- Phase 2 予定を最小で記録
### joinir-design-map.md / 01-JoinIR-Selfhost-INDEX.md
- loop-canonicalizer への導線を追加
## Next Steps
Phase 2: dev-only 観測の導入
- canonicalize_loop_expr() の薄い入口を追加
- joinir_dev_enabled() 配下でログ出し
- 既定挙動は完全不変
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2025-12-16 05:10:29 +09:00 |
|
|
|
26de413be2
|
docs: finalize loop canonicalizer design (P0 implementation-ready)
## Summary
Loop Canonicalizer の設計を「実装可能」レベルまで固めた。
## P0: 設計詳細化
### LoopSkeleton の最小フィールド確定
- LoopSkeleton struct(steps/carriers/exits/captured)
- SkeletonStep enum(HeaderCond/BreakCheck/ContinueCheck/Update/Body)
- UpdateKind enum(ConstStep/Conditional/Arbitrary)
- ExitContract, CarrierSlot, CarrierRole の定義
- SSOT 境界の原則(入力: AST、出力: Skeleton のみ)
### Capability の語彙固定(Fail-Fast reason タグ)
- CAP_MISSING_* プレフィックスで統一
- 8 つの Capability を定義(ConstStepIncrement, SingleBreakPoint 等)
- 新規追加時は設計書を先に更新するルール
### RoutingDecision の出力先決定
- error_tags: Fail-Fast エラーメッセージ
- contract_checks: Phase 135 P1 verifier に統合
- NYASH_LOOP_ROUTING_TRACE: 開発時のルーティング追跡
- ErrorTagCollector を使用(新規 Box は作らない)
### 最初の対象ループ(skip_whitespace)の受け入れ基準
- Skeleton 差分を表形式で明示
- 必要 Capability を列挙
- 受け入れ基準 4 項目を定義
## P1/P2: 確認完了
- joinir-design-map.md に loop-canonicalizer.md へのリンク済み
- quick を重くしない運用は joinir-design-map.md に記載済み
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-16 04:39:52 +09:00 |
|
|
|
84ded8ca6c
|
docs: add loop canonicalizer SSOT + MirBuilder entrypoint
|
2025-12-16 04:37:47 +09:00 |
|