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

12 KiB
Raw Blame History

Phase 232: Failing Tests Inventory & Classification

このドキュメントは、2025-12 時点の cargo test --release で残っている 7 件の FAIL を
「どの箱/どのパターン/どのレイヤの問題か」で棚卸しするフェーズ用のメモだよ。


1. 失敗テスト一覧Task 232-1

ベースコマンド:

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

  1. 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。
  2. 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 対応をまだ本番とみなさない」状態をどう扱うかのポリシーの問題。
  3. 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 ライン)