Commit Graph

495 Commits

Author SHA1 Message Date
cbb9c0ade9 chore: Update docs/private submodule (Phase 33-0/1/2 docs) 2025-11-27 03:00:32 +09:00
35cd93a37a Phase 33-2: JoinInst::Select implementation + minimal If JoinIR lowering
Implementation:
- Add JoinInst::Select variant to JoinIR schema
- Implement Select execution in JoinIR Runner (Bool/Int cond support)
- Add Select handling in JoinIR→MIR Bridge (4-block structure)
- Create test cases (joinir_if_select_simple/local.hako)
- Add dev toggle NYASH_JOINIR_IF_SELECT=1
- Create lowering infrastructure (if_select.rs, stub for Phase 33-3)

Tests:
- 3/3 unit tests pass (test_select_true/false/int_cond)
- Integration tests pass (RC: 0)
- A/B execution verified (existing if_phi vs JoinIR Select)

Files changed:
- New: apps/tests/joinir_if_select_{simple,local}.hako
- New: src/mir/join_ir/lowering/if_select.rs
- Modified: src/mir/join_ir/{mod,json,runner,vm_bridge}.rs
- Modified: src/config/env.rs (joinir_if_select_enabled)
- Modified: docs/reference/environment-variables.md

Phase 33-3 ready: MIR pattern recognition + auto-lowering pending

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 02:58:38 +09:00
0c252406ef docs(joinir): L-4.3b - Phase 40 role transfer documentation
## L-4.3b 完了内容

Phase 32 scope clarification:
- llvmlite harness JoinIR experiment (L-4.3a)  completed
- ny-llvmc JoinIR integration → deferred to Phase 40

## 方針明文化

**Phase 32 では**:
- ny-llvmc 側のコード変更なし
- JoinIR→MIR' 変換は Rust 本体 (llvm.rs) で実施
- ny-llvmc は「post-JoinIR MIR JSON」を受け取るだけ

**Phase 40 (LLVM Native Backend) で**:
- ny-llvmc 本体の最適化・native backend 化と併せて
- JoinIR 経路の統合を行う

## ドキュメント更新

- Phase 32 TASKS.md: L-4.3b 完了マーク + Phase 40 移管明記
- CURRENT_TASK.md: 1-00w セクション追加

関連: Phase 32 L-4.3a (llvmlite 実証完了)
2025-11-26 16:12:48 +09:00
b8893787dc feat(joinir): L-5.3 Phase 1 - progress carrier guard for generic_case_a
## 実装内容

1. has_safe_progress() helper 追加 (loop_to_join.rs:186-195)
   - Phase 1: scope.progress_carrier.is_some() をチェック (保守的)
   - Phase 2 (future): MirQuery で Add 命令チェック予定

2. is_supported_case_a_loop_view() に progress guard 追加 (256-266)
   - 無限ループの可能性があるループを事前にフォールバック
   - デバッグログで reject 理由を出力

## テスト結果

 25 passed; 0 failed - JoinIR 関連テスト全通過
 skip_ws / trim / append_defs / Stage‑1 UsingResolver 全ケース PASS
 既存テストへの影響なし

## 技術メモ

- 保守的アプローチ: progress_carrier.is_some() のみチェック
- LoopScopeShape で progress_carrier を carriers の先頭として設定済み
- ignored テスト失敗は MIR 自体の PHI バグで、本変更とは無関係 (git stash で確認済み)

関連: Phase 29 L-5.3 (TASKS.md), CURRENT_TASK.md 1-00v
2025-11-26 16:08:49 +09:00
bde83f311e docs(joinir): L-2.3 PHI問題のA/B実行実証
- CURRENT_TASK.md に L-2.3 進捗を追記
- docs/private サブモジュールに Phase 32 を追加

Route A vs Route B 比較結果:
- Route A (VM直接): Main.skip("   abc") → 0 (PHI バグ)
- Route B (JoinIR): Main.skip("   abc") → 3 (正解)

JoinIR が PHI 問題を設計的に解決していることを実行レベルで実証。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 12:28:32 +09:00
eddc4e6035 docs(joinir): L-2.2 Step-4 - Update JoinIR VM bridge documentation
Phase 32 README:
- Expand VM Bridge table with "JoinIR 利用範囲" column
- Add L-2.2 progress summary table (Step-1~5 status)
- Add developer notes for Stage-B JoinIR observation

environment-variables.md:
- Add detailed descriptions for NYASH_JOINIR_* variables
- Clarify scope and limitations (Stage-B = lowering only)
- Add Stage-B JoinIR observation example

CURRENT_TASK:
- Update L-2.2 status to Step-1~4 complete

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 11:55:04 +09:00
51ff558904 feat(phase32): L-2.1 Stage-1 UsingResolver JoinIR integration + cleanup
Phase 32 L-2.1 complete implementation:

1. Stage-1 UsingResolver main line JoinIR connection
   - CFG-based LoopForm construction for resolve_for_source/5
   - LoopToJoinLowerer integration with handwritten fallback
   - JSON snapshot tests 6/6 PASS

2. JoinIR/VM Bridge improvements
   - Simplified join_ir_vm_bridge.rs dispatch logic
   - Enhanced json.rs serialization
   - PHI core boxes cleanup (local_scope_inspector, loop_exit_liveness, loop_var_classifier)

