## Phase 20.18 — Tasks & Checklist P0 — Null/Void 固定(言語+VM+Core+Docs) - [ ] Parser: `null`/`void` を予約語として受理(AST: NullLiteral/VoidLiteral) - [ ] MIR: ConstValue に Null/Void を追加(emit/reader/verifier/print) - [ ] VM: VMValue::Null 追加、`to_bool_vm/eq_vm/to_string_vm` に Null を追加 - [ ] Singleton: NullBox/VoidBox の Lazy static 化(to_nyash_box で変換) - [ ] Core: Array/Map の SSOT へ収束(get/pop→Null、set/clear/push→Void、delete→値 or Null、set 不正→Fail) - [ ] Smokes: null/void identity/boolean、array/map(get/pop/delete/invalid set) - [ ] Docs: vm-core / gate-c-core-routing / INDEX / phase-20.18 README を更新 Core/API - [ ] Array.try_get/1(ok=value, err=E_OOB) - [ ] Array.try_pop/0(ok=value, err=E_EMPTY) - [ ] Map.try_get/1(ok=value, err=E_NOT_FOUND) - [ ] String.to_i64/0(ok=i64, err=E_PARSE) - [ ] String.to_f64/0(ok=f64, err=E_PARSE) Parser/Lowering - [ ] `let a?=/a!=` の受理 - [ ] `if let ok(v) = …` の受理 - [ ] Lowering: `?` → select, `!` → branch+trap, if‑let → branch(allocなし) Verifier/Diagnostics - [ ] 例外タグ(E_OOB/E_EMPTY/E_NOT_FOUND/E_PARSE)の固定 - [ ] `HAKO_TRY_API=1` gate での動作保証 Plugins(段階更新) - [ ] MapBox: get 欠落→Null、delete→値 or Null、clear→Void、set→Void/不正→E_INVALID_* - [ ] ArrayBox: get/pop 欠落→Null、push/set/clear→Void、set OOB→E_OOB - [ ] HostHandleRouter: Core 先行経路の優先(未更新プラグインの影響を遮断) Smokes(quick, opt‑in) - [ ] try_get: ok/err + `a?`/`a!`/if-let ok - [ ] try_pop: ok/err + `a?`/`a!` - [ ] map.try_get: ok/err + 糖衣 - [ ] string.to_i64/to_f64: ok/err(stdout/rc/タグ) Docs - [ ] result-semantics.md(case-by-case) - [ ] optional-semantics.md に 20.18 方針リンク追記 - [ ] guides/testing-guide.md に観測方法(stdout/rc/タグ)補足