/*! * CoreExecutor — JSON v0 → Execute (boxed) * * Responsibility * - Single entry to execute a MIR(JSON) payload under Gate‑C/Core policy. * - Encapsulates: optional canonicalize, v1-bridge try, v0-parse fallback, * OOB strict observation, and rc mapping via MIR Interpreter. * * Notes * - For now, execution uses the existing MIR Interpreter runner * (execute_mir_module_quiet_exit). Later we can swap internals to call * the Core Dispatcher directly without touching callers. */ use super::NyashRunner; pub(crate) fn run_json_v0(runner: &NyashRunner, json: &str) -> i32 { let mut payload = json.to_string(); let use_core_wrapper = crate::config::env::nyvm_core_wrapper(); let use_downconvert = crate::config::env::nyvm_v1_downconvert(); if use_core_wrapper || use_downconvert { // Best-effort canonicalize if let Ok(j) = crate::runner::modes::common_util::core_bridge::canonicalize_module_json(&payload) { payload = j; } match crate::runner::json_v1_bridge::try_parse_v1_to_module(&payload) { Ok(Some(module)) => { super::json_v0_bridge::maybe_dump_mir(&module); // OOB strict: reset observation flag crate::runner::child_env::pre_run_reset_oob_if_strict(); let rc = runner.execute_mir_module_quiet_exit(&module); if crate::config::env::oob_strict_fail() && crate::runtime::observe::oob_seen() { eprintln!("[gate-c][oob-strict] Out-of-bounds observed → exit(1)"); return 1; } return rc; } Ok(None) => { /* fall through to v0 */ } Err(e) => { eprintln!("❌ JSON v1 bridge error: {}", e); return 1; } } } match super::json_v0_bridge::parse_json_v0_to_module(&payload) { Ok(module) => { super::json_v0_bridge::maybe_dump_mir(&module); crate::runner::child_env::pre_run_reset_oob_if_strict(); let rc = runner.execute_mir_module_quiet_exit(&module); if crate::config::env::oob_strict_fail() && crate::runtime::observe::oob_seen() { eprintln!("[gate-c][oob-strict] Out-of-bounds observed → exit(1)"); return 1; } rc } Err(e) => { eprintln!("❌ JSON v0 bridge error: {}", e); 1 } } }