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
This commit is contained in:
nyash-codex
2025-11-09 15:11:18 +09:00
parent 5d2cd5bad0
commit 981ddd890c
62 changed files with 1981 additions and 103 deletions

View File

@ -61,20 +61,30 @@ log_error() {
# 共通イズフィルタVM実行時の出力整形
filter_noise() {
if [ "${HAKO_SHOW_CALL_LOGS:-0}" = "1" ]; then
# Show raw logs (no filtering) to allow call traces / diagnostics
cat
return
fi
# プラグイン初期化やメタログ、動的ローダの案内等を除去
grep -v "^\[UnifiedBoxRegistry\]" \
| grep -v "^\[FileBox\]" \
| grep -v "^\[provider-registry\]" \
| grep -v "^\[plugin/missing\]" \
| grep -v "^\[plugin/hint\]" \
| grep -v "^Net plugin:" \
| grep -v "^\[.*\] Plugin" \
| grep -v "^\[.*\] Plugin" \
| grep -v "Using builtin StringBox" \
| grep -v "Using builtin ArrayBox" \
| grep -v "Using builtin MapBox" \
| grep -v "^\[using\]" \
| grep -v "^\[using/resolve\]" \
| grep -v "^\[using/text-merge\]" \
| grep -v "^\[builder\]" \
| grep -v "^\\[vm-trace\\]" \
| grep -v "^\[vm\] Stage-3" \
| grep -v "^\[DEBUG\]" \
| grep -v '^\{"ev":' \
| grep -v '^\{"ev":' \
| grep -v '^\[warn\]' \
| grep -v '^\[error\]' \
| grep -v '^\[warn\] dev fallback: user instance BoxCall' \
@ -176,6 +186,7 @@ run_nyash_vm() {
# Enable with: SMOKES_CLEAN_ENV=1
local ENV_PREFIX=( )
if [ "${SMOKES_CLEAN_ENV:-0}" = "1" ]; then
# Preserve NYASH_JSON_ONLY to allow quiet JSON pipelines (e.g., v1 emitters)
ENV_PREFIX=(env -u NYASH_DEBUG_ENABLE -u NYASH_DEBUG_KINDS -u NYASH_DEBUG_SINK \
-u NYASH_RESOLVE_FIX_BRACES -u NYASH_USING_AST \
-u NYASH_VM_TRACE -u NYASH_VM_VERIFY_MIR -u NYASH_VM_TOLERATE_VOID \
@ -759,8 +770,15 @@ v1_normalized_hash() {
echo "[FAIL] v1_normalized_hash: jq required" >&2
return 2
fi
# Extract JSON object line defensively (strip any leading noise like 'RC: N' or logs)
# Extract JSON object block from first '{' to EOF (handles pretty JSON)
local raw_json
raw_json=$(awk 'BEGIN{on=0} { if(on){print} else if($0 ~ /^[[:space:]]*\{/){ on=1; print } }' "$json_path")
if [ -z "$raw_json" ]; then
return 1
fi
local canon
canon=$(jq -S -c . < "$json_path") || return 1
canon=$(printf '%s' "$raw_json" | jq -S -c .) || return 1
printf "%s" "$canon" | sha256sum | awk '{print $1}'
}
@ -785,13 +803,19 @@ verify_v1_inline_file() {
local out
# Optional: show full logs for debugging (default OFF)
if [ "${HAKO_VERIFY_SHOW_LOGS:-0}" = "1" ]; then
# Show all output to stderr, then extract numeric rc
HAKO_ROUTE_HAKOVM=1 HAKO_VERIFY_V1_FORCE_HAKOVM=1 NYASH_VERIFY_JSON="$(cat "$json_path")" \
# Show all output to stderr, then extract numeric rc (env-sanitized for determinism)
env -i PATH="$PATH" \
HAKO_TRACE_EXECUTION="${HAKO_TRACE_EXECUTION:-0}" HAKO_VERIFY_SHOW_LOGS="${HAKO_VERIFY_SHOW_LOGS:-0}" \
HAKO_ROUTE_HAKOVM=1 HAKO_VERIFY_V1_FORCE_HAKOVM=1 \
NYASH_VERIFY_JSON="$(cat "$json_path")" \
"$NYASH_BIN" --backend vm /dev/null 2>&1 | tr -d '\r' | tee /tmp/hv1_debug.log >&2
out=$(awk '/^-?[0-9]+$/{n=$0} END{if(n!="") print n}' /tmp/hv1_debug.log)
else
out=$(HAKO_ROUTE_HAKOVM=1 HAKO_VERIFY_V1_FORCE_HAKOVM=1 NYASH_VERIFY_JSON="$(cat "$json_path")" \
"$NYASH_BIN" --backend vm /dev/null 2>/dev/null | tr -d '\r' | awk '/^-?[0-9]+$/{n=$0} END{if(n!="") print n}')
out=$(env -i PATH="$PATH" \
HAKO_TRACE_EXECUTION="${HAKO_TRACE_EXECUTION:-0}" \
HAKO_ROUTE_HAKOVM=1 HAKO_VERIFY_V1_FORCE_HAKOVM=1 \
NYASH_VERIFY_JSON="$(cat "$json_path")" \
"$NYASH_BIN" --backend vm /dev/null 2>/dev/null | tr -d '\r' | awk '/^-?[0-9]+$/{n=$0} END{if(n!="") print n}')
fi
if [[ "$out" =~ ^-?[0-9]+$ ]]; then
# echo numeric rc and return success; caller normalizes/returns as exit code