code wiki / _hdl_build / nx_orchestrate.nx
nx_orchestrate.nx source
↩ module page · 260 lines · 13527 B
1// nx_orchestrate.nx -- auto lane (eats debt seq163). WAIT-FOR-OPENING QUEUE: sessions QUEUE actions blocked
2// by a sibling's in-flight work instead of colliding. Each knowledge/store/deployq- row =
3// id | title | precondition | status | planid | note
4// precondition = a CHECKABLE predicate, now COMPOUND-capable (v2, 2026-07-20 -- for safe mgmt deploys that
5// must fire only when the fix is STAGED *and* mgmt is CALM):
6// exists:<path> | contains:<path>:<needle> -- single, OR
7// <pred> && <pred> -- AND of two (BOTH must hold to fire)
8// (e.g. exists:nx_mgmt_api.elf.new && contains:knowledge/status/api_contract.log:VERDICT=GREEN).
9// This POLLER (cron */5, non-blocking) evaluates every `queued` row: satisfied -> FIRE the row's plan via
10// nx_plan_run (reusing its allowlist+pinned-arg security WHOLESALE -- an action is a pre-seeded plan-
11// workflow, never arbitrary exec) and re-put the row status=fired-rc<N>; unsatisfied -> WAIT (logged, no
12// dead thread, no clobber). SOTA: Temporal durable await-condition, sovereign. Never-brick: fires only plans.
13// nx_orchestrate run [qprefix] [outlog]
14// ENVELOPE: 64 rows/pass, precond file window 256KB, fields 800B; declared in output.
15// exit: 0 ran (fired/waiting/skipped counted) | 4 queue unreadable | 2 usage.
16// license_tier: ORIGINAL expect_exit: 0
17import "nx_tool_run.nx"
18const K_MAGIC_30000: i64 = 30000
19const K_MAGIC_262144: i64 = 262144
20const K_MAGIC_262160: i64 = 262160
21const K_MAGIC_65536: i64 = 65536
22const K_MAGIC_32768: i64 = 32768
23const K_MAGIC_65535: i64 = 65535
24
25func oc_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
26func oc_b(rep: *u8, pos: i64, s: *u8) -> i64 { var p: i64 = pos; var i: i64 = 0; while s[i] != (0 as u8) { if p < K_MAGIC_30000 { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p }
27func oc_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < K_MAGIC_30000 { rep[p] = 45 as u8; p = p + 1 } m = 0 - m } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { if p < K_MAGIC_30000 { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p }
28func oc_reads(path: *u8, buf: *u8, cap: i64) -> i64 {
29 let fd: i64 = sys_openat_rd(path)
30 if fd < 0 { return 0 - 1 }
31 var n: i64 = 0
32 var go: i64 = 1
33 while go == 1 { let r: i64 = sys_read(fd, (buf as i64 + n) as *u8, cap - n); if r <= 0 { go = 0 } else { n = n + r } if n >= cap { go = 0 } }
34 sys_close(fd)
35 return n
36}
37func oc_has(buf: *u8, s: i64, e: i64, pat: *u8) -> i64 {
38 var pl: i64 = 0
39 while pat[pl] != (0 as u8) { pl = pl + 1 }
40 if pl == 0 { return 0 }
41 var i: i64 = s
42 var hit: i64 = 0
43 while i + pl <= e {
44 var k: i64 = 0
45 var m: i64 = 1
46 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } }
47 if m == 1 { hit = 1; i = e } else { i = i + 1 }
48 }
49 return hit
50}
51func oc_cpz(dst: *u8, cap: i64, buf: *u8, s: i64, e: i64) -> i64 {
52 var d: i64 = 0
53 var i: i64 = s
54 while i < e { if d < cap - 1 { dst[d] = buf[i]; d = d + 1 } i = i + 1 }
55 dst[d] = 0 as u8
56 return d
57}
58func oc_pre(s: *u8, pre: *u8) -> i64 {
59 var i: i64 = 0
60 while pre[i] != (0 as u8) { if s[i] != pre[i] { return 0 - 1 } i = i + 1 }
61 return i
62}
63// evaluate ONE predicate (null-term): 1 satisfied, 0 unsatisfied, -2 malformed. fbuf = scratch 256KB.
64func oc_eval(pred: *u8, fpath: *u8, fneedle: *u8, fbuf: *u8) -> i64 {
65 let ex: i64 = oc_pre(pred, "exists:" as *u8)
66 if ex > 0 {
67 var d2: i64 = 0
68 var s2: i64 = ex
69 while pred[s2] != (0 as u8) { if d2 < 598 { fpath[d2] = pred[s2]; d2 = d2 + 1 } s2 = s2 + 1 }
70 fpath[d2] = 0 as u8
71 let tfd: i64 = sys_openat_rd(fpath)
72 if tfd >= 0 { sys_close(tfd); return 1 }
73 return 0
74 }
75 let co: i64 = oc_pre(pred, "contains:" as *u8)
76 if co > 0 {
77 var d3: i64 = 0
78 var s3: i64 = co
79 var stop: i64 = 0
80 while stop == 0 { let c: i64 = pred[s3]; if c == 0 { stop = 1 } else { if c == 58 { stop = 2 } else { if d3 < 598 { fpath[d3] = c as u8; d3 = d3 + 1 } s3 = s3 + 1 } } }
81 fpath[d3] = 0 as u8
82 if stop != 2 { return 0 - 2 }
83 var d4: i64 = 0
84 var s4: i64 = s3 + 1
85 while pred[s4] != (0 as u8) { if d4 < 598 { fneedle[d4] = pred[s4]; d4 = d4 + 1 } s4 = s4 + 1 }
86 fneedle[d4] = 0 as u8
87 let fn2: i64 = oc_reads(fpath, fbuf, K_MAGIC_262144)
88 if fn2 < 0 { return 0 }
89 return oc_has(fbuf, 0, fn2, fneedle)
90 }
91 return 0 - 2
92}
93// evaluate a (possibly compound A && B) precondition string.
94func oc_eval_pre(fpre: *u8, fpath: *u8, fneedle: *u8, fbuf: *u8, lbuf: *u8, rbuf: *u8) -> i64 {
95 // find "&&"
96 var amp: i64 = 0 - 1
97 var i: i64 = 0
98 while fpre[i] != (0 as u8) { if fpre[i] == (38 as u8) { if fpre[i+1] == (38 as u8) { amp = i; } } if amp >= 0 { i = i } i = i + 1 }
99 if amp < 0 { return oc_eval(fpre, fpath, fneedle, fbuf) }
100 // left = [0, amp) trimmed of trailing spaces; right = after amp+2, skipping leading spaces
101 var le: i64 = amp
102 while le > 0 { if fpre[le-1] == (32 as u8) { le = le - 1 } else { let z: i64 = le; le = 0 - 2 - z } }
103 if le < 0 { le = 0 - 2 - le }
104 var d: i64 = 0
105 var j: i64 = 0
106 while j < le { if d < 700 { lbuf[d] = fpre[j]; d = d + 1 } j = j + 1 }
107 lbuf[d] = 0 as u8
108 var rs: i64 = amp + 2
109 var sk: i64 = 1
110 while sk == 1 { if fpre[rs] == (32 as u8) { rs = rs + 1 } else { sk = 0 } }
111 var d2: i64 = 0
112 while fpre[rs] != (0 as u8) { if d2 < 700 { rbuf[d2] = fpre[rs]; d2 = d2 + 1 } rs = rs + 1 }
113 rbuf[d2] = 0 as u8
114 let l: i64 = oc_eval(lbuf, fpath, fneedle, fbuf)
115 if l == (0 - 2) { return 0 - 2 }
116 let r: i64 = oc_eval(rbuf, fpath, fneedle, fbuf)
117 if r == (0 - 2) { return 0 - 2 }
118 if l == 1 { if r == 1 { return 1 } }
119 return 0
120}
121func main(argc: i64, argv: *i64) -> i64 {
122 if argc < 2 { oc_w(2, "usage: nx_orchestrate run [qprefix] [outlog]\n" as *u8); sys_exit(2); return 2 }
123 var qprefix: *u8 = "knowledge/store/deployq-" as *u8
124 var outlog: *u8 = "knowledge/status/orchestrate.log" as *u8
125 if argc >= 3 { qprefix = argv[2] as *u8 }
126 if argc >= 4 { outlog = argv[3] as *u8 }
127 let SP: *u8 = "/volume1/homes/elderwesto/nishihost/nx_store_put.elf" as *u8
128 let PR: *u8 = "/volume1/homes/elderwesto/nishihost/nx_plan_run.elf" as *u8
129 let qcap: i64 = K_MAGIC_262144
130 let qbuf: *u8 = sys_mmap(qcap + 16)
131 let olen: *i64 = sys_mmap(16) as *i64
132 let av: *i64 = sys_mmap(16 * 8) as *i64
133 av[0] = SP as i64
134 av[1] = qprefix as i64
135 av[2] = "load" as *u8 as i64
136 av[3] = 0
137 let lrc: i64 = tr_run_capture(SP, av, qbuf, qcap, olen)
138 let qn: i64 = olen[0]
139 if lrc == 127 { oc_w(1, "ORCHESTRATE verdict=QUEUE-UNREADABLE exec-127\n" as *u8); sys_exit(4); return 4 }
140 if lrc < 0 { oc_w(1, "ORCHESTRATE verdict=QUEUE-UNREADABLE harness\n" as *u8); sys_exit(4); return 4 }
141 let fid: *u8 = sys_mmap(128)
142 let ftitle: *u8 = sys_mmap(800)
143 let fpre: *u8 = sys_mmap(800)
144 let fstat: *u8 = sys_mmap(64)
145 let fplan: *u8 = sys_mmap(128)
146 let fnote: *u8 = sys_mmap(800)
147 let fpath: *u8 = sys_mmap(700)
148 let fneedle: *u8 = sys_mmap(700)
149 let lbuf: *u8 = sys_mmap(800)
150 let rbuf: *u8 = sys_mmap(800)
151 let stat2: *u8 = sys_mmap(64)
152 let fbuf: *u8 = sys_mmap(K_MAGIC_262160)
153 let cbuf: *u8 = sys_mmap(K_MAGIC_65536)
154 let rep: *u8 = sys_mmap(K_MAGIC_32768)
155 var p: i64 = 0
156 p = oc_b(rep, p, "ORCHESTRATE run queue_bytes=" as *u8); p = oc_bn(rep, p, qn)
157 p = oc_b(rep, p, " (v2 compound-AND; caps 64 rows/pass, 256KB precond; predicates exists:/contains: [&&]; fire=nx_plan_run)\n" as *u8)
158 var fired: i64 = 0
159 var waiting: i64 = 0
160 var skipped: i64 = 0
161 var malformed: i64 = 0
162 var rows: i64 = 0
163 var i: i64 = 0
164 var ls: i64 = 0
165 while i <= qn {
166 var isend: i64 = 0
167 if i == qn { isend = 1 } else { if qbuf[i] == (10 as u8) { isend = 1 } }
168 if isend == 1 {
169 if i > ls { if rows < 64 {
170 rows = rows + 1
171 let fs2: *i64 = sys_mmap(64) as *i64
172 let fe2: *i64 = sys_mmap(64) as *i64
173 var nf: i64 = 1
174 fs2[0] = ls
175 var q: i64 = ls
176 while q < i { if qbuf[q] == (9 as u8) { if nf < 6 { fe2[nf-1] = q; fs2[nf] = q + 1; nf = nf + 1 } } q = q + 1 }
177 fe2[nf-1] = i
178 if nf >= 4 {
179 oc_cpz(fid, 128, qbuf, fs2[0], fe2[0])
180 oc_cpz(ftitle, 800, qbuf, fs2[1], fe2[1])
181 oc_cpz(fpre, 800, qbuf, fs2[2], fe2[2])
182 oc_cpz(fstat, 64, qbuf, fs2[3], fe2[3])
183 fplan[0] = 0 as u8
184 fnote[0] = 0 as u8
185 if nf >= 5 { oc_cpz(fplan, 128, qbuf, fs2[4], fe2[4]) }
186 if nf >= 6 { oc_cpz(fnote, 800, qbuf, fs2[5], fe2[5]) }
187 var isq: i64 = 0
188 if fstat[0] == 113 { if fstat[1] == 117 { if fstat[2] == 101 { if fstat[3] == 117 { if fstat[4] == 101 { if fstat[5] == 100 { if fstat[6] == (0 as u8) { isq = 1 } } } } } } }
189 if isq == 0 { skipped = skipped + 1 } else {
190 let sat: i64 = oc_eval_pre(fpre, fpath, fneedle, fbuf, lbuf, rbuf)
191 if sat == (0 - 2) {
192 malformed = malformed + 1
193 p = oc_b(rep, p, "MALFORMED-PRED id=" as *u8); p = oc_b(rep, p, fid); p = oc_b(rep, p, "\n" as *u8)
194 } else { if sat == 1 {
195 if fplan[0] == (0 as u8) {
196 malformed = malformed + 1
197 p = oc_b(rep, p, "NO-PLANID id=" as *u8); p = oc_b(rep, p, fid); p = oc_b(rep, p, "\n" as *u8)
198 } else {
199 let av2: *i64 = sys_mmap(16 * 8) as *i64
200 av2[0] = PR as i64
201 av2[1] = fplan as i64
202 av2[2] = 0
203 let olen2: *i64 = sys_mmap(16) as *i64
204 let prc: i64 = tr_run_capture(PR, av2, cbuf, K_MAGIC_65535, olen2)
205 fired = fired + 1
206 var sp2: i64 = 0
207 let sfx: *u8 = "fired-rc" as *u8
208 while sfx[sp2] != (0 as u8) { stat2[sp2] = sfx[sp2]; sp2 = sp2 + 1 }
209 var m2: i64 = prc
210 if m2 < 0 { m2 = 99 }
211 if m2 >= 100 { m2 = 99 }
212 if m2 >= 10 { stat2[sp2] = (48 + (m2 / 10)) as u8; sp2 = sp2 + 1 }
213 stat2[sp2] = (48 + (m2 % 10)) as u8
214 stat2[sp2 + 1] = 0 as u8
215 let av3: *i64 = sys_mmap(16 * 8) as *i64
216 av3[0] = SP as i64
217 av3[1] = qprefix as i64
218 av3[2] = "put" as *u8 as i64
219 av3[3] = "nx_orchestrate" as *u8 as i64
220 av3[4] = fid as i64
221 av3[5] = ftitle as i64
222 av3[6] = fpre as i64
223 av3[7] = stat2 as i64
224 av3[8] = fplan as i64
225 av3[9] = fnote as i64
226 av3[10] = 0
227 let olen3: *i64 = sys_mmap(16) as *i64
228 tr_run_capture(SP, av3, cbuf, K_MAGIC_65535, olen3)
229 p = oc_b(rep, p, "FIRED id=" as *u8); p = oc_b(rep, p, fid)
230 p = oc_b(rep, p, " plan=" as *u8); p = oc_b(rep, p, fplan)
231 p = oc_b(rep, p, " rc=" as *u8); p = oc_bn(rep, p, prc)
232 p = oc_b(rep, p, "\n" as *u8)
233 }
234 } else {
235 waiting = waiting + 1
236 p = oc_b(rep, p, "WAITING id=" as *u8); p = oc_b(rep, p, fid)
237 p = oc_b(rep, p, " precond=" as *u8); p = oc_b(rep, p, fpre)
238 p = oc_b(rep, p, "\n" as *u8)
239 } }
240 }
241 }
242 } }
243 ls = i + 1
244 }
245 i = i + 1
246 }
247 p = oc_b(rep, p, "SUMMARY rows=" as *u8); p = oc_bn(rep, p, rows)
248 p = oc_b(rep, p, " fired=" as *u8); p = oc_bn(rep, p, fired)
249 p = oc_b(rep, p, " waiting=" as *u8); p = oc_bn(rep, p, waiting)
250 p = oc_b(rep, p, " skipped=" as *u8); p = oc_bn(rep, p, skipped)
251 p = oc_b(rep, p, " malformed=" as *u8); p = oc_bn(rep, p, malformed)
252 p = oc_b(rep, p, "\n" as *u8)
253 sys_write(1, rep, p)
254 let lfd: i64 = sys_openat_append(outlog, 420)
255 if lfd >= 0 { sys_write(lfd, rep, p); sys_close(lfd) }
256 let tfd2: i64 = sys_openat_wr("knowledge/status/orchestrate.out.tmp" as *u8, 420)
257 if tfd2 >= 0 { sys_write(tfd2, rep, p); sys_close(tfd2); sys_renameat("knowledge/status/orchestrate.out.tmp" as *u8, "knowledge/status/orchestrate.out" as *u8) }
258 sys_exit(0)
259 return 0
260}