Files
hakorune/docs/development/current/main/phase232-failing-tests-inventory.md
nyash-codex d4f90976da refactor(joinir): Phase 244 - ConditionLoweringBox trait unification
Unify condition lowering logic across Pattern 2/4 with trait-based API.

New infrastructure:
- condition_lowering_box.rs: ConditionLoweringBox trait + ConditionContext (293 lines)
- ExprLowerer implements ConditionLoweringBox trait (+51 lines)

Pattern migrations:
- Pattern 2 (loop_with_break_minimal.rs): Use trait API
- Pattern 4 (loop_with_continue_minimal.rs): Use trait API

Benefits:
- Unified condition lowering interface
- Extensible for future lowering strategies
- Clean API boundary between patterns and lowering logic
- Zero code duplication

Test results: 911/911 PASS (+2 new tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 02:35:31 +09:00

193 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 232: Failing Tests Inventory & Classification
このドキュメントは、2025-12 時点の `cargo test --release` で残っている 7 件の FAIL を
「どの箱/どのパターン/どのレイヤの問題か」で棚卸しするフェーズ用のメモだよ。
---
## 1. 失敗テスト一覧Task 232-1
ベースコマンド:
```bash
cargo test --release
```
このセッションでの FAIL は次の 7 件だったよ(当時: 890 passed / 7 failed / 64 ignored
**Update (Phase 233)**: `loop_update_summary` の 4 件を AST ベーステストに刷新して PASS 化し、いまは **894 passed / 3 failed / 64 ignored** だよ(残りは array_filter 系 3 件のみ)。
### 1.1 loop_update_summary 系ユニットテスト4 件 → Phase 233 で解消済み)
対象ファイル: `src/mir/join_ir/lowering/loop_update_summary.rs`
1. `mir::join_ir::lowering::loop_update_summary::tests::test_analyze_mixed`
- パターン: if-sum / Counter+Accumulation 検出ロジックP3 if-sum 用の分析箱)。
- 失敗種類: **期待値 mismatch名前ベースヒューリスティック vs 新 AST ベース実装)**
- 現行実装 `analyze_loop_updates()` は deprecated だが、テストはまだ古いヒューリスティック前提。
- 備考: 実運用では `analyze_loop_updates_from_ast()` が主経路Phase 219
2. `mir::join_ir::lowering::loop_update_summary::tests::test_analyze_single_counter`
- パターン: CounterOnly単一カウンタ判定。
- 失敗種類: **期待値 mismatchdeprecated API の挙動とテスト期待のズレ)**
- 備考: `analyze_loop_updates()` 内で kind を全て AccumulationLike にしているため、テストの CounterLike 期待と合わない。
3. `mir::join_ir::lowering::loop_update_summary::tests::test_is_simple_if_sum_pattern_basic`
- パターン: P3 if-sum の「i + sum」基本パターン検出。
- 失敗種類: **期待値 mismatchis_simple_if_sum_pattern の入力を deprecated wrapper で生成している)**
- 備考: 本番 if-sum 経路は Phase 219 以降、AST ベースの update 検出に移行済み。
4. `mir::join_ir::lowering::loop_update_summary::tests::test_is_simple_if_sum_pattern_with_count`
- パターン: P3 if-sum の「i + sum + count」マルチキャリアパターン。
- 失敗種類: **期待値 mismatch上と同様、テスト専用の古い summary 生成ロジック)**
Update (Phase 233): 上記 14 はすべて `analyze_loop_updates_from_ast()` を直接呼ぶ AST フィクスチャベースのテストに置き換え、`cargo test --release` で PASS になったよ。
### 1.2 ArrayExtBox.filter まわりの joinir mainline テスト3 件)
対象ファイル: `src/tests/joinir/mainline_phase49.rs`
5. `tests::joinir::mainline_phase49::phase49_joinir_array_filter_smoke`
- パターン: P3 if-phi / Array filter ループ(実戦寄り PoC
- 失敗種類: **[joinir/freeze] 系エラー → accumulator `'sum' not found in variable_map` で panic**
- メッセージ: `"[cf_loop/pattern3] Accumulator variable 'sum' not found in variable_map"`
- 備考: JoinIR mainline に route したあと、Pattern3 PoC lowerer が `sum` を carrier として見つけられず Fail-Fast。
6. `tests::joinir::mainline_phase49::phase49_joinir_array_filter_fallback`
- パターン: 同じ ArrayExtBox.filter の fallback 経路Structure-only / legacy PoC の確認用)。
- 失敗種類: **テスト側期待値「fallback compile should succeed」 vs 実際は Fail-Fast エラー**
- つまり「今は array_filter の JoinIR 対応をまだ本番とみなさない」状態をどう扱うかのポリシーの問題。
7. `tests::joinir::mainline_phase49::phase49_joinir_array_filter_ab_comparison`
- パターン: Array filter の route A/B 比較テスト。
- 失敗種類: **Route A compile should succeed → 同じ `'sum' not found` エラーで失敗**
- 備考: いずれも core バグというより「ArrayExtBox.filter の JoinIR 適用方針が途中」のフェーズ感のテストだよ。
---
## 2. 箱・レイヤごとの分類Task 232-2
ここでは「どのラインの箱から見た問題か」をざっくり割り当てるよ。
### 2.1 JoinIR core ライン
- ArrayExtBox.filter 系(テスト 57
- 主に Pattern3 if-phi / carrier detection / variable_map との橋渡しライン。
- エラー文言から見えるのは:
- `Accumulator variable 'sum' not found in variable_map`
-**LoopPattern + CarrierInfo + ExitLine の間の「carrier 定義/再接続」が足りない**
- ただし、これは「内部の SSOT が崩れている」というより、PoC lowerer と本線 lowerer が混在している歴史的ライン。
### 2.2 LoopPattern ライン
- loop_update_summary 系(テスト 14
- P3 if-sum / CaseA パターン検出の一部。
- 現行本番経路:
- AST ベースの `analyze_loop_updates_from_ast()` P3 if-sum 実装Phase 212/213/220
- テストが見ているのは:
- deprecated な `analyze_loop_updates()`(名前ベース)と、それにぶら下がる is_simple_if_sum_pattern の挙動。
- 位置づけとしては **LoopPattern (分析箱) の「旧 API テスト」**
### 2.3 表現ラインConditionEnv / ExprLowerer / MethodCallLowerer / LoopBodyLocalEnv
- 今回の 7 件の FAIL は、直接にはこの表現レイヤにはかかっていない:
- Type error / SSA-undef / alias 解決の失敗ではなく、
- 「古い分析 API のテスト期待値のまま」
- 「PoC lowerer の carrier 認識が足りない」
といったレベルの問題に収まっている。
- つまり Phase 232 時点では、ExprLowerer/ScopeManager まわりの **新実装が原因の FAIL はゼロ** という整理でよさそうだよ。
---
## 3. P0/P1/P2 分類Task 232-3
ここでは、次フェーズでどう扱うかの優先度分類をするよ。
### 3.1 P0: すぐ直したい JoinIR core バグ
- **今回は P0 該当なし** として扱うのがよさそう。
- 理由:
- SSA-undef / PHI 破損 / ValueId 衝突 / ExitLine 契約違反のような「core 崩壊系」の FAIL は含まれていない。
- ArrayExtBox.filter 系も「PoC lowerer の制約に当たって Fail-Fast」が明示的に出ているだけで、
既存の JsonParser / if-sum ラインを壊しているわけではない。
### 3.2 P1: パターン拡張で解決できるもの
候補としては次の 2 グループだよPhase 232 時点の整理; その後の更新を併記するね):
1. **loop_update_summary ユニット(テスト 14** → Phase 233 で解消済み
- 実際の本番 if-sum ラインは AST ベースで動いているので、
- これらのテストを「deprecated wrapper の振る舞いテスト」ではなく、
- `analyze_loop_updates_from_ast()` ベースのテストに差し替える
ことで自然に緑にできる。
- つまり「core バグ」ではなく **テストの更新/仕様の追随** で解消可能。
- **Phase 233 で実施済みPASS 化)**。
2. **ArrayExtBox.filter 系(テスト 57**
- Pattern3 if-phi / Accumulation パターンとして見れば、
- `sum` を carrier として認識する
- legacy PoC lowerer のエラー文言を **「意図的な Fail-Fast」か「サポートする方向」か** 決める
といった「パターン拡張 or ポリシー明確化」で解決可能。
- ただし、こちらは実戦 ArrayExtBox.filter の仕様をどうしたいかに依存するので、
先に loop_update_summary 側を P1 で触るほうがスコープが小さくて良さそう。
### 3.3 P2: 当面 Fail-Fast に残すもの
Phase 234 の結論:
- **ArrayExtBox.filter 系 3 テスト57は P2 に固定**(意図した Fail-Fast / 将来拡張候補)。
- 理由:
- ArrayFilter は「BoxCall ベース Accumulationout.push」であり、数値 if-sum ラインとは別系統の設計が必要。
- JsonParser / selfhost / ExprLowerer など、既に進行中のコアラインより優先して手を入れる理由がまだ弱い。
- 現状の `[cf_loop/pattern3] Accumulator variable 'sum' not found in variable_map` は、「P3 if-PHI の外側にある PoC 領域」を示すラベルとして有用。
- したがって Phase 234 では:
- コード変更は行わず、
- `phase234-array-filter-design.md` に ArrayFilter パターンと P3 if-PHI との関係、将来フェーズでの拡張案だけを整理する。
一方、loop_update_summary ユニット14は:
- P1「次にテストを更新するときに一緒に触る」として扱うのが妥当だよ。
- 本番経路は既に `analyze_loop_updates_from_ast()` を使っており、
deprecated wrapper の仕様を保つ必要は低い。
---
## 4. 次フェーズ候補Task 232-4
Phase 232 の整理を前提にした「次の軸」の候補だけメモしておくね(コードはまだ書かない)。
- **Phase 233P1: 分析箱テストのアップデート)**
- ねらい:
- `loop_update_summary.rs` のテスト 14 を `analyze_loop_updates_from_ast()` ベースに更新し、
実戦 if-sum ラインとテスト仕様を揃える。
- やることの例:
- AST フィクスチャ(簡単な if-sum ループ)を直接組んで `analyze_loop_updates_from_ast()` をテスト。
- deprecated `analyze_loop_updates()` のテストは「歴史メモ」扱いに移すか、最小限だけ残す。
- **Phase 234P1: ArrayExtBox.filter ラインの設計再検討)**
- ねらい:
- ArrayExtBox.filter を「P3 if-phi + Accumulation pattern」として本当に JoinIR で扱うかどうかを設計レベルで決める。
- やることの例:
- phase49 の mainline テストが期待しているシナリオを整理route A/B、fallback の位置づけ)。
- Pattern3 if-sum / array filter / map/filter 系の位置づけを `loop_pattern_space.md` に追記。
- まだコードには触らず、「やるならこういう箱に分ける」という案まで。
- **Phase 235P2: B 系パターンの扱い方の設計だけ)**
- ねらい:
- いまは Fail-Fast している B 系パターン(複雑ネスト / 多段メソッドチェーンなど)を
「今後も Fail-Fast のままにするのか」「別レイヤの箱で扱うか」を整理する。
- やることの例:
- `[joinir/freeze]` 系メッセージを洗い出して、B 系パターンの代表例を docs にまとめる。
- async / catch / filter/map 連鎖などを、JoinIR 本体ではなく上位レイヤに逃がす設計案を書くだけに留める。
---
## 5. まとめ
- 現状の 7 FAIL は:
- 4 件: **loop_update_summary の deprecated API テスト**Phase 233 で AST ベースに刷新し PASS 化済み)。
- 3 件: **ArrayExtBox.filter の PoC パターン3 lowerer に対する挙動確認テスト**(意図的 Fail-Fast に近い) ← 現在残っている FAIL。
- JoinIR corePHI/ValueId/ExitLine/SSAとしての致命的な崩れは含まれていないので、
Phase 232 の結論としては「**今の FAIL は “どこをまだやっていないか” を教えてくれるラベル**」とみなしてよさそうだよ。
Status: Active
Scope: 失敗テスト在庫JoinIR/ExprLowerer ライン)