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

186 lines
5.8 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 71 Findings - SSA/selfhost 再ブートストラップ観測報告
**実施日**: 2025-12-02
**担当**: Claude (Phase 70完了直後にPhase 71開始)
---
## 📊 観測結果サマリー
### 代表パス実行状況
```bash
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.hako``trim/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