3. Stage-1 CLI enhancements
   - Extended args.rs, groups.rs, mod.rs for new options
   - Improved stage1_bridge module (args, env, mod)
   - Updated stage1_cli.hako

4. MIR builder cleanup
   - Simplified if_form.rs control flow
   - Removed dead code from loop_builder.rs
   - Enhanced phi_merge.rs

5. Runner module updates
   - json_v0_bridge/lowering.rs improvements
   - dispatch.rs, selfhost.rs, modes/vm.rs cleanup

6. Documentation updates
   - CURRENT_TASK.md, AGENTS.md
   - Various docs/ updates

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 10:17:37 +09:00
7a29ebd268 refactor(phase31): Connect 4 lowerers to LoopToJoinLowerer
Phase 31 Step 2 complete:
- skip_ws.rs: use LoopToJoinLowerer::lower_minimal_skip_ws_case_a()
- funcscanner_trim.rs: use LoopToJoinLowerer::lower_minimal_trim_case_a()
- funcscanner_append_defs.rs: use LoopToJoinLowerer::lower_minimal_append_defs_case_a()
- stage1_using_resolver.rs: use LoopToJoinLowerer::lower_minimal_stage1_case_a()

Eliminates direct generic_case_a calls, routing through unified box.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 02:36:43 +09:00
ef9fd4417a feat(phase31): Add LoopToJoinLowerer unified box
Phase 31 Step 1 complete:
- Create src/mir/join_ir/lowering/loop_to_join.rs
- Add LoopToJoinLowerer struct with lower() method
- Implement lower_minimal_skip_ws_case_a() via generic_case_a
- Support for trim, append_defs, stage1 patterns
- Re-export from mod.rs

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 01:18:32 +09:00
2b47f47061 refactor(phi_core): F-2.1 - 早期グループPHI箱削除(約2,500行削減)
## 削除したファイル
- header_phi_builder.rs (~628行) - バイパス関数を loopform_builder.rs に移動
- exit_phi_builder.rs (~1000行) - バイパス関数を loopform_builder.rs に移動
- body_local_phi_builder.rs (~550行) - 依存なし
- loop_phi.rs (~288行) - LoopPhiOps実装も削除

## 移動した関数
loopform_builder.rs に以下を移動:
- get_loop_bypass_flags() / LoopBypassFlags struct
- is_joinir_header_bypass_target()
- joinir_exit_bypass_enabled()
- is_joinir_exit_bypass_target()

## 修正したファイル
- loop_builder.rs: バイパス関数の参照先変更 + LoopPhiOps impl削除
- mod.rs: モジュール宣言削除

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 23:42:35 +09:00
a898ff3f83 refactor(joinir): Phase 30 F-2.0/F-3 - PHI箱インベントリと旧APIレガシー削除
F-3 レガシー削除:
- generic_case_a.rs: 旧API関数4個削除(_with_scope 移行完了)
- loop_scope_shape.rs: CaseAContext::new() 削除(from_scope() に統一)
- mod.rs: 不要な pub use 削除
- #[allow(dead_code)] 除去(5関数)
- 未使用import削除(コード削減約150行)

F-2.0 PHI箱インベントリ:
- PHI_BOX_INVENTORY.md 作成: 13箱+11補助構造体の棚卸し
- 削除順ポリシー: 早期/中期/最終の3段階
- TASKS.md/CURRENT_TASK.md 更新

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 23:25:39 +09:00
f41564723d docs: Phase 30 F-1/F-3/F-4.4 preparation survey
Task A/B/C results:
- Task A: Lowerer files Case A analysis (6 files surveyed)
  - Found: all lowerers use empty LoopVarClassBox/LoopExitLivenessBox
  - stageb_body/stageb_funcscanner have placeholders only
- Task B: Add VM runner shrinkage plan to TASKS.md F-4.4
- Task C: Add bridge summary to CURRENT_TASK.md

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 15:30:54 +09:00
de16ff9b7f feat(joinir): Phase 30.x jsonir v0 snapshot tests
Implement JSON snapshot testing for JoinIR regression detection.

Implementation:
- tests/fixtures/joinir/v0_*.jsonir: 6 snapshot fixtures for minimal JoinIR cases
- src/tests/joinir_json_min.rs: Added 6 snapshot comparison tests

Fixtures:
- v0_skip_ws_min.jsonir (1338 bytes)
- v0_funcscanner_trim_min.jsonir (4484 bytes)
- v0_funcscanner_append_defs_min.jsonir (988 bytes)
- v0_stage1_usingresolver_min.jsonir (987 bytes)
- v0_stageb_body_min.jsonir (1074 bytes)
- v0_stageb_funcscanner_min.jsonir (962 bytes)

Usage:
  # Run snapshot tests
  NYASH_JOINIR_SNAPSHOT_TEST=1 cargo test --release joinir_json_v0_

  # Regenerate fixtures (after intentional changes)
  NYASH_JOINIR_SNAPSHOT_TEST=1 NYASH_JOINIR_SNAPSHOT_GENERATE=1 cargo test --release joinir_json_v0_

