Files
hakorune/docs/archive/phases/phase-71/phase71-findings-20251202.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

5.8 KiB
Raw Blame History

Phase 71 Findings - SSA/selfhost 再ブートストラップ観測報告

実施日: 2025-12-02 担当: Claude (Phase 70完了直後にPhase 71開始)


📊 観測結果サマリー

代表パス実行状況

NYASH_ROOT=/home/tomoaki/git/hakorune-selfhost \
NYASH_FEATURES=stage3 \
NYASH_USE_NY_COMPILER=1 \
NYASH_NY_COMPILER_EMIT_ONLY=1 \
NYASH_SELFHOST_KEEP_RAW=1 \
./tools/selfhost/selfhost_build.sh --in apps/tests/stage1_run_min.hako --run

結果:

  • Stage-B compiler実行成功 (rc_stageb=0)
  • Program JSON抽出失敗 (extract_ok=0)
  • Program JSON行数: 0件 (emit失敗)

RAWログ

Location: /home/tomoaki/git/hakorune-selfhost/logs/selfhost/stageb_20251202_101623_2665649.log Size: 707K


🔍 根本原因分析

1. SSA undef警告 (4件)

影響関数:

  1. ParserCommonUtilsBox.trim/1

    • Copy { dst: ValueId(2), src: ValueId(272) } at BasicBlockId(787)
    • ValueId(272)が未定義
  2. ParserBox.trim/1

    • Copy { dst: ValueId(4), src: ValueId(272) } at BasicBlockId(2479)
    • ValueId(272)が未定義
  3. Main._parse_number/1

    • Copy { dst: ValueId(2), src: ValueId(12) } at BasicBlockId(6708)
    • ValueId(12)が未定義
  4. ParserBox.parse_block2/2

    • Copy { dst: ValueId(5), src: ValueId(440) } at BasicBlockId(2573)
    • ValueId(440)が未定義

パターン: すべてCopy命令で未定義ValueIdをコピーしようとしている

2. dev verify警告 (1件)

[warn] dev verify: NewBox StageBDriverBox at v%366 not followed by birth() call
       (expect StageBDriverBox.birth/0)

影響: StageBDriverBoxの初期化手順が不完全


🎯 Phase 71-SSA側の課題

課題1: trim系関数のSSA undef

影響範囲:

  • ParserCommonUtilsBox.trim/1
  • ParserBox.trim/1

想定原因:

  • レシーバ引数の受け渡しでValueIdが未定義のまま渡されている
  • 関数呼び出し時のパラメータマッピングに問題がある可能性

対応方針 (Phase 71-SSA-debug/TASKS.md):

  1. lang/src/compiler/parser/common_utils.hakotrim/1 実装を確認
  2. 呼び出し側での引数渡しパターンを確認
  3. 必要に応じて skip_ws ベースの実装に統一(前回修正パターン適用)

課題2: Stage-B DriverBox birth警告

影響:

  • StageBDriverBox が NewBox直後にbirth()を呼んでいない

対応方針:

  • apps/selfhost-compiler/compiler.hako のStageBDriverBox使用箇所を確認
  • birth()呼び出しを追加(または不要な場合は警告を緩和)

課題3: Program JSON未出力

状況:

  • Stage-B rc=0 (エラーなし)
  • しかしProgram JSON行が0件

想定原因:

  • SSA undef や dev verify警告により、JSON出力処理に到達する前に処理が中断している可能性
  • または JSON出力ロジック自体に問題がある可能性

対応方針:

  1. NYASH_STAGEB_DEV_VERIFY=0 で dev verify無効化して比較
  2. Stage-B DriverBox の Program JSON出力箇所にトレースログ追加
  3. SSA undef解消後に再度実行して状況確認

📋 Phase 71次のステップ

ステップ1: SSA undef優先修正

  • trim/1 系関数のSSA undef解消
  • 前回の _trim/1 修正パターン(ダミーカンマ+静的呼び出し統一)を適用

ステップ2: dev verify緩和トグル活用

  • NYASH_STAGEB_DEV_VERIFY=0 での実行比較
  • Program JSON出力復活の有無を確認

ステップ3: Stage-B DriverBox トレース強化

  • Program JSON出力直前のトレースログ追加
  • 処理フローの可視化

ステップ4: 代表パス安定化

  • SSA undef全解消
  • dev verify警告を0件に
  • Program JSON emit成功を確認

🔗 関連ドキュメント

  • Phase 71 README: docs/private/roadmap2/phases/phase-71-selfhost-reboot/README.md
  • Phase 71-SSA README: docs/private/roadmap2/phases/phase-71-ssa-debug/README.md
  • Phase 71-SSA TASKS: docs/private/roadmap2/phases/phase-71-ssa-debug/TASKS.md
  • CURRENT_TASK.md: Line 112-119 (Phase 71-SSA観測停止中メモ)

💡 重要な気づき

JoinIR は問題なし

  • [joinir/vm_bridge] ログから、JoinIRパスは正常動作している
  • FuncScannerBox.trim は JoinIR経路で正常に lowering されている
  • Phase 71-SSAの問題は「JoinIRとは無関係」

プラグイン初期化も問題なし

  • [UnifiedBoxRegistry] 🎯 Factory Policy: StrictPluginFirst 成功
  • [provider-registry] FileBox: using registered provider 成功
  • Phase 71-SSAの問題は「プラグインとも無関係」

真の問題箇所

  • SSA/Stage-B MIR生成時の ValueId未定義問題
  • StageBDriverBox の初期化手順不備
  • これらが複合的にProgram JSON emit失敗を引き起こしている

📝 Phase 71完了判定基準

  • SSA undef警告: 4件 → 0件
  • dev verify警告: 1件 → 0件
  • Program JSON抽出: 0件 → 1件以上
  • 代表パス selfhost_build + stage1_run_min.hako が GREEN

現在の状況: 0/4基準達成観測窓としての役割は完了


🎯 次のフェーズへの引き継ぎ

Phase 71の成果:

  • Phase 70完了直後にPhase 71実行成功
  • RAW観測レイヤ活用成功
  • SSA undef根本原因特定trim系関数の未定義ValueId問題
  • JoinIR/プラグインは無関係であることを確認

Phase 71-SSA-debugへの課題引き継ぎ:

  • trim系関数 SSA undef 修正4件 → 0件
  • StageBDriverBox birth警告 解消1件 → 0件
  • Program JSON emit 復活0件 → 1件以上

備考: このドキュメントは Phase 71初回実行の観測結果を記録したものです。 SSA undef修正作業は Phase 71-SSA-debug側で継続します。 Status: Historical