Files
hakorune/docs/archive/roadmap/phases/phase-21.6-solidification/README.md
nyash-codex 811dfebf98 fix(joinir): Phase 241-EX - Remove hardcoded 'sum' check from Pattern3
Remove legacy hardcoded 'sum' carrier validation that was blocking
array_filter patterns with different accumulator names (e.g., 'out').

Before: Pattern3 required carrier named 'sum' to exist
After: Pattern3 uses carrier_info generically (any carrier name works)

Test results:
- phase49_joinir_array_filter_smoke: PASS 
- phase49_joinir_array_filter_fallback: PASS 
- phase49_joinir_array_filter_ab_comparison: PASS 
- Full suite: 909/909 PASS, 0 FAIL

Also: Archive old roadmap documentation (67k lines moved to docs/archive/)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 00:48:42 +09:00

49 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Phase 21.6 — Solidification (Hakoruneonly chain)
Goal
- Develop and validate the full chain using Hakorune only:
Parser(StageB) → MirBuilder (selfhostfirst) → VM → nyllvmc(crate) object/exe.
- Stop optimizations until the chain is green and repeatable on this host.
Scope
- Parser(StageB): JSON v0 correctness for control flow, call/method, literals.
- MirBuilder: stable MIR(JSON) emission (no spurious newbox/MapBox in loop JsonFrag path when not intended).
- VM: execute MIR(JSON) deterministically; stats/dev toggles optional.
- nyllvmc(crate): build obj/exe from MIR(JSON); no llvmlite dependency in the default path.
Default Policy
- Defaults remain unchanged for users. All bringup aids behind env toggles.
- Logs quiet by default. Dev tags require explicit env.
- Rust layer is used for diagnosis only; development proceeds via Hakorune scripts.
Env Toggles (recommended dev)
- HAKO_SELFHOST_BUILDER_FIRST=1
- NYASH_USE_NY_COMPILER=0 (alias of NYASH_DISABLE_NY_COMPILER)
- HAKO/NYASH_ENABLE_USING=1
- NYASH_PARSER_STAGE3=1, HAKO_PARSER_STAGE3=1
- NYASH_LLVM_BACKEND=crate
- Optional (debug): HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1, HAKO_MIR_BUILDER_JSONFRAG_NORMALIZE=1
How to run (chain E2E)
1) Emit MIR(JSON):
- bash tools/hakorune_emit_mir.sh input.hako /tmp/out.json
2) Build EXE (crate):
- NYASH_LLVM_BACKEND=crate bash tools/ny_mir_builder.sh --in /tmp/out.json --emit exe -o a.out
3) Run + check rc:
- ./a.out; echo $?
Canaries
- tools/dev/stageb_loop_json_canary.sh — Program(JSON) shape for loop(i<n){i=i+1}
- tools/dev/phase216_chain_canary.sh endtoend EXE rc=10 for minimal loop
Provider Path Notes (Dev)
- Optional normalization for provider output is available via `HAKO_MIR_NORMALIZE_PROVIDER=1`.
- This applies the same JsonFrag normalizer/purifier to MIR(JSON) emitted by the Rust Provider path.
- Keep defaults unchanged; use only during bringup to eliminate retafter effects.
- `HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1` now shortcircuits both selfhostfirst and providerfirst wrappers to emit a minimal, pure controlflow MIR suitable for EXE build sanity.
- Default OFF; intended for small canaries and performance harness bringup.
Removal Plan for temporary parser fallback
- Once VM/gpos interaction is fixed and parser emits correct loop JSON without guards,
remove the conservative fallback in ParserControlBox.parse_loop.