Purpose:
- Fix current JoinIR shape as v0 baseline (pre-generic state)
- Detect unintended regressions during genericization
- Allow intentional fixture updates when design changes

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 10:19:02 +09:00
e9c7d27a7f feat(joinir): Phase 30.x jsonir v0 - JoinIR JSON serialization
Implement JSON serialization for JoinIR module.

Implementation:
- src/mir/join_ir/json.rs: JSON serializer (~250 lines, no external deps)
- src/tests/joinir_json_min.rs: Integration tests (8 unit + 2 integration)
- 10 tests total, all passing

Features:
- JoinModule → JSON serialization
- All instruction types: Call, Jump, Ret, Compute
- All MirLikeInst types: Const, BinOp, Compare, BoxCall
- Full ConstValue support: Integer, Bool, String, Null
- Full operator coverage: Add/Sub/Mul/Div/Or/And, Lt/Le/Gt/Ge/Eq/Ne
- JSON string escaping for special characters

Usage:
  use crate::mir::join_ir::json::join_module_to_json_string;
  let json = join_module_to_json_string(&module);

Non-goals (this phase):
- CLI flag (--emit-joinir-json)
- JSON → JoinIR reverse conversion

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 09:53:26 +09:00
03efa13e76 docs(phase-29): JoinIR/Stage-1 環境変数棚卸し完了
Step 1: ENV_INVENTORY.md 作成 (docs/private submodule)
Step 2: 実装統一確認 - 既にhelper経由で統一済み
Step 3: environment-variables.md に JoinIRセクション追加
Step 4: スモークテスト pass
Step 5: CURRENT_TASK.md に完了記録

発見事項:
- JoinIR: env_flag_is_1() ヘルパー経由で統一済み
- Stage-1: src/config/env/stage1.rs SSOT モジュール経由で統一済み
- NYASH_RUN_JOINIR_MINIMAL は既に削除済み

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 09:03:28 +09:00
59f00db385 chore: update docs/private submodule
Updates Phase 28.2/29 documentation with Ny compiler path investigation results.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 07:08:56 +09:00
94b2bd2799 feat(selfhost): add observation logs for Ny compiler path diagnosis
Add NYASH_CLI_VERBOSE>=2 observation logs to trace the Ny compiler
child process path (NYASH_USE_NY_COMPILER=1):
- Log when spawning child process
- Log when receiving Program(JSON v0)
- Log before/after maybe_dump_mir with dump path info
- Report whether MIR dump file was created

Key finding: apps/selfhost/compiler/compiler.hako doesn't exist,
so the preferred child process route never fires. This explains
why RUST_MIR_DUMP_PATH doesn't create files in Ny compiler path.

Also update environment-variables.md with:
- NYASH_CLI_VERBOSE=2 level documentation
- Ny compiler observation template for Phase 29

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 07:08:32 +09:00
466e636af6 Span trace utilities and runner source hint 2025-11-24 14:17:02 +09:00
3154903121 docs: S-5.4 GC統合&A/Bテスト完了 (submodule update)
 Phase 27-shortterm S-5 全タスク完了
- GC統合: Arc<dyn NyashBox> 参照カウント管理
- standalone テスト完全成功 (skip_ws/trim PASS)
- VM統合実証済み (execute_box_call経由)

Submodule commits: ba0cc24, 02e57a1
2025-11-24 11:47:25 +09:00
98dadf446f feat(joinir): S-5.2-improved - VM完全意味論統合完了
Phase 27-shortterm S-5.2-improved 実装完了:

## 実装内容
1. **execute_box_call() ラッパー追加**:
   - src/backend/mir_interpreter/mod.rs に公開 API 実装
   - 1_000_000 番台レジスタで一時値管理
   - 適切なクリーンアップ処理実装

2. **handle_box_call 可視性変更**:
   - src/backend/mir_interpreter/handlers/boxes.rs を pub に変更
   - JoinIR Runner からアクセス可能に

3. **JoinIR Runner BoxCall 統合**:
   - src/mir/join_ir_runner.rs の BoxCall 処理を書き換え
   - StringBox 直接呼び出し削除
   - VM の execute_box_call 経由に変更
   - JoinValue ↔ VMValue 変換で統合

4. **不要な関数削除**:
   - expect_str(), expect_int(), box_to_join_value() 削除
   - VMValue 変換に一本化

5. **テスト更新**:
   - joinir_runner_standalone.rs: VM インスタンス追加
   - joinir_runner_min.rs: VM 再利用

## 期待される効果
 Void guards 完全対応 (Void.length() → 0)
 PluginBox/InstanceBox 将来対応可能
 VM の完全な BoxCall 意味論統一
 VM 2号機回避(ガードレール設計成功)

## テスト結果
 joinir_runner_standalone_skip_ws ... ok
 joinir_runner_standalone_trim ... ok
 ビルド成功(0エラー)

## 完了タスク
- [x] MirInterpreter::execute_box_call() 実装
- [x] 1_000_000 レジスタ帯域割り当て
- [x] regs クリーンアップ実装
- [x] JoinIR Runner BoxCall 書き換え
- [x] テスト更新&PASS確認

