code wiki / _hdl_build / nx_plan_run_gate.nx
nx_plan_run_gate.nx source
↩ module page · 140 lines · 5711 B
1// nx_plan_run_gate.nx -- gate for the sovereign plan executor (workflows-as-data).
2// MIGRATED 2026-07-18 onto nx_gate_verdict (D001 exemplar #2). Teeth unchanged:
3// T1 seq-order execution; T2 pinned-args override; T3 failing step stops fail-closed;
4// T4 unknown tool refused; T5 unseeded plan fail-closed.
5// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
6import "nx_store_seed_lib.nx"
7import "nx_seg_store.nx"
8import "nx_deploy_lib.nx"
9import "nx_gate_verdict.nx"
10import "nx_syscalls.nx"
11
12const PG_CAP: i64 = 262144
13const PG_NL: i64 = 10
14const PG_PFX: i64 = 128
15const PG_MODE: i64 = 0x1a4
16
17func pg_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
18func pg_has(q: *u8, n: i64, s: *u8) -> i64 {
19 let sn: i64 = pg_slen(s)
20 if sn == 0 { return 1 }
21 var i: i64 = 0
22 while i + sn <= n {
23 var hit: i64 = 1
24 var j: i64 = 0
25 while j < sn { if q[i+j] != s[j] { hit = 0; j = sn } else { j = j + 1 } }
26 if hit == 1 { return 1 }
27 i = i + 1
28 }
29 return 0
30}
31func pg_lines(q: *u8, n: i64) -> i64 { var k: i64 = 0; var i: i64 = 0; while i < n { if q[i] == (PG_NL as u8) { k = k + 1 } i = i + 1 } return k }
32func pg_wfile(path: *u8, buf: *u8, n: i64) -> i64 {
33 let fd: i64 = sys_openat_wr(path, PG_MODE)
34 if fd < 0 { return 0 - 1 }
35 sys_write(fd, buf, n)
36 sys_close(fd)
37 return 0
38}
39func pg_mkpfx(dst: *u8, stem: *u8, epoch: i64) -> i64 {
40 var o: i64 = ss_cat(dst, 0, stem)
41 o = ss_catn(dst, o, epoch)
42 o = ss_cat(dst, o, "-" as *u8)
43 dst[o] = 0 as u8
44 return o
45}
46
47func main() -> i64 {
48 let ctr: *i64 = gv_ctr()
49 gv_head("nx_plan_run gate -- sovereign plan executor (workflows-as-data, fail-closed)" as *u8)
50 let elf: *u8 = "/tmp/nx_plan_run.sov.elf" as *u8
51 let alp: *u8 = "/tmp/prg_allow.conf" as *u8
52 let outf: *u8 = "/tmp/prg_run.out" as *u8
53 let epoch: i64 = sys_now_realtime_sec()
54
55 let ab: *u8 = sys_mmap(PG_CAP)
56 var ao: i64 = 0
57 ao = ss_cat(ab, ao, "echoer\x09/tmp/nx_plan_witness.sov.elf\x09GREEN\n" as *u8)
58 ao = ss_cat(ab, ao, "pinecho\x09/tmp/nx_plan_witness.sov.elf\x09GREEN\x09alpha beta\n" as *u8)
59 ao = ss_cat(ab, ao, "deadtool\x09/tmp/prg_missing.elf\x09GREEN\n" as *u8)
60 if pg_wfile(alp, ab, ao) < 0 { gv_puts("FIXTURE-FAIL allowlist\n" as *u8); sys_exit(1); return 1 }
61
62 let av: *i64 = sys_mmap(8*8) as *i64
63 let dump: *u8 = sys_mmap(PG_CAP)
64
65 // T1+T2: out-of-order 3-step plan with pinned override on step 20
66 let p1: *u8 = sys_mmap(PG_PFX)
67 pg_mkpfx(p1, "/tmp/prgp" as *u8, epoch)
68 let r1x: *u8 = sys_mmap(PG_PFX)
69 pg_mkpfx(r1x, "/tmp/prgr" as *u8, epoch)
70 let pb: *u8 = sys_mmap(PG_CAP)
71 var po: i64 = 0
72 po = ss_cat(pb, po, "30\x09echoer\x09charlie\n" as *u8)
73 po = ss_cat(pb, po, "10\x09echoer\x09alpha-first\n" as *u8)
74 po = ss_cat(pb, po, "20\x09pinecho\x09ignored-plan-arg\n" as *u8)
75 sts_seed(p1, pb, po)
76 av[0] = "t1" as *u8 as i64
77 av[1] = alp as i64
78 av[2] = p1 as i64
79 av[3] = r1x as i64
80 let rc1: i64 = dep_run_capture(elf, av, 4, outf)
81 var dn: i64 = sts_load(r1x, dump, PG_CAP)
82 if dn < 0 { dn = 0 }
83 var t1: i64 = 0
84 if rc1 == 0 { if pg_lines(dump, dn) == 3 { if pg_has(dump, dn, "alpha-first" as *u8) == 1 { if pg_has(dump, dn, "charlie" as *u8) == 1 { t1 = 1 } } } }
85 gv_check("T1 3 steps run in seq order, all rc=0, args echoed into results" as *u8, t1, ctr)
86 var t2: i64 = 0
87 if pg_has(dump, dn, "alpha beta" as *u8) == 1 { if pg_has(dump, dn, "ignored-plan-arg" as *u8) == 0 { t2 = 1 } }
88 gv_check("T2 pinned args override (alpha beta present, plan arg IGNORED)" as *u8, t2, ctr)
89
90 // T3: failing step stops the plan
91 let p2: *u8 = sys_mmap(PG_PFX)
92 pg_mkpfx(p2, "/tmp/prgq" as *u8, epoch)
93 let r2x: *u8 = sys_mmap(PG_PFX)
94 pg_mkpfx(r2x, "/tmp/prgs" as *u8, epoch)
95 po = 0
96 po = ss_cat(pb, po, "10\x09echoer\x09ok-step\n" as *u8)
97 po = ss_cat(pb, po, "20\x09deadtool\n" as *u8)
98 po = ss_cat(pb, po, "30\x09echoer\x09never-runs\n" as *u8)
99 sts_seed(p2, pb, po)
100 av[0] = "t3" as *u8 as i64
101 av[2] = p2 as i64
102 av[3] = r2x as i64
103 let rc3: i64 = dep_run_capture(elf, av, 4, outf)
104 dn = sts_load(r2x, dump, PG_CAP)
105 if dn < 0 { dn = 0 }
106 var t3: i64 = 0
107 if rc3 == 5 { if pg_lines(dump, dn) == 2 { if pg_has(dump, dn, "never-runs" as *u8) == 0 { if pg_has(dump, dn, "ok-step" as *u8) == 1 { t3 = 1 } } } }
108 gv_check("T3 failing step STOPS plan (2 rows only, never-runs absent, exit=5)" as *u8, t3, ctr)
109
110 // T4: unknown tool refused
111 let p3: *u8 = sys_mmap(PG_PFX)
112 pg_mkpfx(p3, "/tmp/prgt" as *u8, epoch)
113 let r3x: *u8 = sys_mmap(PG_PFX)
114 pg_mkpfx(r3x, "/tmp/prgu" as *u8, epoch)
115 po = 0
116 po = ss_cat(pb, po, "10\x09ghosttool\x09x\n" as *u8)
117 sts_seed(p3, pb, po)
118 av[0] = "t4" as *u8 as i64
119 av[2] = p3 as i64
120 av[3] = r3x as i64
121 let rc4: i64 = dep_run_capture(elf, av, 4, outf)
122 dn = sts_load(r3x, dump, PG_CAP)
123 if dn < 0 { dn = 0 }
124 var t4: i64 = 0
125 if rc4 == 4 { if pg_has(dump, dn, "REFUSED" as *u8) == 1 { t4 = 1 } }
126 gv_check("T4 unknown tool REFUSED (exit=4, REFUSED row recorded)" as *u8, t4, ctr)
127
128 // T5: unseeded plan fail-closed
129 av[0] = "t5" as *u8 as i64
130 av[2] = "/tmp/prg_nope-" as *u8 as i64
131 av[3] = "/tmp/prg_nores-" as *u8 as i64
132 let rc5: i64 = dep_run_capture(elf, av, 4, outf)
133 var t5: i64 = 0
134 if rc5 != 0 { t5 = 1 }
135 gv_check("T5 unseeded plan plane -> fail-closed nonzero exit" as *u8, t5, ctr)
136
137 let rc: i64 = gv_verdict("PLAN-RUN-GATE" as *u8, ctr, "workflows-as-data: seq order, pinned override, fail-closed stop/refuse" as *u8)
138 sys_exit(rc)
139 return rc
140}