# Phase‑20.28 — Self‑Host Bootstrap (Core + Builder) Purpose - Move from “Core bring‑up + ring0(Array minimal)” to a minimal, repeatable self‑host bootstrap loop: lang compiler emits MIR(JSON v0) that the VM Core executes, under a stable set of rules (effects/order/normalize). In‑scope (what we complete in this phase) - Core mir_call coverage (positive/negative) for day‑1 collections and strings; stable tags for unsupported. - Builder/Optimizer: effect hints and single‑pass emit order guarantees for mutating calls (set/push/pop/delete, etc.). - Normalize policy (SSOT): When plugins=OFF, do not force Method→Extern; honor Method/Constructor so ring0/builtin can operate. When plugins=ON, canonicalize to Extern as per SSOT. - Gate‑C parity: file/pipe × plugins ON/OFF — quiet output and rc mapping symmetry. - Minimal bootstrap profile (env/docs): the exact toggles for deterministic self‑host runs. Out‑of‑scope - Full language coverage or full std library. We target the smallest viable loop and expand next. - Performance tuning beyond basic correctness. Why split now - Phase‑20.27 finalized Core routing and added ring0(Array) minimal semantics. This phase focuses on closing the JSON→Core loop end‑to‑end for self‑host and stabilizing builder effects/order + normalize policy to avoid drift. Deliverables - Green canaries for Core mir_call (positive/negative), Gate‑C parity, and a small self‑host bootstrap smoke. - Docs: normalize policy, effects/order guarantees, bootstrap profile.