🎉 VM 完全意味論統合完了!
2025-11-24 08:37:59 +09:00
790c8381fb chore: Update docs/private submodule (S-4 完了記録) 2025-11-24 07:24:59 +09:00
b7c7e48526 feat(joinir): Phase 27.14 - FuncScannerBox._append_defs JoinIR lowering完了 + コード品質改善
## Phase 27.14: FuncScannerBox._append_defs/2 JoinIR lowering
- **新規実装**: `funcscanner_append_defs.rs` (322行)
  - Shared Builder Pattern採用
  - MIR-based lowering with CFG sanity checks
  - ValueId range 9000-10999 割り当て
- **テスト**: `mir_joinir_funcscanner_append_defs.rs` (3テスト)
  - type_sanity, empty_module_returns_none, auto_lowering (ignored)
- **最小.hako**: `funcscanner_append_defs_minimal.hako`

## コード品質改善 (5項目完了)
1. **CFG Sanity Checks強化** (`common.rs`)
   - `has_array_method()`: ArrayBox操作検出
   - `has_loop_increment()`: i+1パターン検出
2. **ValueIdテスト自動化** (`value_id_ranges.rs`)
   - マクロ化 + 自動overlap検証で30→15行に削減
3. **モジュール名統一確認** (作業不要、既に統一済み)
4. **Shared Builder命名統一** (`funcscanner_trim.rs`)
   - `build_trim_joinir` → `build_funcscanner_trim_joinir`
5. **全テストPASS確認**
   - value_id_ranges, funcscanner_trim, funcscanner_append_defs全てPASS 

## 効果
- CFG検証関数: 1個 → 3個 (200%↑)
- テストコード: 50%削減 (保守性向上)
- 命名一貫性: 75% → 100%
- ビルド成功率: 100%維持

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 05:23:26 +09:00
d460fac40c docs(joinir): Phase 27.11 完了記録 (submodule update) 2025-11-23 23:19:12 +09:00
6ee4ee780a docs(joinir): Phase 27.10 完了 - ドキュメント更新
- IMPLEMENTATION_LOG.md: Phase 27.10 + 27.10.1 完了記録
- joinir_coverage.md: 責務範囲(D-2)セクション追加

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 22:51:45 +09:00
c1aa3c8c2b feat(joinir): Phase 27.8-4/5 — skip_ws CFG sanity checks + fallback design
- MirQuery API を使用した軽量 CFG チェック実装
  - Entry block successors >= 1
  - Const(0) 存在確認
  - String.length() 存在確認
- 予期しない MIR 構造時の手書き版 fallback 設計
- A/B テスト完了: 手書き版・MIR-based 版両方 PASS 
- ドキュメント更新: joinir_coverage.md + IMPLEMENTATION_LOG.md

Phase 27.9 modular refactoring: commit 3d5979c7
Phase 27.8-4/5 verification: CFG checks + docs updates
2025-11-23 18:03:33 +09:00
3d5979c78e refactor(joinir): Phase 27.9 - Modular separation of join_ir.rs into directory structure
Phase 27.9 で join_ir.rs (~1,336行) を以下のモジュール構造に分離:

## 新規ディレクトリ構造:
```
src/mir/join_ir/
├── mod.rs                           # 型定義・共通ユーティリティ (~330行)
└── lowering/
    ├── mod.rs                       # lowering インターフェース
    ├── min_loop.rs                  # lower_min_loop_to_joinir (~140行)
    ├── skip_ws.rs                   # skip_ws lowering 3関数 (~390行)
    └── funcscanner_trim.rs          # trim lowering (~480行)
```

## 技術的変更:
- **型定義統一**: JoinFuncId, JoinInst, JoinModule 等を mod.rs に集約
- **lowering 分離**: 3つの lowering 関数を個別モジュールに移動
- **後方互換性**: pub use で lowering 関数を re-export(既存コード影響なし)
- **削除**: src/mir/join_ir.rs (旧単一ファイル)

## テスト結果:
- **385 passed** (+1 from 384)
- **9 failed** (-1 from 10)
- **ビルド成功**: 0 errors, 18 warnings (変化なし)

## 効果:
- **保守性向上**: 1,336行 → 4ファイル(各300-500行)で可読性向上
- **モジュール境界明確化**: 型定義 vs lowering 実装の責務分離
- **将来の拡張容易**: 新 lowering 関数追加が簡単に

Phase 27.8 で実装した MIR 自動解析 lowering の基盤整備完了。

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 16:49:49 +09:00
64b71f5b12 chore: update docs/private submodule (Phase 27.6-3 documentation) 2025-11-23 11:36:49 +09:00
308b57ff89 chore: update docs/private submodule for Phase 27.6-2 2025-11-23 11:27:16 +09:00
4fd74f2a6e feat(phi): Phase 27.5 - JoinIR Exit φ 統合(LoopExitShape 雛形)
LoopExitShape 構造体を追加し、Exit φ の意味を JoinIR 側に固定:

- LoopExitShape 追加 (src/mir/join_ir.rs:84-111)
  - exit_args: Vec<ValueId> で Exit φ の意味を表現
  - minimal (exit_args=[i]), trim (exit_args=[e], Option A)
  - #[allow(dead_code)] で Phase 27.6 まで設計専用

- Exit φ コメント追加
  - lower_skip_ws_to_joinir: 2箇所の exit パスに意味明記
  - lower_funcscanner_trim_to_joinir: Option A として意味明記

