# Phase 20.10 — Script‑First Runner (C‑ABI Unified) Status - In progress(部分的に完了)。Runner facade は既定ON(opt‑outで静穏運用可)。 Intent - Move policy/coordination logic closer to Hakorune (script) while keeping data‑plane at the C‑ABI boundary. - Unify extern calls via C‑ABI (`hako_*`) and minimize Rust‑only decision points. - Preserve VM/LLVM parity and provide small, reversible steps (Fail‑Fast / Box‑First). Scope (this phase) - Python/llvmlite 降ろしは据え置き(変更対象外)。 - 対象: 実行エンジンとランナー(調停/方針部分)・Extern/効果解決・CLI/ENV/設定の「上物」を Hakorune スクリプト側に寄せる。 - ルール: Extern は C‑ABI (`hako_*`) 経由に統一し、dotted C シンボルは AOT に流さない。 High‑Level Goals - Script Runner(Ref‑VM/Runner facade)を lang 側に置き、エントリ/コーディネーションを段階移譲。 - Extern/Effects の解決方針を SSOT で管理(将来 TOML → Rust/Python 生成)。 - CLI/ENV は CLI を正、ENV は補助(HAKO_* を第一表記)に統一。 Outcomes so far(20.10 前半の成果) - Runner pre‑invoke(既定ON) - 成功/失敗の短文を固定(stdout):`[script-runner] invoke` / `invoke: FAIL`。 - 代表スモーク(quick/integration-core)を追加(invoke / workspace-only)。 - UsingResolver の前段/比較/シャドウの観測フックを追加(挙動不変)。 - Externs SSOT - `specs/externs.toml` を SSOT とし、生成スクリプトで Python/Rust を同期。 - チェックを STRICT へ昇格(drift は FAIL)。 - Effects の取り込み導線(env):`HAKO_EXTERN_EFFECTS_SSOT=1`(Io を反映)。 - AOT selfhost ランチャ(最小) - `lang/build/build_runner.sh` で `lang/bin/hakorune` を生成(LLVM18 dev が必要)。 - 代表スモーク(quick)でビルド→実行を確認(exit code=0)。 Out‑of‑Scope - Python/llvmlite の大きな構造変更(降ろしは現状維持)。 - GC/IO/例外/非同期の実装拡張(本フェーズでは扱わない)。 Risk & Rollback - すべて gate 配下(既定 OFF)。スモークは parity/diagnostics のみを増強。 - 戻し手順: gate を OFF、または Runner 経路を既存 Rust ラインへ戻すだけで可逆。 TTL(bring‑up 限定トグル) - `HAKO_SCRIPT_RUNNER_FORCE_FAIL`, `HAKO_SCRIPT_RUNNER_TRACE` は撤退済み。固定短文のみ維持(invoke/FAIL)。