docs: CLAUDE.md更新 - PHI Option C完了+MIRデバッグガイド追加

 現在の開発状況セクション更新(2025-11-20)
  - PHI Bug Option C実装ほぼ完了(267/268テストPASS)
  - commit 461bdec4の成果サマリー

 MIRデバッグ完全ガイド追加(超重要!)
  - --dump-mir, NYASH_VM_DUMP_MIR, NYASH_OPTION_C_DEBUG等
  - JSON形式解析、決定性テスト手順
  - 実践的コマンド集

 HashMap非決定性の発見記録
  - 根本原因(HashDoS対策のランダムseed)
  - 解決策(BTreeSet/BTreeMap)
  - 残課題(variable_map)

📖 次回セッションでの即時参照用

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-20 17:12:46 +09:00
parent 461bdec45a
commit 9feb575c47

View File

@ -4,7 +4,56 @@
--- ---
## 🔄 **現在の開発状況** (2025-11-15) ## 🔄 **現在の開発状況** (2025-11-20)
### 🎊 **PHI Bug Option C実装ほぼ完了** (2025-11-20 commit `461bdec4`)
- **267/268テスト PASS達成** Option C実装大成功 🎉
- **Step 5-5-H完了**: Phantom block検証実装exit_preds検証
- **PHI決定性向上**: BTreeSet/BTreeMap化4ファイル修正
- `if_phi.rs`, `loop_phi.rs`, `loop_snapshot_merge.rs`, `loopform_builder.rs`
- **根本原因解明**: HashMap非決定的イテレーションによるValueId変動
- 詳細: `docs/development/current/main/valueid-*.md`
- **退行なし**: 267テスト全てPASS1テストのみ非決定性残存
- **次タスク**: Stage-B型エラー修正String > Integer(13)
- **後回し**: variable_map決定性化builder.rs等のHashMap→BTreeMap
#### 🔍 **MIRデバッグ完全ガイド**(超重要!)
```bash
# 基本MIR確認最優先
./target/release/nyash --dump-mir program.hako
NYASH_VM_DUMP_MIR=1 ./target/release/nyash program.hako
# 詳細MIR + エフェクト情報
./target/release/nyash --dump-mir --mir-verbose --mir-verbose-effects program.hako
# JSON形式で詳細解析
./target/release/nyash --emit-mir-json mir.json program.hako
jq '.functions[0].blocks' mir.json # ブロック構造確認
# Option C デバッグPHI関連
NYASH_OPTION_C_DEBUG=1 cargo test --release TEST_NAME 2>&1 | grep "Option C"
# LoopForm デバッグ
NYASH_LOOPFORM_DEBUG=1 cargo test --release TEST_NAME 2>&1 | grep "loopform"
# 完全MIRダンプテスト時
NYASH_MIR_TEST_DUMP=1 cargo test --release TEST_NAME 2>&1 > /tmp/mir_dump.log
# VM実行トレース
NYASH_CLI_VERBOSE=1 ./target/release/nyash program.hako
# 決定性テスト3回実行して一貫性確認
for i in 1 2 3; do
echo "=== Run $i ==="
cargo test --release TEST_NAME 2>&1 | grep -E "(ValueId|test result)"
done
```
#### 📊 **重要な発見HashMap非決定性**
- Rustの`HashMap`/`HashSet`はHashDoS対策でランダムseed使用
- PHI生成順序が毎回変わる → ValueId割り当てが変動
- **解決**: `BTreeSet`/`BTreeMap`で決定的イテレーション保証
- **残課題**: `variable_map: HashMap<String, ValueId>` (builder.rs等)
### 🎉 **Phase 25 MVP 完全成功!** (2025-11-15) ### 🎉 **Phase 25 MVP 完全成功!** (2025-11-15)
- **numeric_core BoxCall→Call変換** 完全動作! - **numeric_core BoxCall→Call変換** 完全動作!