- テストコメント更新
  - mir_joinir_skip_ws.rs: Exit φ (i の合流) 検証を明記
  - mir_joinir_funcscanner_trim.rs: Exit φ (e の合流+substring) を明記

- ドキュメント更新
  - IMPLEMENTATION_LOG.md: Phase 27.5 セクション追加
  - TASKS.md: Phase 27.5 完了マーク

ExitPhiBuilder は Phase 27.6 まで保留。本線影響ゼロ。
2025-11-23 11:03:38 +09:00
0d3d6cc455 chore: update docs/private submodule for Phase 27.4-C
Phase 27.4-C のドキュメント更新を反映(commit 7025d50)
2025-11-23 10:10:02 +09:00
c652d01b8f chore(submodule): Update docs/private - Phase 27.3 documentation
Submodule commit e9664a4: Phase 27.3-joinir-phi フェーズ開始

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 09:12:53 +09:00
0852a397d9 Add experimental JoinIR runner and tests 2025-11-23 08:38:15 +09:00
e283e4681b chore(submodule): Update docs/private to include Phase 27.1 documentation
Submodule commit 448b52d: Phase 27.1-joinir 実装計画・ログ追加

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 06:30:02 +09:00
a103fbdb34 chore: Update docs/private submodule (Phase 27.1 checklist completion) 2025-11-23 06:07:16 +09:00
17dfd351d5 chore: Update docs/private submodule (Phase 27.1 log) 2025-11-23 06:06:36 +09:00
15568b63f9 chore: サブモジュール更新 - Phase 26-H roadmap追加
docs/private サブモジュールの更新:
- Phase 26-H roadmap追加
- Phase 27 JoinIR計画追加
- 4ファイル追加(roadmap2/phases/)
2025-11-23 05:54:30 +09:00
8750186e55 chore: Phase 26-H セッション完了 - 全ドキュメント更新
Phase 26-H 完了内容:
 JoinIR 型定義実装(src/mir/join_ir.rs)
 MIR → JoinIR 自動変換実装(lower_min_loop_to_joinir)
 自動変換テスト実装(mir_joinir_min_auto_lowering)
 PHI/Loop箱 → JoinIR 移行対応表追加(loopform_ssot.md)

ドキュメント更新:
- Phase 27 JoinIR タスク計画追加
- Phase 26-H タスク完了記録
- 各種 README 更新(進捗反映)
- CURRENT_TASK.md 更新

コミット統計: $(git status --short | wc -l) files changed

次のステップ: Phase 27 一般化 MIR → JoinIR 変換
2025-11-23 05:53:27 +09:00
9a5cec394c docs(loopform): PHI/Loop箱→JoinIR移行対応表追加
実装内容:
- loopform_ssot.md に Phase 26-H 以降の移行戦略追加
- 全17箱の将来的な扱いを3カテゴリに分類:
  🔄 JoinIR に吸収(6箱): Header/Exit/Snapshot系
   削除候補(4箱): PhiBuilder/IfPhi/LoopPhi系
   残す(7箱): 前処理/検証/ユーティリティ系

移行戦略:
- Phase 27: 一般化 MIR → JoinIR 変換実装
- Phase 28: JoinIR 実行器実装(VM/LLVM)
- Phase 29: レガシー PHI 箱の段階的削除

これで「今の箱が最終的にどう片付くか」一目瞭然!🎉
2025-11-23 04:52:37 +09:00
2692eafbbf feat(mir): Phase 26-H JoinIR型定義実装完了 - ChatGPT設計
## 実装内容(Step 1-3 完全達成)

### Step 1: src/mir/join_ir.rs 型定義追加
- **JoinFuncId / JoinContId**: 関数・継続ID型
- **JoinFunction**: 関数(引数 = φノード)
- **JoinInst**: Call/Jump/Ret/Compute 最小命令セット
- **MirLikeInst**: 算術・比較命令ラッパー
- **JoinModule**: 複数関数保持コンテナ
- **単体テスト**: 型サニティチェック追加

### Step 2: テストケース追加
- **apps/tests/joinir_min_loop.hako**: 最小ループ+breakカナリア
- **src/tests/mir_joinir_min.rs**: 手書きJoinIR構築テスト
  - MIR → JoinIR手動構築で型妥当性確認
  - #[ignore] で手動実行専用化
  - NYASH_JOINIR_EXPERIMENT=1 トグル制御

### Step 3: 環境変数トグル実装
- **NYASH_JOINIR_EXPERIMENT=1**: 実験モード有効化
- **デフォルト挙動**: 既存MIR/LoopForm経路のみ(破壊的変更なし)
- **トグルON時**: JoinIR手書き構築テスト実行

## Phase 26-H スコープ遵守
 型定義のみ(変換ロジックは未実装)
 最小限の命令セット
 Debug 出力で妥当性確認
 既存パイプライン無影響

## テスト結果
```
$ NYASH_JOINIR_EXPERIMENT=1 cargo test --release mir_joinir_min_manual_construction -- --ignored --nocapture
[joinir/min] MIR module compiled, 3 functions
[joinir/min] JoinIR module constructed:
[joinir/min]  JoinIR型定義は妥当(Phase 26-H)
test result: ok. 1 passed; 0 failed
```

