Phase‑20.29 — Rust Freeze Baseline + Self‑Host Loop
Purpose
- Freeze the Rust layer to thin I/O + entry glue, and move day‑to‑day development into lang (Core/Builder). Establish a minimal, repeatable “Go‑style” self‑host loop: Hakorune compiles Hakorune.
In‑scope
- Runner defaults (dev/quick) prefer Gate‑C(JSON→Core). NyVM wrapper remains opt‑in.
- Rust layer freeze policy documented and enforced (allow: glue/ENV/bugfix; deny: new semantics/ops).
- Self‑host bootstrap: lang compiler emits JSON v0; Gate‑C executes; loop stable under canaries.
- SSOT exposure: generate/consume call SSOT from lang; Rust consumes outputs (no hand‑copy).
Out‑of‑scope
- Full stdlib or wide plugin semantics; focus on the minimal loop and boundaries.
- Performance work beyond correctness/Fail‑Fast.
Deliverables
- Green quick/integration-core with dev default = Gate-C(Core).
- Freeze policy doc + toggles noted in env guide.
- Self-host “compile tiny → JSON → Core → result” canaries always green.
- SSOT flow: lang → generated table → Rust (read-only use).
References
- docs/development/architecture/rust-freeze-policy.md
- docs/development/architecture/ssot-lang-gen.md
Progress — 2025-10-31
- Gate-C(Core) is the default path for quick/dev; NYVM wrapper remains opt-in.
- Lang-side Core normalizer now rewrites all blocks/functions (String length/indexOf/lastIndexOf/substring/charAt/replace) and inserts missing
entryids. - MIR(JSON) reader honours first block id when
entryis omitted, fixing Gate-C “unterminated block” failures. - Minimal Hako emitter provides
emit_if_eq_i64/emit_if_ne_i64; canary (hako_min_emitter_if_eq_vm.sh) passes via Gate-C(Core). - Core canaries extended (
core_lang_normalize_string_indexof_from_vm.sh,core_lang_normalize_string_lastindexof_vm.sh) and documented in tools/smokes/v2/README.md. - Hako emitter canaries now run on curated JSON fixtures (
if_ne,phi_diamond) with an SSA validator to guard definition/usage consistency.
Remaining Work
- Normalize optional/bang flags for String indexOf/find family; extend canaries for failure semantics.
- Harden
_read_args_digitsand related JSON scanners against whitespace/empty-list quirks (consider tokenizer helper). - Consolidate Gate-C env helpers (some inline env writes remain in
pipe_io.rs); ensure plugin=OFF paths stay minimal. - Add additional Hako emitter canaries (if-ne + phi diamond) and JSON SSA validators.
- Re-run quick/integration-core after helper consolidation and promote canaries once stable.