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.