## JoinIR理論の実証
- **φノード = 関数引数**: `fn loop_step(i, k_exit)`
- **merge = join関数**: 分岐後の合流点
- **ループ = 再帰関数**: `loop_step` 自己呼び出し
- **break = 継続呼び出し**: `k_exit(i)`

## 次フェーズ (Phase 27.x)
- LoopForm v2 → JoinIR 自動変換実装
- break/continue ハンドリング
- Exit PHI の JoinIR 引数化

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

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
2025-11-23 04:10:12 +09:00
948f22a03a feat(phi): Phase 26-F-2 - 箱理論による責務分離(IfBodyLocalMergeBox新設)
**箱理論による問題解決**:
-  問題: LoopVarClassBox(ループスコープ分析)とif-merge処理が混在
-  解決: if-merge専用箱を新設して責務分離

**新箱: IfBodyLocalMergeBox**:
- 責務: if-merge専用のbody-local φ候補決定
- ロジック:
  - 両腕に存在する変数を検出
  - pre_ifと比較して値が変わった変数のみ
  - empty elseは空リスト返す
- 特徴: LocalScopeInspector不要、LoopVarClassBox不使用

**変更ファイル**:
- src/mir/phi_core/if_body_local_merge.rs: 新規作成(IfBodyLocalMergeBox)
- src/mir/phi_core/phi_builder_box.rs: IfBodyLocalMergeBox使用に切り替え
- src/mir/phi_core/body_local_phi_builder.rs: filter_if_merge_candidates()削除
- src/mir/loop_builder.rs: BodyLocalPhiBuilder setup削除
- src/mir/phi_core/mod.rs: if_body_local_merge追加

**テスト結果**:
- Passed: 353→354 (+1) 
- Failed: 14→14 (退行なし)

**既知の問題**:
- domination error依然残存(%48 in bb48 from bb52)
- 次フェーズで調査・修正予定

技術詳細:
- ChatGPT箱理論分析による設計
- A案ベースのシンプル実装
- 責務明確化: ループスコープ分析 vs if-merge専用処理
2025-11-22 11:03:21 +09:00
cbe6bf0140 feat(phi): Phase 26-F Step 1 & 3 - BodyLocal if-merge統合(WIP - 過剰フィルタリング発生中)
Step 1完了:
- body_local_phi_builder.rs: filter_if_merge_candidates() API追加
- pre_if/then_end/else_end_opt/reachable_preds受け取り
- LoopVarClassBox使用して変数分類

Step 3完了:
- loop_builder.rs: BodyLocalPhiBuilder作成・PhiBuilderBoxに設定
- phi_builder_box.rs: IfPhiContext拡張・set_body_local_filter()実装
- compute_modified_names_if()でフィルタリング適用

**問題**: LocalScopeInspectorBox空のため全候補フィルタリング(0 candidates)

技術詳細:
- inspector定義記録なし → classify誤判定 → 全変数BodyLocalInternal扱い
- テスト結果: bb54/bb52→bb38/bb36/bb32(ブロック番号変化=PHI生成影響あり)
- mir_stage1_using_resolver_modules_map_continue_break_with_lookup_verifies: PASS
- mir_stage1_using_resolver_resolve_with_modules_map_verifies: FAIL(domination error残存)

次のステップ:
1. filter_if_merge_candidates()単純実装(inspector不要)
2. または変数定義トラッキング実装
3. ChatGPT相談推奨
2025-11-22 09:05:31 +09:00
7812c3d4c1 feat(phi): Phase 25.1 - BTreeMap移行 (21ファイル、80%決定性達成)
## 修正内容

### Core MIR/PHI (5ファイル)
- builder.rs: variable_map, value_types, value_origin_newbox
- context.rs: 3つのマップ
- loop_builder.rs: 3箇所
- loop_snapshot_manager.rs: snapshot マップ
- loop_snapshot_merge.rs: 2箇所

### MIR関連 (4ファイル)
- function.rs: FunctionMetadata.value_types
- resolver.rs: CalleeResolverBox
- guard.rs: CalleeGuardBox
- loop_common.rs: apply_increment_before_continue

### JSON Bridge (5ファイル)
- json_v0_bridge/lowering.rs
- json_v0_bridge/lowering/expr.rs
- json_v0_bridge/lowering/if_else.rs
- json_v0_bridge/lowering/merge.rs
- json_v0_bridge/lowering/try_catch.rs
- json_v0_bridge/mod.rs

### Printer & Providers (4ファイル)
- printer.rs, printer_helpers.rs
- host_providers/mir_builder.rs
- backend/mir_interpreter/handlers/extern_provider.rs

### Tests (3ファイル)
- phi_core/conservative.rs
- tests/json_program_loop.rs
- tests/mir_stage1_using_resolver_verify.rs (2テスト有効化)

## テスト結果
- mir_stage1_using_resolver_resolve_with_modules_map_verifies: 80%成功率
- 完全な決定性は未達成 (HashMap 86箇所、HashSet 63箇所が残存)

🐱 Generated with Claude Code
2025-11-22 05:33:40 +09:00
6815065e72 docs: Phase 21.7++ チェックリスト最終更新 - コミットハッシュ記録
Phase 3 と Phase 4 のコミットハッシュを TBD から実際の値に更新:
- Phase 3: c8ad1dae (全体統一)
- Phase 4: 806e4d72 (ドキュメント整備)

