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

@ -29,7 +29,53 @@ pub fn encode_args(args: &[Box<dyn NyashBox>]) -> Vec<u8> {
encode::string(&mut buf, &a.to_string_box().value);
}
}
buf
maybe_tlv_roundtrip(buf)
}
/// Optional TLV shim roundtrip (feature/env gated).
///
/// Behavior:
/// - When compiled with feature `tlv-shim` AND env `HAKO_TLV_SHIM=1`,
/// the encoded TLV buffer is passed through `nyash-tlv` identity roundtrip.
/// - Otherwise, returns the original buffer unchanged.
pub fn maybe_tlv_roundtrip(buf: Vec<u8>) -> Vec<u8> {
if std::env::var("HAKO_TLV_SHIM").ok().as_deref() != Some("1") {
return buf;
}
#[cfg(feature = "tlv-shim")]
{
return nyash_tlv::tlv_roundtrip_identity(&buf);
}
#[cfg(not(feature = "tlv-shim"))]
{
// Feature disabled: keep behavior identical
buf
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tlv_roundtrip_off_by_default() {
std::env::remove_var("HAKO_TLV_SHIM");
let src = vec![1u8, 2, 3, 4, 5];
let out = maybe_tlv_roundtrip(src.clone());
assert_eq!(out, src);
}
#[cfg(feature = "tlv-shim")]
#[test]
fn tlv_roundtrip_env_feature_on() {
std::env::set_var("HAKO_TLV_SHIM", "1");
let src = vec![9u8, 8, 7, 6, 5, 4, 3];
let out = maybe_tlv_roundtrip(src.clone());
// Identity roundtrip returns the same bytes
assert_eq!(out, src);
// Cleanup
std::env::remove_var("HAKO_TLV_SHIM");
}
}
/// Simple helpers for common primitive returns