Files
hakorune/src/runner/core_executor.rs

66 lines
2.4 KiB
Rust
Raw Normal View History

/*!
* CoreExecutor JSON v0 Execute (boxed)
*
* Responsibility
* - Single entry to execute a MIR(JSON) payload under GateC/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
}
}
}