This changelog tracks high‑level milestones while Core MIR and Phase 12 evolve. For detailed per‑file history, see git log and docs under `docs/development/roadmap/`.
### Phase 22.3 (Kernel Minimal C Runtime — design wrap)
- Added minimal C runtime crate (design-stage): `crates/nyash_kernel_min_c` (staticlib).
- LLVM extern lowering: normalized `nyash.console.*` → `nyash_console_*` for C linkage.
- Hako-first MIR emit stabilized via wrapper (`tools/hakorune_emit_mir.sh`): Stage‑B JSON is emitted with `NYASH_JSON_ONLY=1` and sanitized; builder falls back to Rust CLI on failure (defaults keep quick green).
### Prep for Phase 21.10 (LLVM line — crate backend)
- Backend selector and S3 canaries exist; print EXE canary currently SKIP pending small normalization. Next: enable print EXE PASS with env‑guarded normalization in ny‑llvmc (no default behavior changes).
- Core‑13 flip complete: code/tests enforce Core‑13 minimal kernel. Normalizations (Array/Ref→BoxCall, TypeCheck/Cast/Barrier/WeakRef unification) are ON by default via env (NYASH_MIR_CORE13=1). New tests validate normalization.
- Docs synced: step‑50 marked done; DEV quickstart points to Core‑13 reference.
- C‑API path green for both reps (ternary rc=44 / map set→size rc=1). `tools/smokes/v2/profiles/quick/core/phase2111/run_all.sh` runs both.
- VM handler cleanup (SSOT): removed duplicated `hostbridge.extern_invoke` branches in `calls.rs`; all externs route through `extern_provider_dispatch`.
- Trace polish: consolidated `[hb:*]` to low‑noise, gated by `HAKO_CABI_TRACE=1`.
- Docs updated: phase‑21.1 README set to COMPLETE with Quick Verify and troubleshooting.