Phase 21.7++ 全フェーズ完全完了!🎊

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 02:54:44 +09:00
806e4d72c4 docs(phase21.7): Phase 21.7++ Phase 4完了 - ドキュメント整備
## Phase 4 実装内容

### Phase 4.1: README 更新
- docs/development/roadmap/phases/phase-21.7-normalization/README.md
  - "Phase 21.7++ 実装完了" セクション追加(60行)
  - SSOT ルール・実装箇所・デバッグ環境変数を文書化
  - 全4フェーズの完了状況をコミットハッシュ付きで記録
  - 技術的成果の総括(Silent Failure根絶、arity バグ根治等)

### Phase 4.2: トラブルシューティングガイド作成
- docs/development/troubleshooting/using-resolution.md(新規作成、200+行)
  - 4つのエラーパターン別対処法
  - デバッグフローチャート
  - FAQ セクション
  - Phase 21.7++ 実装前後の比較表

### チェックリスト更新
- docs/development/current/main/phase-21.7-naming-ssot-checklist.md
  - Phase 0-4 完了状況サマリー追加
  - 累計工数: 10時間(進捗率: 50-67%)

## 技術的成果サマリー

 **Phase 0**: Silent Failure 根絶(時間→分)
 **Phase 1**: StaticMethodId SSOT 確立
 **Phase 2**: arity バグ根治(Hotfix 卒業)
 **Phase 3**: 素手 split 根絶(Builder 統一)
 **Phase 4**: ドキュメント整備(再発防止)

**Phase 21.7++ 全フェーズ完了!** 🎊

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 02:51:16 +09:00
c8ad1dae65 feat(naming): Phase 21.7++ Phase 3 完全達成 - Builder 側 StaticMethodId SSOT 統一
## 🎊 成果概要
**Phase 3: 全体統一** - MIR Builder 側を StaticMethodId 準拠に統一!

###  実装完了項目(全4タスク)
1. **素手 split 調査** (Phase 3.1)
   - 調査結果: known.rs に2箇所のみ(split_once)
   - unified_emitter には素手 split なし
   - 置き換え対象: 2箇所のみで簡潔

2. **unified_emitter.rs 統一** (Phase 3.2)
   - methodization 部分を StaticMethodId::parse() に変更
   - decode_static_method() → StaticMethodId::parse()
   - is_static_method_name() → StaticMethodId::parse().is_some()
   - arity 判定を Optional 対応(None も許容)

3. **known.rs split_once 置き換え** (Phase 3.3)
   - 2箇所の split_once('.') → StaticMethodId::parse()
   - box_name 取得を構造化表現経由に統一
   - コード削減: 8行 → 4行(50%削減)

4. **テスト実行・確認** (Phase 3.4)
   - json_lint_stringutils_min_vm: PASS 
   - namingbox_static_method_id: 13/13 PASS 
   - ビルド成功、警告のみ(既存問題)

### 📊 技術的効果
- **素手 split 根絶**: 全箇所を StaticMethodId 経由に統一
- **コード品質向上**: 構造化表現で型安全化
- **保守性向上**: 名前パース処理が SSOT に集約
- **後方互換**: 既存機能に影響なし

### 🎯 Phase 4 への準備完了
- Builder/VM 両方が StaticMethodId SSOT 準拠
- ドキュメント整備のみ残存(2-3時間)

---

**Phase 0**:  完了 (Silent Failure 根絶)
**Phase 1**:  完了 (SSOT 基盤確立)
**Phase 2**:  完了 (VM 統一)
**Phase 3**:  完了 (Builder 統一)
**Phase 4**: 次のタスク (ドキュメント化)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 02:43:45 +09:00
1b413da51e feat(naming): Phase 21.7++ Phase 2 完全達成 - VM StaticMethodId SSOT 統一
## 🎊 成果概要
**Phase 2: VM 統一** - arity バグ根治、VM 名前解決が SSOT 準拠!

###  実装完了項目(全4タスク)
1. **global.rs を StaticMethodId ベース化** (handlers/calls/global.rs:10-27)
   - Hotfix(normalize + arity 補完)→ 正式実装(StaticMethodId ベース)
   - パース成功: StaticMethodId::parse() → with_arity() → format()
   - パース失敗: 従来の normalize(builtin 互換)

2. **デバッグログ強化** (global.rs:33-47)
   - NYASH_DEBUG_FUNCTION_LOOKUP=1 でパース情報表示
   - box_name, method, arity を明示的に出力

3. **VM テスト拡張**  既存テストで十分
   - json_lint_stringutils_min_vm テスト完全通過

4. **テスト実行・確認**
   -  json_lint_stringutils_min_vm: PASS
   -  namingbox_static_method_id: 13/13 PASS
   -  全体テスト: 349 passed; 17 failed (Phase 0時と同様、退行なし)

### 📊 技術的効果
- **arity バグ根治**: "Box.method" → "Box.method/N" 補完が SSOT 経由
- **デバッグ向上**: 関数名パース情報が即座に確認可能
- **コード品質**: Hotfix → 正式実装へ移行完了
- **後方互換**: builtin 関数(print, panic 等)も正常動作

### 🎯 Phase 3 への準備完了
- MIR Builder 側も StaticMethodId 統一(Phase 3 候補)
- 全体統一で 100-200 行削減見込み

