Files
hakorune/docs/private/roadmap/phases/phase-20.15

Phase 20.15 — Selfhost αFreezeFirst + DualRun

Purpose

  • 「削減%」ではなく「契約凍結+二重運用」で自立へ進める初回フェーズ。
  • JSON v0 MIR スキーマと Core VM 最小意味論を固定し、Selfhost 最小ラインを quick に導線。

Strategy

  • Freeze the contracts first: JSON v0 keys/型/operation 語彙と Core 最小 ops を docs/スモークで固定。
  • DualRun migration: 同契約に対して Rust/LLVM と Hakorune(Core) を並走ENV/プロファイルで切替)。

Goals (highlevel)

  • Core VM: mir_callArray/Map/Extern/Method 代表)と const/binop/compare/branch/jump/phi/load/store/copy/typeop の FailFast とタグ整備。
  • Builder: 単一パス emit を維持し、usedbeforedef を reader/validator で FailFast。
  • Canaries: emit→Core の return/binop/if/map/array 正負例を quick に追加既定OFF
  • Front: adopt/noop/fail の契約を薄く定義既定OFF、将来の切替点

NonGoals (20.15)

  • 既定挙動の変更はしない(すべて gate 配下)。広域リファクタは行わない。

Acceptance Criteria

  • 契約準拠 canaryreturn/binop/if/array/mapSMOKES_ENABLE_2015=1 で緑。
  • Core の新規 mir_call カバレッジに安定タグが付与され、負例は FailFast で固定。
  • Builder→JSON v0 で usedbeforedef を出さないreader/validator で検出可能)。

Status (Final)

  • quick/core canariesemit→Core: 正例/負例 含む代表4本が全て PASS
    • map_len_getrc=7, phi_diamondrc固定
    • array_set_oob_fail → [core/mir_call] array set out of bounds非0
    • map_get_missing_fail → [core/mir_call] map get missing key非0
  • JSON v0 schema を docs/development/architecture/mir_json_v0_schema.md に固定

Gates (default OFF)

  • SMOKES_ENABLE_2015=1 — 20.15 canary 有効化
  • HAKO_CORE_2015=1 — Core の拡張パスを許可

Notes

  • ENV は HAKO_* 優先・NYASH_* は互換docs で alias を明記)。
  • 詳細戦略: docs/private/roadmap/phases/FROZEN_TOOLCHAIN_STRATEGY.md