94 lines
3.6 KiB
Markdown
94 lines
3.6 KiB
Markdown
|
|
# Phase 92 P4: E2E固定+回帰最小化
|
|||
|
|
|
|||
|
|
## Phase 92の範囲と成果
|
|||
|
|
|
|||
|
|
**Phase 92の実装範囲**:
|
|||
|
|
- P0-P2: ConditionalStepのJoinIR生成とbody-local変数サポート
|
|||
|
|
- **完了した機能**: `lower_condition_to_joinir`でbody-local変数解決をサポート
|
|||
|
|
|
|||
|
|
**Phase 92の範囲外**:
|
|||
|
|
- P5bパターン認識の拡張(escape_pattern_recognizerは既存のまま)
|
|||
|
|
- body-local variable promotionシステムの拡張
|
|||
|
|
|
|||
|
|
## P4-1: E2E固定戦略
|
|||
|
|
|
|||
|
|
### 問題
|
|||
|
|
P5bパターン認識は厳密な要件があり、テストケースが認識されない:
|
|||
|
|
- 要件: 特定の構造(break check + escape check)
|
|||
|
|
- 現状: `flag`ベースの条件は認識されない
|
|||
|
|
|
|||
|
|
### 解決策: 段階的アプローチ
|
|||
|
|
|
|||
|
|
**Level 1: 最小E2E(既存Pattern2Break)**
|
|||
|
|
```bash
|
|||
|
|
# 既存のPattern2Breakテストを使用
|
|||
|
|
NYASH_DISABLE_PLUGINS=1 ./target/release/hakorune apps/tests/loop_min_while.hako
|
|||
|
|
# Expected: 正常動作(退行なし)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Level 2: Unit Test(Phase 92の核心)**
|
|||
|
|
```bash
|
|||
|
|
# condition_lowerer.rsのunit testでbody-local変数サポートを検証
|
|||
|
|
cargo test --release condition_lowerer::tests
|
|||
|
|
# Expected: body-local変数の変数解決優先度が正しく動作
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Level 3: Integration(将来のP5b完全実装時)**
|
|||
|
|
```bash
|
|||
|
|
# P5bパターン完全実装後のE2E
|
|||
|
|
NYASH_JOINIR_DEV=1 NYASH_DISABLE_PLUGINS=1 ./target/release/hakorune apps/tests/phase92_p5b_full.hako
|
|||
|
|
# Note: body-local promotion実装が必要
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## P4-2: Integration Smoke
|
|||
|
|
|
|||
|
|
最小限のsmoke testを追加:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# tools/smokes/v2/profiles/integration/rust-vm/phase92_pattern2_baseline.sh
|
|||
|
|
# 既存のPattern2Breakテストで退行確認
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## P4-3: Fail-Fast契約
|
|||
|
|
|
|||
|
|
現状のFail-Fast実装は十分:
|
|||
|
|
- `conditional_step_emitter.rs`: delta equality check
|
|||
|
|
- `ConditionEnv`: 変数解決失敗時のエラーメッセージ
|
|||
|
|
|
|||
|
|
追加不要(80/20ルール)。
|
|||
|
|
|
|||
|
|
## 受け入れ基準
|
|||
|
|
|
|||
|
|
✅ **Level 1完了**: 既存Pattern2Breakテストが動作(退行なし)
|
|||
|
|
✅ **Level 2完了**: Unit testでbody-local変数サポート検証
|
|||
|
|
- `test_body_local_variable_resolution` - body-local変数解決
|
|||
|
|
- `test_variable_resolution_priority` - 変数解決優先度(ConditionEnv優先)
|
|||
|
|
- `test_undefined_variable_error` - 未定義変数エラーハンドリング
|
|||
|
|
- 全7テストPASS確認済み(`cargo test --release condition_lowerer::tests`)
|
|||
|
|
✅ **P4-2完了**: Integration smoke test追加
|
|||
|
|
- `tools/smokes/v2/profiles/integration/apps/phase92_pattern2_baseline.sh`
|
|||
|
|
- Case A: `loop_min_while.hako` (Pattern2 baseline)
|
|||
|
|
- Case B: `phase92_conditional_step_minimal.hako` (条件付きインクリメント)
|
|||
|
|
- 両テストケースPASS、integration profileで発見可能
|
|||
|
|
✅ **P4-3完了**: Fail-Fast契約確認(追加不要と判断)
|
|||
|
|
- `conditional_step_emitter.rs`: delta equality check実装済み
|
|||
|
|
- `ConditionEnv`: 変数解決失敗時のエラーメッセージ実装済み
|
|||
|
|
- 80/20ルール適用: 現状の実装で十分と判断
|
|||
|
|
⏸️ **Level 3延期**: P5b完全E2E(body-local promotion実装後)
|
|||
|
|
|
|||
|
|
## Phase 92の価値
|
|||
|
|
|
|||
|
|
**実装済み**:
|
|||
|
|
1. `lower_condition_to_joinir`でbody-local変数解決(priority: ConditionEnv → LoopBodyLocalEnv)
|
|||
|
|
2. `conditional_step_emitter.rs`でbody-local環境を渡す
|
|||
|
|
3. Break condition loweringの順序修正(body-local init後に実行)
|
|||
|
|
|
|||
|
|
**将来の拡張**:
|
|||
|
|
- body-local promotionシステム拡張(Pattern2で一般的なbody-local変数を扱う)
|
|||
|
|
- P5bパターン認識の汎化
|
|||
|
|
|
|||
|
|
## 結論
|
|||
|
|
|
|||
|
|
Phase 92は「条件式でbody-local変数を使えるようにする基盤」を完成させました。
|
|||
|
|
E2E完全動作は将来のPhaseで、body-local promotion実装時に達成します。
|