---

**Phase 0**:  完了 (Silent Failure 根絶)
**Phase 1**:  完了 (SSOT 基盤確立)
**Phase 2**:  完了 (VM 統一)
**Phase 3-4**: 次のマイルストーン (全体統一・ドキュメント化)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 02:31:35 +09:00
96c1345ec0 feat(naming): Phase 21.7++ Phase 1 完全達成 - StaticMethodId SSOT 基盤確立
## 🎉 成果概要
**Phase 1: 基盤整備** - NamingBox SSOT の構造化された基盤完成!

###  実装完了項目(全5タスク)
1. **StaticMethodId 構造体導入** (src/mir/naming.rs:86-248)
   - 構造化された関数名表現: box_name, method, arity
   - Optional arity でパース柔軟性確保

2. **ヘルパー関数追加**
   - `parse()`: "Box.method/N" or "Box.method" をパース
   - `format()`: 構造化 ID → 文字列変換
   - `with_arity()`: arity 補完用ビルダー
   - 互換性エイリアス: parse_global_name(), format_global_name()

3. **包括的テスト追加** (src/tests/namingbox_static_method_id.rs)
   - 13 テストケース全通過 
   - arity 有り/無し、normalize、format、round-trip、エラー処理
   - エッジケース: 複数ドット、大きな arity、不正入力

4. **テスト登録** (src/tests/mod.rs:21)
   - Phase 21.7++ コメント付きで登録

5. **動作確認**
   - `cargo test --release --lib namingbox_static_method_id`
   - 全 13 テスト PASS (0.00s)

### 📊 技術的効果
- **SSOT 確立**: 関数名パース/フォーマットを 1 箇所に集約
- **型安全**: 構造化表現で誤用防止
- **テスト保証**: 13 ケースで安全性確保
- **後方互換**: エイリアス関数で段階移行可能

### 🎯 Phase 2 への準備完了
- VM 側の関数ルックアップを StaticMethodId ベース化
- arity バグ根治への基盤確立

---

**Phase 0**:  完了 (Silent Failure 根絶)
**Phase 1**:  完了 (SSOT 基盤確立)
**Phase 2**: 次のタスク (VM 統一)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 02:25:22 +09:00
ce7517dc21 docs(phase-21.7): NamingBox SSOT 統一化チェックリスト作成
Phase 21.7++ の詳細実装計画を文書化

## 作成ファイル
- docs/development/current/main/phase-21.7-naming-ssot-checklist.md
  - Phase 0-4 の詳細タスクリスト(チェックボックス付き)
  - 各タスクの具体的な実装コード例
  - テストケース
  - 工数見積もり・優先順位
  - 完了条件

## CURRENT_TASK.md 更新
- Phase 21.7 セクションにチェックリストへのリンク追加

## 実装優先順位
1. Phase 0: 観測ライン緊急構築(最優先、2-3時間)
2. Phase 1: 基盤整備(4-6時間)
3. Phase 2: VM 統一(3-4時間)
4. Phase 3-4: 全体統一・ドキュメント(Phase 22+)

次のステップ: Phase 0 実装開始
2025-11-22 01:59:27 +09:00
a13f14cea0 feat(mir): Phase 21.7 Step 1-2 - NamingBox decode & Hotfix 7修正
## 実装内容

### Step 1: NamingBox decode関数追加 (naming.rs)
-  `decode_static_method(func_name) -> Option<(box, method, arity)>`
-  `is_static_method_name(func_name) -> bool`
- 対称性: encode ⇔ decode のペア実装で一貫性確保

### Step 2: unified_emitter Hotfix 7修正 (Lines 267-304)
-  StaticCompiler box kind判定追加
-  static box method は receiver 追加をスキップ
-  instance method(RuntimeData/UserDefined)のみ receiver 追加
-  トレース: NYASH_STATIC_METHOD_TRACE=1 でログ出力

## 判定ロジック
```rust
if box_kind == CalleeBoxKind::StaticCompiler {
    // "BoxName.method/arity" 形式か確認
    let func_name = format!("{}.{}/{}", box_name, method, args.len());
    if is_static_method_name(&func_name) {
        // static box method → receiver 追加しない
    }
}
```

## 検証
 Stage-1 テスト: RC=0 (apps/tests/stage1_skip_ws_repro.hako)
 ビルド成功(0 error)

## 次のステップ
- Step 3: methodization実装 (HAKO_MIR_BUILDER_METHODIZE=1)

Co-Authored-By: ChatGPT5 <chatgpt@openai.com>
2025-11-21 23:52:10 +09:00
51d53c2932 wip(stage1): StringHelpers.skip_ws receiver捏造問題の応急処置
- 問題: StaticCompiler method呼び出し時にreceiver ValueIdが捏造され未定義エラー
- 応急処置: string_helpers.hako で src を明示的に文字列化 (""+src)
- 再現ケース: apps/tests/stage1_skip_ws_repro.hako 追加
- エラー: use of undefined value ValueId(28) in ParserBox.length(receiver=ValueId(28))

根本修正は次のcommitで実施:
- src/mir/builder/ssa/local.rs - receiver origin/type伝播強化
- Phase 25.1: Stage-1 bridge receiver bug (workaround)
2025-11-21 13:19:18 +09:00