code wiki / _hdl_build / nx_vizsla_ops_gate.nx

nx_vizsla_ops_gate.nx source

↩ module page · 318 lines · 13672 B

1// nx_vizsla_ops_gate.nx -- VIZSLA V6 gate: the projects+maintenance fabric is 2// gate-proven against construction-known fixtures with HAND-COUNTED day 3// arithmetic (the oracle lives in this header, not the module under test). 4// 5// today = 2026-06-10. catalog: soon_days 14; vehicle-gas {oil-change 180, 6// tire-rotation 180, registration-renewal 365}; home-hvac {filter-change 90}. 7// assets: car1 vehicle-gas, hvac1 home-hvac => 4 slots. 8// ledger (seg-4001): oil done 2026-01-15 (an OLDER 2025-11-01 row is stored 9// AFTER it -- latest date must win); tire 2025-12-20; filter 2026-02-25; 10// deck steps 1,2 done; tax step 1 done. 11// hand counts: oil Jan15->Jun10 = 16+28+31+30+31+10 = 146 days, due_in 34 OK; 12// tire Dec20->Jun10 = 11+31+28+31+30+31+10 = 172, due_in 8 <= 14 DUE; 13// filter Feb25->Jun10 = 3+31+30+31+10 = 105, due_in -15 OVERDUE; 14// registration never done = NEVER schedule-first. 15// => verdict assets=2 tasks=4 ok=1 due=1 overdue=1 never=1 16// soon_days 5 fixture (data edit ONLY): tire due_in 8 > 5 => OK; ok=2 due=0. 17// projects: deck 3 steps (1,2 done) => 2/3 next=3:railings ACTIVE; 18// tax 1 step done => COMPLETE. => projects=2 active=1 complete=1 19// 20// Rows: 21// 1 loud-fail-missing-catalog due on absent catalog => exit 1 22// 2 log-load 7 rows -> new=7 committed seg-4001 23// 3 idempotent-relog new=0 dup_instore=7 segment=none (law 10) 24// 4 latest-wins-ok oil row exact (last=2026-01-15 days=146 due_in=34 OK) 25// 5 due-soon tire row exact (due_in=8 DUE schedule) 26// 6 overdue filter row exact (due_in=-15 OVERDUE do-now) 27// 7 never-first registration NEVER schedule-first 28// 8 verdict-counts assets=2 tasks=4 ok=1 due=1 overdue=1 never=1 29// 9 data-driven-soon soon_days=5 file => tire OK, ok=2 due=0, same binary 30// 10 due-determinism byte-identical twice 31// 11 project-active deck 2/3 next=3:railings ACTIVE 32// 12 project-complete tax COMPLETE + verdict 2/1/1 33// 13 status-determinism byte-identical twice 34// Evidence: VIZSLA-OPS-GATE line -> stdout + knowledge/status/vizsla_gate.log; 35// exit 0 iff 13/13. 36// spec: knowledge/specs/2026-06-10-nishi-vizsla-ladder.md license_tier: ORIGINAL 37import "nx_syscalls.nx" 38 39func og_slen(s: *u8) -> i64 { 40 var n: i64 = 0 41 while s[n] != (0 as u8) { n = n + 1 } 42 return n 43} 44 45func og_p(s: *u8) -> i64 { 46 sys_write(1, s, og_slen(s)) 47 return 0 48} 49 50func og_cat(dst: *u8, off: i64, s: *u8) -> i64 { 51 var i: i64 = 0 52 while s[i] != (0 as u8) { dst[off + i] = s[i]; i = i + 1 } 53 return off + i 54} 55 56func og_catn(dst: *u8, off: i64, v: i64) -> i64 { 57 var o: i64 = off 58 var m: i64 = v 59 if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m } 60 let t: *u8 = sys_mmap(28) 61 var k: i64 = 0 62 if m == 0 { t[0] = 48 as u8; k = 1 } 63 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 64 var i: i64 = 0 65 while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 } 66 return o + k 67} 68 69func og_write(path: *u8, content: *u8) -> i64 { 70 let fd: i64 = sys_openat_wr(path, 0x1a4) 71 if fd < 0 { return 0 - 1 } 72 sys_write(fd, content, og_slen(content)) 73 sys_close(fd) 74 return 0 75} 76 77func og_readall(path: *u8, szout: *i64) -> *u8 { 78 let fd: i64 = sys_openat_rd(path) 79 if fd < 0 { szout[0] = 0 - 1; return 0 as *u8 } 80 let sz: i64 = sys_lseek(fd, 0, 2) 81 sys_lseek(fd, 0, 0) 82 let buf: *u8 = sys_mmap(sz + 64) 83 var got: i64 = 0 84 var n: i64 = 1 85 while n > 0 { 86 n = sys_read(fd, (buf as i64 + got) as *u8, 65536) 87 if n > 0 { got = got + n } 88 } 89 sys_close(fd) 90 szout[0] = got 91 return buf 92} 93 94// run elf with argv tail from a null-terminated ptr-array (any arity); 95// stdout+stderr -> outpath; returns WEXITSTATUS or 128+sig 96func og_runv(elf: *u8, args: *i64, outpath: *u8) -> i64 { 97 let pid: i64 = sys_fork() 98 if pid == 0 { 99 if (outpath as i64) != 0 { 100 let ofd: i64 = sys_openat_wr(outpath, 0x1a4) 101 if ofd >= 0 { sys_dup3(ofd, 1, 0); sys_dup3(ofd, 2, 0) } 102 } 103 let argv: *i64 = sys_mmap(128) as *i64 104 argv[0] = elf as i64 105 var i: i64 = 0 106 var go: i64 = 1 107 while go == 1 { 108 if args[i] == 0 { go = 0 } else { 109 argv[i + 1] = args[i] 110 i = i + 1 111 } 112 } 113 argv[i + 1] = 0 114 let envp: *i64 = sys_mmap(16) as *i64 115 envp[0] = 0 116 sys_execve(elf, argv, envp) 117 sys_exit(127) 118 } 119 let st: *i64 = sys_mmap(16) as *i64 120 sys_wait4(pid, st, 0) 121 let sig: i64 = st[0] & 0x7f 122 if sig != 0 { return 128 + sig } 123 return (st[0] >> 8) & 0xff 124} 125 126func og_has(path: *u8, needle: *u8) -> i64 { 127 let szp: *i64 = sys_mmap(16) as *i64 128 let b: *u8 = og_readall(path, szp) 129 let sz: i64 = szp[0] 130 let n: i64 = og_slen(needle) 131 if sz < n { return 0 } 132 var i: i64 = 0 133 while i + n <= sz { 134 var ok: i64 = 1 135 var j: i64 = 0 136 while j < n { 137 if b[i + j] != needle[j] { ok = 0; j = n } else { j = j + 1 } 138 } 139 if ok == 1 { return 1 } 140 i = i + 1 141 } 142 return 0 143} 144 145func og_fileeq(p1: *u8, p2: *u8) -> i64 { 146 let s1: *i64 = sys_mmap(16) as *i64 147 let s2: *i64 = sys_mmap(16) as *i64 148 let b1: *u8 = og_readall(p1, s1) 149 let b2: *u8 = og_readall(p2, s2) 150 if s1[0] != s2[0] { return 0 } 151 if s1[0] <= 0 { return 0 } 152 var i: i64 = 0 153 while i < s1[0] { 154 if b1[i] != b2[i] { return 0 } 155 i = i + 1 156 } 157 return 1 158} 159 160func og_row(name: *u8, pass: i64) -> i64 { 161 og_p("ROW " as *u8) 162 og_p(name) 163 if pass == 1 { og_p(" PASS\n" as *u8) } else { og_p(" FAIL\n" as *u8) } 164 return pass 165} 166 167// build a null-terminated arg array from up to 5 ptrs (0-terminated early) 168func og_args(a1: *u8, a2: *u8, a3: *u8, a4: *u8, a5: *u8) -> *i64 { 169 let a: *i64 = sys_mmap(64) as *i64 170 a[0] = a1 as i64 171 a[1] = a2 as i64 172 a[2] = a3 as i64 173 a[3] = a4 as i64 174 a[4] = a5 as i64 175 a[5] = 0 176 return a 177} 178 179func main(argc: i64, argv: *i64) -> i64 { 180 og_p("=== VIZSLA OPS GATE: projects+maintenance fabric KATs (hand-counted days) ===\n" as *u8) 181 var ob: *u8 = "/tmp/nx_vizsla_ops.sov.elf" as *u8 182 if argc > 1 { ob = argv[1] as *u8 } 183 let pr: i64 = sys_openat_rd(ob) 184 if pr >= 0 { sys_close(pr) } 185 else { 186 og_p(" instrument missing -> rebuilding via durable runner\n" as *u8) 187 og_runv("_offc/nx_sov_build_run.elf" as *u8, og_args("nx_vizsla_ops" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzo_rebuild.out" as *u8) 188 } 189 190 // epoch-unique virgin store prefix 191 let pfx: *u8 = sys_mmap(128) 192 var po: i64 = 0 193 po = og_cat(pfx, po, "/tmp/vzoG" as *u8) 194 po = og_catn(pfx, po, sys_now_us()) 195 po = og_cat(pfx, po, "-" as *u8) 196 pfx[po] = 0 as u8 197 198 let cat: *u8 = "CONF soon_days 14\nMAINT vehicle-gas oil-change 180 engine-oil\nMAINT vehicle-gas tire-rotation 180 rotate\nMAINT vehicle-gas registration-renewal 365 state-reg\nMAINT home-hvac filter-change 90 merv-filter\n" as *u8 199 og_write("/tmp/vzo_cat.txt" as *u8, cat) 200 let cat5: *u8 = "CONF soon_days 5\nMAINT vehicle-gas oil-change 180 engine-oil\nMAINT vehicle-gas tire-rotation 180 rotate\nMAINT vehicle-gas registration-renewal 365 state-reg\nMAINT home-hvac filter-change 90 merv-filter\n" as *u8 201 og_write("/tmp/vzo_cat5.txt" as *u8, cat5) 202 let ass: *u8 = "HAVE car1 vehicle-gas family-truck\nHAVE hvac1 home-hvac main-system\n" as *u8 203 og_write("/tmp/vzo_ass.txt" as *u8, ass) 204 let lg: *u8 = "DONE 2026-01-15 car1 oil-change synthetic\nDONE 2025-11-01 car1 oil-change older-row-stored-later\nDONE 2025-12-20 car1 tire-rotation all-four\nDONE 2026-02-25 hvac1 filter-change merv13\nSTEPDONE 2026-05-01 deck 1 permits-pulled\nSTEPDONE 2026-05-20 deck 2 framing-done\nSTEPDONE 2026-04-15 tax 1 filed\n" as *u8 205 og_write("/tmp/vzo_log.txt" as *u8, lg) 206 let prj: *u8 = "PROJ deck ada backyard-deck\nSTEP deck 1 permits\nSTEP deck 2 framing\nSTEP deck 3 railings\nPROJ tax bea tax-season-2025\nSTEP tax 1 file-returns\n" as *u8 207 og_write("/tmp/vzo_prj.txt" as *u8, prj) 208 209 let fcat: *u8 = "/tmp/vzo_cat.txt" as *u8 210 let fass: *u8 = "/tmp/vzo_ass.txt" as *u8 211 let tdy: *u8 = "2026-06-10" as *u8 212 var pass: i64 = 0 213 var r: i64 = 0 214 215 // row 1: loud-fail on missing catalog 216 let rc1: i64 = og_runv(ob, og_args("due" as *u8, "/tmp/vzo_cat_NOPE.txt" as *u8, fass, pfx, tdy), "/tmp/vzo_out1.txt" as *u8) 217 r = 0 218 if rc1 == 1 { r = 1 } 219 pass = pass + og_row("loud-fail-missing-catalog" as *u8, r) 220 221 // row 2: ledger load (4 DONE + 3 STEPDONE) 222 let rc2: i64 = og_runv(ob, og_args("log" as *u8, "/tmp/vzo_log.txt" as *u8, pfx, "4001" as *u8, 0 as *u8), "/tmp/vzo_out2.txt" as *u8) 223 r = 0 224 if rc2 == 0 { 225 if og_has("/tmp/vzo_out2.txt" as *u8, "VIZSLA-OPS-LOG scanned=7 new=7 dup_infile=0 dup_instore=0 segment=seg-4001" as *u8) == 1 { r = 1 } 226 } 227 pass = pass + og_row("log-load" as *u8, r) 228 229 // row 3: idempotent re-log (law 10) 230 let rc3: i64 = og_runv(ob, og_args("log" as *u8, "/tmp/vzo_log.txt" as *u8, pfx, "4009" as *u8, 0 as *u8), "/tmp/vzo_out3.txt" as *u8) 231 r = 0 232 if rc3 == 0 { 233 if og_has("/tmp/vzo_out3.txt" as *u8, "VIZSLA-OPS-LOG scanned=7 new=0 dup_infile=0 dup_instore=7 segment=none" as *u8) == 1 { r = 1 } 234 } 235 pass = pass + og_row("idempotent-relog" as *u8, r) 236 237 // rows 4-8: the hand-counted maintenance dashboard 238 let rc4: i64 = og_runv(ob, og_args("due" as *u8, fcat, fass, pfx, tdy), "/tmp/vzo_out4.txt" as *u8) 239 r = 0 240 if rc4 == 0 { 241 if og_has("/tmp/vzo_out4.txt" as *u8, "VIZSLA-OPS-MAINT asset=car1 task=oil-change last=2026-01-15 days=146 interval=180 due_in=34 state=OK action=none" as *u8) == 1 { r = 1 } 242 } 243 pass = pass + og_row("latest-wins-ok" as *u8, r) 244 245 r = og_has("/tmp/vzo_out4.txt" as *u8, "VIZSLA-OPS-MAINT asset=car1 task=tire-rotation last=2025-12-20 days=172 interval=180 due_in=8 state=DUE action=schedule" as *u8) 246 pass = pass + og_row("due-soon" as *u8, r) 247 248 r = og_has("/tmp/vzo_out4.txt" as *u8, "VIZSLA-OPS-MAINT asset=hvac1 task=filter-change last=2026-02-25 days=105 interval=90 due_in=-15 state=OVERDUE action=do-now" as *u8) 249 pass = pass + og_row("overdue" as *u8, r) 250 251 r = og_has("/tmp/vzo_out4.txt" as *u8, "VIZSLA-OPS-MAINT asset=car1 task=registration-renewal last=never days=-1 interval=365 due_in=0 state=NEVER action=schedule-first" as *u8) 252 pass = pass + og_row("never-first" as *u8, r) 253 254 r = og_has("/tmp/vzo_out4.txt" as *u8, "VIZSLA-OPS-MAINT-VERDICT assets=2 tasks=4 ok=1 due=1 overdue=1 never=1" as *u8) 255 pass = pass + og_row("verdict-counts" as *u8, r) 256 257 // row 9: DATA-DRIVEN soon_days threshold (5-day file, same binary) 258 let rc9: i64 = og_runv(ob, og_args("due" as *u8, "/tmp/vzo_cat5.txt" as *u8, fass, pfx, tdy), "/tmp/vzo_out9.txt" as *u8) 259 r = 0 260 if rc9 == 0 { 261 if og_has("/tmp/vzo_out9.txt" as *u8, "VIZSLA-OPS-MAINT asset=car1 task=tire-rotation last=2025-12-20 days=172 interval=180 due_in=8 state=OK action=none" as *u8) == 1 { 262 if og_has("/tmp/vzo_out9.txt" as *u8, "VIZSLA-OPS-MAINT-VERDICT assets=2 tasks=4 ok=2 due=0 overdue=1 never=1" as *u8) == 1 { r = 1 } 263 } 264 } 265 pass = pass + og_row("data-driven-soon" as *u8, r) 266 267 // row 10: due determinism 268 og_runv(ob, og_args("due" as *u8, fcat, fass, pfx, tdy), "/tmp/vzo_out10.txt" as *u8) 269 r = og_fileeq("/tmp/vzo_out4.txt" as *u8, "/tmp/vzo_out10.txt" as *u8) 270 pass = pass + og_row("due-determinism" as *u8, r) 271 272 // rows 11-12: project dashboard 273 let rc11: i64 = og_runv(ob, og_args("status" as *u8, "/tmp/vzo_prj.txt" as *u8, pfx, 0 as *u8, 0 as *u8), "/tmp/vzo_out11.txt" as *u8) 274 r = 0 275 if rc11 == 0 { 276 if og_has("/tmp/vzo_out11.txt" as *u8, "VIZSLA-OPS-PROJ id=deck member=ada steps_done=2 steps=3 next=3:railings state=ACTIVE" as *u8) == 1 { r = 1 } 277 } 278 pass = pass + og_row("project-active" as *u8, r) 279 280 r = 0 281 if og_has("/tmp/vzo_out11.txt" as *u8, "VIZSLA-OPS-PROJ id=tax member=bea steps_done=1 steps=1 next=none state=COMPLETE" as *u8) == 1 { 282 if og_has("/tmp/vzo_out11.txt" as *u8, "VIZSLA-OPS-PROJ-VERDICT projects=2 active=1 complete=1" as *u8) == 1 { r = 1 } 283 } 284 pass = pass + og_row("project-complete" as *u8, r) 285 286 // row 13: status determinism 287 og_runv(ob, og_args("status" as *u8, "/tmp/vzo_prj.txt" as *u8, pfx, 0 as *u8, 0 as *u8), "/tmp/vzo_out13.txt" as *u8) 288 r = og_fileeq("/tmp/vzo_out11.txt" as *u8, "/tmp/vzo_out13.txt" as *u8) 289 pass = pass + og_row("status-determinism" as *u8, r) 290 291 let permil: i64 = (pass * 1000) / 13 292 let logfd: i64 = sys_openat_append("knowledge/status/vizsla_gate.log" as *u8, 0x1a4) 293 var fdi: i64 = 0 294 while fdi < 2 { 295 var fd: i64 = 1 296 if fdi == 1 { fd = logfd } 297 if fd > 0 { 298 let line: *u8 = sys_mmap(256) 299 var o: i64 = 0 300 o = og_cat(line, o, "VIZSLA-OPS-GATE epoch=" as *u8) 301 o = og_catn(line, o, sys_now_realtime_sec()) 302 o = og_cat(line, o, " rows=13 pass=" as *u8) 303 o = og_catn(line, o, pass) 304 o = og_cat(line, o, " permil=" as *u8) 305 o = og_catn(line, o, permil) 306 if pass == 13 { 307 o = og_cat(line, o, " verdict=GREEN\n" as *u8) 308 } else { 309 o = og_cat(line, o, " verdict=RED\n" as *u8) 310 } 311 sys_write(fd, line, o) 312 } 313 fdi = fdi + 1 314 } 315 if logfd > 0 { sys_close(logfd) } 316 if pass == 13 { return 0 } 317 return 1 318}