# Current Task — Phase 20.34 (Concise) This document is intentionally concise (≤ 500 lines). Detailed history and per‑phase plans are kept under docs/private/roadmap/. See links below. Focus (now) - Keep quick profile green and stabilize verification on the Core route. - Mini‑VM (Hako) is kept, but canaries that were flaky are temporarily routed to Core for execution. Mini‑VM green will resume in Phase 20.36. - Prepare Phase 20.35 (MIR JSON v1 loader expansion) without changing default behavior. What’s green (20.34) - Loop/PHI unify (phi_core) in JSON v0 bridge — unified path used (toggle exposed). - Program(JSON v0) PHI‑trace canaries — PASS. - Core exec canaries (builder → emit → Core) — now routed and PASS: - mirbuilder_internal_core_exec_canary_vm (rc=10) - mirbuilder_internal_loop_core_exec_canary_vm (rc=3) - mirbuilder_internal_loop_count_param_core_exec_canary_vm (rc=6) - mirbuilder_internal_loop_sum_bc_core_exec_canary_vm (rc=8) Recent changes (summary) - Added MIR JSON v0 loader (minimal): src/runner/mir_json_v0.rs - Supports const/compare/branch/jump/phi/ret/copy - Promoted --mir-json-file to “execute + exit(rc)” - v1 → try_parse_v1_to_module; v0 → minimal loader; executes via Core interpreter - rc mapping unified in execute_mir_module_quiet_exit - verify_mir_rc improvements (tools/smokes/v2/lib/test_runner.sh) - Core primary: MIR(JSON) uses --mir-json-file, Program(JSON v0) uses --json-file - Mini‑VM(hakovm)rc==1 ヒューリスティックを削除し、経路評価を素直化(v1はCore、v0はhakovmに整流) - Hako JSON reader minor fix - lang/src/vm/core/json_v0_reader.hako: r# raw を通常文字列に統一(Hako生文字列の互換性向上) - MIR JSON v1 bridge extended - parse_const_value now handles f64/float, bool, string, and handle(StringBox) → ConstValue::String - Direct extern names supported in VM interpreter: env.mirbuilder.emit, env.codegen.emit_object - New v1 canaries (Core route) - tools/smokes/v2/profiles/quick/core/phase2035/v1_method_string_indexof_canary_vm.sh - tools/smokes/v2/profiles/quick/core/phase2035/v1_extern_mirbuilder_emit_canary_vm.sh - tools/smokes/v2/profiles/quick/core/phase2035/v1_method_string_substring_1arg_canary_vm.sh - tools/smokes/v2/profiles/quick/core/phase2035/v1_method_string_substring_2args_canary_vm.sh - tools/smokes/v2/profiles/quick/core/phase2035/v1_array_push_size_canary_vm.sh - (map) tools/smokes/v2/profiles/quick/core/phase2035/v1_map_set_get_size_canary_vm.sh - Note: returns size (1) for rc stability; get-path validated structurally Open (pending) - なし(v1 extern env.get/env.mirbuilder.emit/env.codegen.emit_object は provider で統一) Active toggles (debug/verify) - NYASH_MIR_UNIFY_LOOPFORM=1|0 - Default ON(実装は統一経路のみ。OFF指定時は警告を出すが挙動は統一のまま) - HAKO_VERIFY_PRIMARY=hakovm|core - 今回の flaky canary は core 側で実行(検証のみ切替)。Mini‑VM primary は Phase 20.36 で再挑戦。 - NYASH_VM_TRACE_PHI=1 / HAKO_PHI_VERIFY=1 / NYASH_PHI_VERIFY=1 - PHI 解析・観測(開発時のみ) How to run (quick) - Build: `cargo build --release` - Program v0 PHI‑trace (debug): - `SMOKES_ENABLE_DEBUG=1 bash tools/smokes/v2/profiles/quick/core/phase2034/program_v0_if_phi_trace_vm.sh` - `SMOKES_ENABLE_DEBUG=1 bash tools/smokes/v2/profiles/quick/core/phase2034/program_v0_loop_phi_trace_vm.sh` - Core exec canaries(20.34 緑対象): - `bash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_core_exec_canary_vm.sh` - `bash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_loop_core_exec_canary_vm.sh` - `bash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_loop_count_param_core_exec_canary_vm.sh` - `bash tools/smokes/v2/profiles/quick/core/phase2034/mirbuilder_internal_loop_sum_bc_core_exec_canary_vm.sh` Mini‑VM policy(20.34) - 実装は維持(alias/ret/phi 最小系を今後整える)。ただし quick の canary は Core へ寄せて緑化。 - 20.36 で verify primary を hakovm に段階的に切替、Mini‑VM green を進める。 Next (20.35 — scoped; behavior unchanged) 1) MIR JSON v1 loader expansion(Method/Extern/BoxCall — 最小) - callee.type=Method → BoxCall 復元(box_name/method/receiver/args) - callee.type=Extern → ExternCall 復元(env.get/env.codegen.emit_object/env.mirbuilder.emit/console.log など) - effects 未指定は PURE 既定、WRITE 系は最小でフラグ化(実害ゼロ) - v1 canary 追加(string indexOf/substring、array push/size、map set/get/size、extern env.get) 2) Using/alias の推移解決の堅牢化(深さ/循環/キャッシュ) - 実装済み(DFS 深さ上限=10、循環検知、キャッシュ)。strict では曖昧解決をエラー扱い。 3) ドキュメント:今回の経路(Core/verify)を roadmap に反映(DONE) Structure cleanups (20.35 A→B→C) - A) v1 mir_call 両対応(flat/nested): 実装済(ローダで互換吸収)。 - B) Extern provider 単一点化: 実装済(handlers/extern_provider.rs)。calls.rs/externals.rs から委譲。 - C) Const パース共通化: 実装済(src/runner/mir_json/common.rs)。まず v1 から採用(v0 は次段)。 Next (20.36 — verify primary → hakovm, preinclude removal, C‑ABI scaffold) - Verify primary 切替(段階): hakovm → Core fallback - preinclude 非推奨化(quick から撤去) - Mini‑VM の最小状態(len/size/push の簡易 state)を flag ガードで導入(デフォルトOFF)— 導入済 - 受信者別サイズ管理フラグ `HAKO_VM_MIRCALL_SIZESTATE_PER_RECV=1` を導入(canary 追加済) - HAKO_VM_MIRCALL_SIZESTATE=1 は緑化済(push 2回→size=2)。次は受信者別管理を flag で導入: HAKO_VM_MIRCALL_SIZESTATE_PER_RECV=1 - C‑ABI 設計(docs + ヘッダ雛形) Known open items(tracked to 20.36) - Mini‑VM: using/alias の推移解決(selfhost.vm.helpers.* 連鎖) - Mini‑VM: ret/phi の最小ケースで rc が確実に数値化されるよう整備(継続確認) Roadmap links(per‑phase docs) - Index: docs/private/roadmap/README.md - Phase 20.34: docs/private/roadmap/phases/phase-20.34/README.md - Phase 20.35: docs/private/roadmap/phases/phase-20.35/README.md - Phase 20.36: docs/private/roadmap/phases/phase-20.36/README.md Appendix — Toggle quick reference - NYASH_MIR_UNIFY_LOOPFORM=1|0 … Loop/PHI 統一(既定ON) - HAKO_VERIFY_PRIMARY=hakovm|core … verify 実行経路(今は core 優先で緑化) - NYASH_VM_TRACE_PHI=1 … VM PHI 適用トレース - HAKO_PHI_VERIFY=1 | NYASH_PHI_VERIFY=1 … ビルダー側の PHI inputs 検証 - HAKO_VM_PHI_STRICT=0(互換:NYASH_VM_PHI_STRICT=0) … 実行時 PHI 厳格 OFF(開発時のみ)