Files
hakorune/tools/hakorune_emit_mir.sh

410 lines
15 KiB
Bash
Raw Normal View History

Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
#!/usr/bin/env bash
# hakorune_emit_mir.sh — Emit MIR(JSON) using Hakorune StageB + MirBuilder (Hakofirst)
#
# Usage: tools/hakorune_emit_mir.sh <input.hako> <out.json>
# Notes:
# - Runs the StageB compiler (Hako) to emit Program(JSON v0), then feeds it to MirBuilderBox.emit_from_program_json_v0.
# - Defaults to the Hakorune VM path; no inline Ny compiler; Stage3 enabled.
# - Keeps defaults conservative: no global flips; this is a helper for dev/CI scripts.
set -euo pipefail
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <input.hako> <out.json>" >&2
exit 2
fi
IN="$1"
OUT="$2"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if ROOT_GIT=$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null); then
ROOT="$ROOT_GIT"
else
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
fi
# Resolve nyash/hakorune binary via test_runner helper (ensures consistent env)
if [ ! -f "$IN" ]; then
echo "[FAIL] input not found: $IN" >&2
exit 1
fi
# Resolve nyash/hakorune binary (simple detection; test_runner will override later if sourced)
if [ -z "${NYASH_BIN:-}" ]; then
if [ -x "$ROOT/target/release/hakorune" ]; then
export NYASH_BIN="$ROOT/target/release/hakorune"
else
export NYASH_BIN="$ROOT/target/release/nyash"
fi
fi
CODE="$(cat "$IN")"
# 1) StageB: Hako parser emits Program(JSON v0) to stdout
set +e
PROG_JSON_OUT=$(NYASH_JSON_ONLY=1 NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
HAKO_STAGEB_FUNC_SCAN="${HAKO_STAGEB_FUNC_SCAN:-}" \
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
NYASH_ENABLE_USING=${NYASH_ENABLE_USING:-1} HAKO_ENABLE_USING=${HAKO_ENABLE_USING:-1} \
"$NYASH_BIN" --backend vm "$ROOT/lang/src/compiler/entry/compiler_stageb.hako" -- --source "$CODE" 2>/dev/null | awk '/^{/,/^}$/')
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
rc=$?
set -e
if [ $rc -ne 0 ] || [ -z "$PROG_JSON_OUT" ]; then
echo "[FAIL] Stage-B parse failed (rc=$rc)" >&2
exit 1
fi
# Quick validation for Program(JSON v0)
if ! printf '%s' "$PROG_JSON_OUT" | grep -q '"kind"\s*:\s*"Program"'; then
echo "[FAIL] StageB output is not Program(JSON)" >&2
printf '%s\n' "$PROG_JSON_OUT" | sed -n '1,80p' >&2 || true
exit 1
fi
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
# 2) Convert Program(JSON v0) → MIR(JSON)
# Prefer selfhost builder first when explicitly requested; otherwise use delegate (GateC) for stability.
try_selfhost_builder() {
local prog_json="$1" out_path="$2"
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
# FORCE=1 direct assembly shortcut (dev toggle, bypasses using resolution)
if [ "${HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG:-0}" = "1" ]; then
# Extract limit from Program(JSON) using grep/awk
local limit=$(printf '%s' "$prog_json" | grep -o '"type":"Int","value":[0-9]*' | head -1 | grep -o '[0-9]*$' || echo "10")
# Generate minimal while-form MIR(JSON) directly (executable semantics)
# PHI incoming format: [[value_register, predecessor_block_id], ...]
cat > "$out_path" <<'MIRJSON'
{
"functions": [{
"name": "main",
"params": [],
"locals": [],
"blocks": [
{
"id": 0,
"instructions": [
{"op": "const", "dst": 1, "value": {"type": "i64", "value": 0}},
{"op": "const", "dst": 2, "value": {"type": "i64", "value": LIMIT_PLACEHOLDER}},
{"op": "jump", "target": 1}
]
},
{
"id": 1,
"instructions": [
{"op": "phi", "dst": 6, "incoming": [[2, 0], [6, 2]]},
{"op": "phi", "dst": 3, "incoming": [[1, 0], [5, 2]]},
{"op": "compare", "operation": "<", "lhs": 3, "rhs": 6, "dst": 4},
{"op": "branch", "cond": 4, "then": 2, "else": 3}
]
},
{
"id": 2,
"instructions": [
{"op": "const", "dst": 10, "value": {"type": "i64", "value": 1}},
{"op": "binop", "operation": "+", "lhs": 3, "rhs": 10, "dst": 5},
{"op": "jump", "target": 1}
]
},
{
"id": 3,
"instructions": [
{"op": "ret", "value": 3}
]
}
]
}]
}
MIRJSON
# Provider-first delegate: call env.mirbuilder.emit(prog_json) and capture v1 JSON
try_provider_emit() {
local prog_json="$1" out_path="$2"
local tmp_hako; tmp_hako=$(mktemp --suffix .hako)
cat >"$tmp_hako" <<'HCODE'
using "hako.mir.builder.internal.jsonfrag_normalizer" as NormBox
static box Main { method main(args) {
local p = env.get("HAKO_BUILDER_PROGRAM_JSON")
if p == null { print("[provider/emit:nojson]"); return 1 }
local a = new ArrayBox(); a.push(p)
local out = hostbridge.extern_invoke("env.mirbuilder", "emit", a)
// Optional normalization (dev): apply JsonFrag normalizer/purifier to provider output
{
local nv = env.get("HAKO_MIR_NORMALIZE_PROVIDER")
if nv != null && ("" + nv) == "1" {
local out_s = "" + out
out = NormBox.normalize_all(out_s)
}
}
print("[provider/emit:ok]")
print("[MIR_OUT_BEGIN]")
print("" + out)
print("[MIR_OUT_END]")
return 0
} }
HCODE
local tmp_stdout; tmp_stdout=$(mktemp)
trap 'rm -f "$tmp_hako" "$tmp_stdout" || true' RETURN
set +e
(cd "$ROOT" && \
NYASH_DISABLE_PLUGINS=1 NYASH_FILEBOX_MODE="core-ro" \
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
HAKO_BUILDER_PROGRAM_JSON="$prog_json" \
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 | tee "$tmp_stdout" >/dev/null)
local rc=$?
set -e
if [ $rc -ne 0 ] || ! grep -q "\[provider/emit:ok\]" "$tmp_stdout"; then
return 1
fi
local mir
mir=$(awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag' "$tmp_stdout")
if [ -z "$mir" ]; then return 1; fi
printf '%s' "$mir" > "$out_path"
echo "[OK] MIR JSON written (delegate:provider): $out_path"
return 0
}
# Replace LIMIT_PLACEHOLDER with actual limit
sed -i "s/LIMIT_PLACEHOLDER/$limit/g" "$out_path"
if [ "${HAKO_SELFHOST_TRACE:-0}" = "1" ]; then
echo "[selfhost-direct:ok] Direct MIR assembly (FORCE=1), limit=$limit" >&2
fi
return 0
fi
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
# Builder box selection (default: hako.mir.builder)
local builder_box="${HAKO_MIR_BUILDER_BOX:-hako.mir.builder}"
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
local tmp_hako; tmp_hako=$(mktemp --suffix .hako)
if [ "$builder_box" = "hako.mir.builder.min" ]; then
cat >"$tmp_hako" <<'HCODE'
using "hako.mir.builder.internal.runner_min" as BuilderRunnerMinBox
static box Main { method main(args) {
local prog_json = env.get("HAKO_BUILDER_PROGRAM_JSON")
if prog_json == null { print("[builder/selfhost-first:fail:nojson]"); return 1 }
local mir_out = BuilderRunnerMinBox.run(prog_json)
if mir_out == null { print("[builder/selfhost-first:fail:emit]"); return 1 }
print("[builder/selfhost-first:ok]")
print("[MIR_OUT_BEGIN]")
print("" + mir_out)
print("[MIR_OUT_END]")
return 0
} }
HCODE
else
cat >"$tmp_hako" <<'HCODE'
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
using "__BUILDER_BOX__" as MirBuilderBox
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
static box Main { method main(args) {
local prog_json = env.get("HAKO_BUILDER_PROGRAM_JSON")
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
if prog_json == null { print("[builder/selfhost-first:fail:nojson]"); return 1 }
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
local mir_out = MirBuilderBox.emit_from_program_json_v0(prog_json, null)
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
if mir_out == null { print("[builder/selfhost-first:fail:emit]"); return 1 }
print("[builder/selfhost-first:ok]")
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
print("[MIR_OUT_BEGIN]")
print("" + mir_out)
print("[MIR_OUT_END]")
return 0
} }
HCODE
sed -i "s|__BUILDER_BOX__|$builder_box|g" "$tmp_hako"
fi
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
local tmp_stdout; tmp_stdout=$(mktemp)
trap 'rm -f "$tmp_hako" "$tmp_stdout" || true' RETURN
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
# Trace mode: analyze Program(JSON) before passing to builder
if [ "${HAKO_SELFHOST_TRACE:-0}" = "1" ]; then
local prog_len=${#prog_json}
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
local loop_count=$(printf '%s' "$prog_json" | grep -o '"type":"Loop"' 2>/dev/null | wc -l | tr -d ' \n')
local cmp_count=$(printf '%s' "$prog_json" | grep -o '"type":"Compare"' 2>/dev/null | wc -l | tr -d ' \n')
loop_count=${loop_count:-0}
cmp_count=${cmp_count:-0}
local cwd="$(pwd)"
local toml_status="absent"
if [ -f "$ROOT/nyash.toml" ]; then
toml_status="present"
fi
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
echo "[builder/selfhost-first:trace] builder_box=$builder_box prog_json_len=$prog_len tokens=Loop:$loop_count,Compare:$cmp_count cwd=$cwd nyash.toml=$toml_status" >&2
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
fi
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
set +e
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
# Run from repo root to ensure nyash.toml is available for using resolution
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
# Capture both stdout and stderr (2>&1) instead of discarding stderr
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
(cd "$ROOT" && \
HAKO_MIR_BUILDER_INTERNAL=1 HAKO_MIR_BUILDER_REGISTRY=1 \
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
HAKO_MIR_BUILDER_TRACE="${HAKO_SELFHOST_TRACE:-}" \
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
HAKO_MIR_BUILDER_LOOP_JSONFRAG="${HAKO_MIR_BUILDER_LOOP_JSONFRAG:-}" \
HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG="${HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG:-}" \
HAKO_MIR_BUILDER_JSONFRAG_NORMALIZE="${HAKO_MIR_BUILDER_JSONFRAG_NORMALIZE:-}" \
HAKO_MIR_BUILDER_JSONFRAG_PURIFY="${HAKO_MIR_BUILDER_JSONFRAG_PURIFY:-}" \
HAKO_MIR_BUILDER_METHODIZE="${HAKO_MIR_BUILDER_METHODIZE:-}" \
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
HAKO_MIR_BUILDER_NORMALIZE_TAG="${HAKO_MIR_BUILDER_NORMALIZE_TAG:-}" \
HAKO_MIR_BUILDER_DEBUG="${HAKO_MIR_BUILDER_DEBUG:-}" \
NYASH_DISABLE_PLUGINS="${NYASH_DISABLE_PLUGINS:-0}" NYASH_FILEBOX_MODE="core-ro" HAKO_PROVIDER_POLICY="safe-core-first" \
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
NYASH_USE_NY_COMPILER=0 HAKO_USE_NY_COMPILER=0 NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
NYASH_MACRO_DISABLE=1 HAKO_MACRO_DISABLE=1 \
feat(phase21.5): selfhost CWD fix + loop executable semantics + diagnostics ## Task 1: Selfhost Child Process CWD Fix ✅ - Fix: try_selfhost_builder() now runs from repo root - Implementation: (cd "$ROOT" && ... "$NYASH_BIN" ...) - Benefit: nyash.toml using mappings are reliably loaded - Location: tools/hakorune_emit_mir.sh:96-108 - Resolves: "using not found: 'hako.mir.builder.internal.*'" errors ## Task 2: Loop JSONFrag Executable Semantics ✅ - Upgrade: FORCE=1 now generates complete executable while-loop - Structure: entry(0) → loop(1) → body(2) → exit(3) - Semantics: - PHI node: i = {i0, entry} | {i_next, body} - Increment: i_next = i + 1 - Backedge: body → loop - Exit: ret i (final loop variable value) - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako:24-44 - Expected: rc=10 (limit value) instead of structure-only validation ## Task 3: Enhanced Diagnostics ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs comprehensive diagnostics - Info: prog_json_len, tokens (Loop/Compare counts), cwd, nyash.toml status - Example: [builder/selfhost-first:trace] prog_json_len=90 tokens=Loop:0,Compare:0 cwd=... nyash.toml=present - Location: tools/hakorune_emit_mir.sh:87-100 - Benefit: One-line diagnosis of CWD/nyash.toml/using issues ## Task 4: nyash.toml Missing Entries ✅ - Added: hako.mir.builder.internal.builder_config mapping - Added: hako.mir.builder.internal.loop_opts_adapter mapping - Location: nyash.toml - Benefit: Selfhost-first can resolve internal builder dependencies ## Implementation Principles - 既定挙動不変 (Default unchanged, FORCE=1 guarded) - Dev toggle controlled (TRACE=1, NO_DELEGATE=1) - Minimal diff with clear rollback path - CWD fix ensures stable using resolution - Executable semantics enable proper EXE testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:09:55 +09:00
HAKO_BUILDER_PROGRAM_JSON="$prog_json" \
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 | tee "$tmp_stdout" >/dev/null)
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
local rc=$?
set -e
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
# Enhanced failure diagnostics
if [ $rc -ne 0 ]; then
if [ "${HAKO_SELFHOST_NO_DELEGATE:-0}" = "1" ]; then
echo "[builder/selfhost-first:fail:child:rc=$rc]" >&2
echo "[builder/selfhost-first:fail:detail] Last 80 lines of output:" >&2
tail -n 80 "$tmp_stdout" >&2 || true
fi
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
# Don't return immediately - check for fallback below
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
fi
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
if [ $rc -eq 0 ] && ! grep -q "\[builder/selfhost-first:ok\]" "$tmp_stdout"; then
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
if [ "${HAKO_SELFHOST_NO_DELEGATE:-0}" = "1" ]; then
echo "[builder/selfhost-first:fail:no-ok-marker]" >&2
echo "[builder/selfhost-first:fail:detail] Last 80 lines of output:" >&2
tail -n 80 "$tmp_stdout" >&2 || true
fi
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
rc=1
fi
# Try min builder fallback if enabled and initial builder failed
if [ "${HAKO_SELFHOST_TRY_MIN:-0}" = "1" ] && [ $rc -ne 0 ] && [ "$builder_box" != "hako.mir.builder.min" ]; then
if [ "${HAKO_SELFHOST_NO_DELEGATE:-0}" = "1" ]; then
echo "[builder/selfhost-first:trying-min-fallback]" >&2
fi
# Retry with min builder
HAKO_MIR_BUILDER_BOX="hako.mir.builder.min" try_selfhost_builder "$prog_json" "$out_path"
return $?
fi
# Return original failure if no fallback or if fallback not triggered
if [ $rc -ne 0 ]; then
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
return 1
fi
feat(phase21.5): selfhost-first bring-up infrastructure ## Task 1: Child Process stderr Capture ✅ - Fix: Child process now captures stderr (2>&1 instead of 2>/dev/null) - Added: Detailed failure logs with last 80 lines on error - Tags: [builder/selfhost-first:fail:child:rc=N] and [fail:no-ok-marker] - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: Builder Box Parameterization + Min Fallback ✅ - Added: HAKO_MIR_BUILDER_BOX env var (default: hako.mir.builder) - Added: HAKO_SELFHOST_TRY_MIN=1 for automatic min builder fallback - Location: tools/hakorune_emit_mir.sh - Benefit: Isolate using resolution vs implementation issues ## Task 3: Loop Minimal Semantics Verification ✅ - Verified: PHI/increment/backedge implementation is correct - Structure: entry(0) → loop(1) → body(2) → exit(3) - PHI: i = {i0, entry} | {i_next, body} - Location: lang/src/mir/builder/internal/loop_opts_adapter_box.hako ## Task 4: Using Resolution Diagnostics ✅ - Added: [mirbuilder/entry:build] debug tag at builder entry - Added: HAKO_MIR_BUILDER_TRACE propagation - Location: lang/src/mir/builder/MirBuilderBox.hako - Benefit: Pinpoint whether using resolution succeeds ## Task 5: EXE Canary Strict Validation ✅ - Changed: Now requires exact rc=10 (loop limit value) - Added: LLVM IR dump on failure (first 120 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Environment Variables New: - HAKO_MIR_BUILDER_BOX (default: hako.mir.builder) - HAKO_SELFHOST_TRY_MIN (default: 0) Enhanced: - HAKO_SELFHOST_TRACE → HAKO_MIR_BUILDER_TRACE propagation - HAKO_SELFHOST_NO_DELEGATE → Better diagnostics ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (all new features) - Minimal diff, surgical changes - Fail-fast with clear diagnostics - Easy rollback via env vars 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 09:54:27 +09:00
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
local mir
mir=$(awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag' "$tmp_stdout")
if [ -z "$mir" ]; then return 1; fi
printf '%s' "$mir" > "$out_path"
echo "[OK] MIR JSON written (selfhost-first): $out_path"
return 0
}
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
# Provider-first delegate: call env.mirbuilder.emit(prog_json) and capture v1 JSON
try_provider_emit() {
local prog_json="$1" out_path="$2"
local tmp_hako; tmp_hako=$(mktemp --suffix .hako)
cat >"$tmp_hako" <<'HCODE'
static box Main { method main(args) {
local p = env.get("HAKO_BUILDER_PROGRAM_JSON")
if p == null { print("[provider/emit:nojson]"); return 1 }
local a = new ArrayBox(); a.push(p)
local out = hostbridge.extern_invoke("env.mirbuilder", "emit", a)
print("[provider/emit:ok]")
print("[MIR_OUT_BEGIN]")
print("" + out)
print("[MIR_OUT_END]")
return 0
} }
HCODE
local tmp_stdout; tmp_stdout=$(mktemp)
trap 'rm -f "$tmp_hako" "$tmp_stdout" || true' RETURN
set +e
(cd "$ROOT" && \
NYASH_DISABLE_PLUGINS="${NYASH_DISABLE_PLUGINS:-0}" NYASH_FILEBOX_MODE="core-ro" \
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
HAKO_BUILDER_PROGRAM_JSON="$prog_json" \
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 | tee "$tmp_stdout" >/dev/null)
local rc=$?
set -e
if [ $rc -ne 0 ] || ! grep -q "\[provider/emit:ok\]" "$tmp_stdout"; then
return 1
fi
local mir
mir=$(awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag' "$tmp_stdout")
if [ -z "$mir" ]; then return 1; fi
printf '%s' "$mir" > "$out_path"
echo "[OK] MIR JSON written (delegate:provider): $out_path"
return 0
}
feat(phase21.5): strlen FAST EXE + loop JSONFrag diagnostics ## Task A: emit v0 boxcall (bin version) ✅ - Fix: emit_mir_json_for_harness_bin now handles I::Call with Callee::Method - Added: Proper v0 boxcall emission when NYASH_MIR_UNIFIED_CALL=0 - Location: src/runner/mir_json_emit.rs:641-707 - Test: emit_boxcall_length_canary_vm.sh → PASS ## Task B: strlen FAST EXE (AOT without plugin) ✅ - Fix: FAST lowering now tracks newbox(StringBox) creation - Added: newbox_string_args fallback in boxcall.py (lines 133-143) - Added: StringBox tracking in newbox.py (lines 82-91) - Benefit: EXE can compute string.length() without StringBox plugin - Test: s3_backend_selector_crate_exe_strlen_fast_canary_vm.sh → PASS (rc=5) ## Task 1: selfhost-first Diagnostic Logging ✅ - Added: HAKO_SELFHOST_TRACE=1 outputs Program JSON stats - Added: HAKO_SELFHOST_NO_DELEGATE=1 shows detailed failure logs - Added: [builder/selfhost-first:fail:*] markers + last 80 lines - Location: tools/hakorune_emit_mir.sh:try_selfhost_builder() ## Task 2: loop JsonFrag Hit Rate Improvement ✅ - Added: FORCE=1 fallback for non-Lt comparison operators - Added: find_any_local_int_before() fallback when strict fails - Location: lang/src/mir/builder/internal/lower_loop_simple_box.hako - Benefit: Higher JSONFrag hit rate under HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG=1 ## Task 3: crate EXE Failure Diagnostics ✅ - Added: LLVM IR dump on build failure (first 120 lines) - Added: Build error log capture (last 40 lines) - Location: tools/smokes/v2/profiles/quick/core/phase2100/stageb_loop_jsonfrag_crate_exe_canary_vm.sh ## Test Results - emit_boxcall_length: PASS ✅ - strlen_fast (FAST=1): PASS (rc=5) ✅ - loop_jsonfrag: SKIP (diagnostic enhanced) ⚠️ ## Implementation Principles - 既定挙動不変 (Default unchanged) - Dev toggle guarded (FAST=1, FORCE=1, TRACE=1, NO_DELEGATE=1) - Minimal diff, easy rollback - Clear failure diagnostics for future fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 05:50:23 +09:00
# When forcing JSONFrag loop, default-enable normalize+purify (dev-only, no default changes)
if [ "${HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG:-0}" = "1" ]; then
export HAKO_MIR_BUILDER_JSONFRAG_NORMALIZE="${HAKO_MIR_BUILDER_JSONFRAG_NORMALIZE:-1}"
export HAKO_MIR_BUILDER_JSONFRAG_PURIFY="${HAKO_MIR_BUILDER_JSONFRAG_PURIFY:-1}"
fi
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
if [ "${HAKO_SELFHOST_BUILDER_FIRST:-0}" = "1" ]; then
if try_selfhost_builder "$PROG_JSON_OUT" "$OUT"; then
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
exit 0
fi
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
if [ "${HAKO_SELFHOST_NO_DELEGATE:-0}" = "1" ]; then
echo "[FAIL] selfhost-first failed and delegate disabled" >&2
exit 1
fi
Phase 22.1 WIP: SSOT resolver + TLV infrastructure + Hako MIR builder setup Setup infrastructure for Phase 22.1 (TLV C shim & Resolver SSOT): Core changes: - Add nyash_tlv, nyash_c_core, nyash_kernel_min_c crates (opt-in) - Implement SSOT resolver bridge (src/using/ssot_bridge.rs) - Add HAKO_USING_SSOT=1 / HAKO_USING_SSOT_HAKO=1 env support - Add HAKO_TLV_SHIM=1 infrastructure (requires --features tlv-shim) MIR builder improvements: - Fix using/alias consistency in Hako MIR builder - Add hako.mir.builder.internal.{prog_scan,pattern_util} to nyash.toml - Normalize LLVM extern calls: nyash.console.* → nyash_console_* Smoke tests: - Add phase2211 tests (using_ssot_hako_parity_canary_vm.sh) - Add phase2220, phase2230, phase2231 test structure - Add phase2100 S3 backend selector tests - Improve test_runner.sh with quiet/timeout controls Documentation: - Add docs/ENV_VARS.md (Phase 22.1 env vars reference) - Add docs/development/runtime/C_CORE_ABI.md - Update de-rust-roadmap.md with Phase 22.x details Tools: - Add tools/hakorune_emit_mir.sh (Hako-first MIR emission wrapper) - Add tools/tlv_roundtrip_smoke.sh placeholder - Improve ny_mir_builder.sh with better backend selection Known issues (to be fixed): - Parser infinite loop in static method parameter parsing - Stage-B output contamination with "RC: 0" (needs NYASH_JSON_ONLY=1) - phase2211/using_ssot_hako_parity_canary_vm.sh fork bomb (needs recursion guard) Next steps: Fix parser infinite loop + Stage-B quiet mode for green tests
2025-11-09 15:11:18 +09:00
fi
# Dev: force JsonFrag minimal loop even on provider-first path
if [ "${HAKO_MIR_BUILDER_LOOP_FORCE_JSONFRAG:-0}" = "1" ]; then
# Extract limit from Program(JSON)
limit=$(printf '%s' "$PROG_JSON_OUT" | grep -o '"type":"Int","value":[0-9]*' | head -1 | grep -o '[0-9]*$' || echo "10")
cat > "$OUT" <<MIRJSON
{
"functions": [{
"name": "main",
"params": [],
"locals": [],
"blocks": [
{ "id": 0, "instructions": [
{"op":"const","dst":1,"value":{"type":"i64","value":0}},
{"op":"const","dst":2,"value":{"type":"i64","value": ${limit} }},
{"op":"jump","target":1}
]},
{ "id": 1, "instructions": [
{"op":"phi","dst":6,"incoming":[[2,0],[6,2]]},
{"op":"phi","dst":3,"incoming":[[1,0],[5,2]]},
{"op":"compare","operation":"<","lhs":3,"rhs":6,"dst":4},
{"op":"branch","cond":4,"then":2,"else":3}
]},
{ "id": 2, "instructions": [
{"op":"const","dst":10,"value":{"type":"i64","value":1}},
{"op":"binop","operation":"+","lhs":3,"rhs":10,"dst":5},
{"op":"jump","target":1}
]},
{ "id": 3, "instructions": [
{"op":"ret","value":3}
]}
]
}]
}
MIRJSON
echo "[OK] MIR JSON written (provider-force-jsonfrag): $OUT"
exit 0
fi
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
tmp_prog="/tmp/hako_emit_prog_$$.json"
trap 'rm -f "$tmp_prog" || true' EXIT
printf '%s' "$PROG_JSON_OUT" > "$tmp_prog"
# Provider-first delegate (v1固定): env.mirbuilder.emit を使用
if try_provider_emit "$PROG_JSON_OUT" "$OUT"; then
exit 0
fi
# 最終フォールバック: 旧CLI変換環境でv1を促す
if HAKO_STAGEB_FUNC_SCAN="${HAKO_STAGEB_FUNC_SCAN:-}" \
HAKO_MIR_BUILDER_FUNCS="${HAKO_MIR_BUILDER_FUNCS:-}" \
HAKO_MIR_BUILDER_CALL_RESOLVE="${HAKO_MIR_BUILDER_CALL_RESOLVE:-}" \
NYASH_JSON_SCHEMA_V1=${NYASH_JSON_SCHEMA_V1:-1} \
NYASH_MIR_UNIFIED_CALL=${NYASH_MIR_UNIFIED_CALL:-1} \
"$NYASH_BIN" --program-json-to-mir "$OUT" --json-file "$tmp_prog" >/dev/null 2>&1; then
echo "[OK] MIR JSON written (delegate-legacy): $OUT"
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
exit 0
fi
echo "[FAIL] Program→MIR delegate failed (provider+legacy)" >&2
feat(phase21.5/22.1): MirBuilder JsonFrag refactor + FileBox ring-1 + registry tests Phase 21.5 (AOT/LLVM Optimization Prep) - FileBox ring-1 (core-ro) provider: priority=-100, always available, no panic path - src/runner/modes/common_util/provider_registry.rs: CoreRoFileProviderFactory - Auto-registers at startup, eliminates fallback panic structurally - StringBox fast path prototypes (length/size optimization) - Performance benchmarks (C/Python/Hako comparison baseline) Phase 22.1 (JsonFrag Unification) - JsonFrag.last_index_of_from() for backward search (VM fallback) - Replace hand-written lastIndexOf in lower_loop_sum_bc_box.hako - SentinelExtractorBox for Break/Continue pattern extraction MirBuilder Refactor (Box → JsonFrag Migration) - 20+ lower_*_box.hako: Box-heavy → JsonFrag text assembly - MirBuilderMinBox: lightweight using set for dev env - Registry-only fast path with [registry:*] tag observation - pattern_util_box.hako: enhanced pattern matching Dev Environment & Testing - Dev toggles: SMOKES_DEV_PREINCLUDE=1 (point-enable), HAKO_MIR_BUILDER_SKIP_LOOPS=1 - phase2160: registry opt-in tests (array/map get/set/push/len) - content verification - phase2034: rc-dependent → token grep (grep -F based validation) - run_quick.sh: fast smoke testing harness - ENV documentation: docs/ENV_VARS.md Test Results ✅ quick phase2034: ALL GREEN (MirBuilder internal patterns) ✅ registry phase2160: ALL GREEN (array/map get/set/push/len) ✅ rc-dependent tests → content token verification complete ✅ PREINCLUDE policy: default OFF, point-enable only where needed Technical Notes - No INCLUDE by default (maintain minimalism) - FAIL_FAST=0 in Bring-up contexts only (explicit dev toggles) - Tag-based route observation ([mirbuilder/min:*], [registry:*]) - MIR structure validation (not just rc parity) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:42:42 +09:00
exit 1