nx_gaterun.nx source
↩ module page · 49 lines · 2563 B
1// nx_gaterun.nx -- sovereign build/test ORCHESTRATOR: run N gates through the sovereign toolchain and print ONE clean
2// aggregate (passed/total + the failures), using the REAL exit code per gate (0=GREEN, nonzero=RED) -- not output
3// grepping. Retires the bash `for g in ...; do nx_sov_build_run $g | grep GREEN; done` crutch entirely. Each gate's
4// chatter is muted to /dev/null so the summary is clean; a failure is re-run verbose on its own. Usage:
5// nx_gaterun <gate1> <gate2> ...
6// SOTA bar (2026 CI/parallel-test): run jobs + aggregate report; EXCEED = sovereign + real-exit-code (no false-green)
7// + data-driven gate list. Composes sys_fork/dup3/execve/wait4 (the nx_sov_build_run spine). license_tier: ORIGINAL
8import "nx_syscalls.nx"
9import "nx_gate.nx"
10
11// run "_offc/nx_sov_build_run.elf <gate>" with stdout/stderr muted; return the gate's exit code (128+sig if signalled).
12func gr_run_gate(gate: *u8, devnull: i64) -> i64 {
13 let runner: *u8 = "_offc/nx_sov_build_run.elf" as *u8
14 let av: *i64 = sys_mmap(32) as *i64
15 av[0] = runner as i64; av[1] = gate as i64; av[2] = 0
16 let envp: *i64 = sys_mmap(16) as *i64
17 envp[0] = "PATH=/usr/bin:/bin" as *u8 as i64; envp[1] = 0
18 let pid: i64 = sys_fork()
19 if pid == 0 {
20 sys_dup3(devnull, 1, 0)
21 sys_dup3(devnull, 2, 0)
22 sys_execve(runner, av, envp)
23 sys_exit(127)
24 }
25 let st: *i64 = sys_mmap(16) as *i64
26 sys_wait4(pid, st, 0)
27 let sig: i64 = st[0] & 0x7f
28 if sig != 0 { return 128 + sig }
29 return (st[0] >> 8) & 0xff
30}
31
32func main(argc: i64, argv: *i64) -> i64 {
33 if argc < 2 { gw("usage: nx_gaterun <gate1> <gate2> ...\n" as *u8); sys_exit(2); return 2 }
34 gw("=== nx_gaterun: sovereign gate orchestrator (real exit codes, muted chatter) ===\n" as *u8)
35 let devnull: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4)
36 var passed: i64=0; var total: i64=0
37 var i: i64=1
38 while i < argc {
39 let gate: *u8 = argv[i] as *u8
40 let rc: i64 = gr_run_gate(gate, devnull)
41 total = total + 1
42 if rc == 0 { passed = passed + 1; gw(" [PASS] " as *u8) } else { gw(" [FAIL rc=" as *u8); gn(rc); gw("] " as *u8) }
43 gw(gate); gw("\n" as *u8)
44 i = i + 1
45 }
46 gw("\n=== nx_gaterun " as *u8); gn(passed); gw("/" as *u8); gn(total); gw(" gates GREEN ===\n" as *u8)
47 if passed == total { gw("GATERUN GREEN -- sovereign orchestration, zero shell\n" as *u8); sys_exit(0); return 0 }
48 gw("GATERUN RED -- re-run a failing gate by name for its detail\n" as *u8); sys_exit(1); return 1
49}