code wiki / _hdl_build / nx_vizsla_plan_gate.nx

nx_vizsla_plan_gate.nx source

↩ module page · 324 lines · 14680 B

1// nx_vizsla_plan_gate.nx -- VIZSLA PLANNER gate: priority/deps/critical-path/milestones/ 2// timeblock proven against HAND-COMPUTED fixtures. COMPOSITION: the timeblock rows load a real 3// calendar via nx_vizsla_calendar and place tasks into ITS free windows. 4// 5// plan "trip" (CONF u4=5 u3=10 u2=30 -- DIFFERENT from the 2/7/30 defaults so the config path is 6// load-bearing: invites at 5 days out grades u4/score48; the default bands would say u3/38): 7// venue jason 07-09 120m imp5 deps - today 07-07 -> READY u4 score50 8// invites maria 07-12 60m imp4 deps venue -> BLOCKED u4 score48 9// food jason 07-20 90m imp3 deps invites -> BLOCKED u2 score26 10// music dave 07-20 45m imp2 deps venue -> BLOCKED u2 score24 11// budget maria 07-05 30m imp5 deps - + DONE marker -> DONE 12// MILE m1 07-15: due<=07-15 = venue,invites,budget -> 3 tasks, 1 done, pct=33 13// critical path: venue(120)>invites(60)>food(90) = 270 min 14// verdict: tasks=5 done=1 ready=1 blocked=3 late=0 pct=20 critical_min=270 15// today=07-10 re-run: venue OVERDUE -> urg5 score60 late=1; verdict late=1 16// plan "day" + jason's calendar (meeting 10:00-12:00), timeblock 07-08 bounds 08:00-22:00: 17// free [480,600)+[720,1320) = 720 min; priority deep(50) email(38) mega(22) 18// deep 120m -> 08:00-10:00; email 60m -> 12:00-13:00; mega 700m -> UNPLACED (no window fits) 19// verdict placed=2 unplaced=1 used_min=180 free_min=720 20// plan "cyc": a<->b dependency cycle -> board exits 1 naming stuck=a,b 21// 22// Rows: 1 plan-load 2 idempotent-reload 3 board-ready-priority 4 board-conf-loadbearing 23// 5 board-done 6 board-verdict 7 critical-path 8 milestone-pct 9 board-overdue 24// 10 timeblock-place-first 11 timeblock-next-window 12 timeblock-verdict 25// 13 cycle-detected[neg] 14 board-determinism 15 loud-fail-bad-date[neg] 26// 16 loud-fail-unknown-plan[neg] 27// Evidence: VIZSLA-PLAN-GATE -> stdout + knowledge/status/vizsla_gate.log; exit 0 iff 16/16. 28// spec: knowledge/research/2026-06-22-vizsla-sclass-roadmap.md license_tier: ORIGINAL 29import "nx_syscalls.nx" 30 31func pg_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 32func pg_p(s: *u8) -> i64 { sys_write(1, s, pg_slen(s)); return 0 } 33 34func pg_cat(dst: *u8, off: i64, s: *u8) -> i64 { 35 var i: i64 = 0 36 while s[i] != (0 as u8) { dst[off + i] = s[i]; i = i + 1 } 37 return off + i 38} 39 40func pg_catn(dst: *u8, off: i64, v: i64) -> i64 { 41 var o: i64 = off 42 var m: i64 = v 43 if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m } 44 let t: *u8 = sys_mmap(28) 45 var k: i64 = 0 46 if m == 0 { t[0] = 48 as u8; k = 1 } 47 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 48 var i: i64 = 0 49 while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 } 50 return o + k 51} 52 53func pg_write(path: *u8, content: *u8) -> i64 { 54 let fd: i64 = sys_openat_wr(path, 0x1a4) 55 if fd < 0 { return 0 - 1 } 56 sys_write(fd, content, pg_slen(content)) 57 sys_close(fd) 58 return 0 59} 60 61func pg_readall(path: *u8, szout: *i64) -> *u8 { 62 let fd: i64 = sys_openat_rd(path) 63 if fd < 0 { szout[0] = 0 - 1; return 0 as *u8 } 64 let sz: i64 = sys_lseek(fd, 0, 2) 65 sys_lseek(fd, 0, 0) 66 let buf: *u8 = sys_mmap(sz + 64) 67 var got: i64 = 0 68 var n: i64 = 1 69 while n > 0 { 70 n = sys_read(fd, (buf as i64 + got) as *u8, 65536) 71 if n > 0 { got = got + n } 72 } 73 sys_close(fd) 74 szout[0] = got 75 return buf 76} 77 78func pg_runv(elf: *u8, args: *i64, outpath: *u8) -> i64 { 79 let pid: i64 = sys_fork() 80 if pid == 0 { 81 if (outpath as i64) != 0 { 82 let ofd: i64 = sys_openat_wr(outpath, 0x1a4) 83 if ofd >= 0 { sys_dup3(ofd, 1, 0); sys_dup3(ofd, 2, 0) } 84 } 85 let argv: *i64 = sys_mmap(128) as *i64 86 argv[0] = elf as i64 87 var i: i64 = 0 88 var go: i64 = 1 89 while go == 1 { 90 if args[i] == 0 { go = 0 } else { 91 argv[i + 1] = args[i] 92 i = i + 1 93 } 94 } 95 argv[i + 1] = 0 96 let envp: *i64 = sys_mmap(16) as *i64 97 envp[0] = 0 98 sys_execve(elf, argv, envp) 99 sys_exit(127) 100 } 101 let st: *i64 = sys_mmap(16) as *i64 102 sys_wait4(pid, st, 0) 103 let sig: i64 = st[0] & 0x7f 104 if sig != 0 { return 128 + sig } 105 return (st[0] >> 8) & 0xff 106} 107 108func pg_has(path: *u8, needle: *u8) -> i64 { 109 let szp: *i64 = sys_mmap(16) as *i64 110 let b: *u8 = pg_readall(path, szp) 111 let sz: i64 = szp[0] 112 let n: i64 = pg_slen(needle) 113 if sz < n { return 0 } 114 var i: i64 = 0 115 while i + n <= sz { 116 var ok: i64 = 1 117 var j: i64 = 0 118 while j < n { 119 if b[i + j] != needle[j] { ok = 0; j = n } else { j = j + 1 } 120 } 121 if ok == 1 { return 1 } 122 i = i + 1 123 } 124 return 0 125} 126 127func pg_fileeq(p1: *u8, p2: *u8) -> i64 { 128 let s1: *i64 = sys_mmap(16) as *i64 129 let s2: *i64 = sys_mmap(16) as *i64 130 let b1: *u8 = pg_readall(p1, s1) 131 let b2: *u8 = pg_readall(p2, s2) 132 if s1[0] != s2[0] { return 0 } 133 if s1[0] <= 0 { return 0 } 134 var i: i64 = 0 135 while i < s1[0] { 136 if b1[i] != b2[i] { return 0 } 137 i = i + 1 138 } 139 return 1 140} 141 142func pg_row(name: *u8, pass: i64) -> i64 { 143 pg_p("ROW " as *u8) 144 pg_p(name) 145 if pass == 1 { pg_p(" PASS\n" as *u8) } else { pg_p(" FAIL\n" as *u8) } 146 return pass 147} 148 149func pg_args(a1: *u8, a2: *u8, a3: *u8, a4: *u8, a5: *u8, a6: *u8, a7: *u8, a8: *u8) -> *i64 { 150 let a: *i64 = sys_mmap(128) as *i64 151 a[0] = a1 as i64 152 a[1] = a2 as i64 153 a[2] = a3 as i64 154 a[3] = a4 as i64 155 a[4] = a5 as i64 156 a[5] = a6 as i64 157 a[6] = a7 as i64 158 a[7] = a8 as i64 159 a[8] = 0 160 return a 161} 162 163func pg_ensure(elf: *u8, organ: *u8) -> i64 { 164 let pr: i64 = sys_openat_rd(elf) 165 if pr >= 0 { sys_close(pr); return 0 } 166 pg_p(" instrument missing -> rebuilding via durable runner\n" as *u8) 167 pg_runv("_offc/nx_sov_build_run.elf" as *u8, pg_args(organ, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_rebuild.out" as *u8) 168 return 0 169} 170 171func pg_mkpfx(tag: *u8, us: i64) -> *u8 { 172 let pfx: *u8 = sys_mmap(128) 173 var po: i64 = 0 174 po = pg_cat(pfx, po, tag) 175 po = pg_catn(pfx, po, us) 176 po = pg_cat(pfx, po, "-" as *u8) 177 pfx[po] = 0 as u8 178 return pfx 179} 180 181func main(argc: i64, argv: *i64) -> i64 { 182 pg_p("=== VIZSLA PLAN GATE: priority/deps/critical-path/milestone/timeblock KATs ===\n" as *u8) 183 let pln: *u8 = "/tmp/nx_vizsla_plan.sov.elf" as *u8 184 let cal: *u8 = "/tmp/nx_vizsla_calendar.sov.elf" as *u8 185 pg_ensure(pln, "nx_vizsla_plan" as *u8) 186 pg_ensure(cal, "nx_vizsla_calendar" as *u8) 187 188 let us: i64 = sys_now_us() 189 let pfxP: *u8 = pg_mkpfx("/tmp/vzpP" as *u8, us) 190 let pfxC: *u8 = pg_mkpfx("/tmp/vzpC" as *u8, us) 191 192 let trip: *u8 = "CONF trip 5 10 30\nTASK trip venue jason 2026-07-09 120 5 - book-venue\nTASK trip invites maria 2026-07-12 60 4 venue send-invites\nTASK trip food jason 2026-07-20 90 3 invites plan-food\nTASK trip music dave 2026-07-20 45 2 venue playlist\nTASK trip budget maria 2026-07-05 30 5 - set-budget\nMILE trip m1 2026-07-15 invites-out\nDONE trip budget 2026-07-04\n" as *u8 193 pg_write("/tmp/vzp_trip.txt" as *u8, trip) 194 let day: *u8 = "TASK day deep jason 2026-07-09 120 5 - deep-work\nTASK day mega jason 2026-07-25 700 1 - huge-thing\nTASK day email jason 2026-07-12 60 4 - inbox-zero\n" as *u8 195 pg_write("/tmp/vzp_day.txt" as *u8, day) 196 let cyc: *u8 = "TASK cyc a jason 2026-07-09 30 3 b task-a\nTASK cyc b maria 2026-07-09 30 3 a task-b\n" as *u8 197 pg_write("/tmp/vzp_cyc.txt" as *u8, cyc) 198 pg_write("/tmp/vzp_cal.txt" as *u8, "EVENT j1 2026-07-08 600 120 meeting\n" as *u8) 199 200 var pass: i64 = 0 201 var r: i64 = 0 202 203 // row 1: load the trip plan 204 let rc1: i64 = pg_runv(pln, pg_args("load" as *u8, "/tmp/vzp_trip.txt" as *u8, pfxP, "6401" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r1.txt" as *u8) 205 r = 0 206 if rc1 == 0 { 207 if pg_has("/tmp/vzp_r1.txt" as *u8, "VIZSLA-PLAN-LOAD scanned=8 new=8 dup_infile=0 dup_instore=0 segment=seg-6401" as *u8) == 1 { r = 1 } 208 } 209 pass = pass + pg_row("plan-load" as *u8, r) 210 211 // row 2: idempotent reload 212 let rc2: i64 = pg_runv(pln, pg_args("load" as *u8, "/tmp/vzp_trip.txt" as *u8, pfxP, "6402" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r2.txt" as *u8) 213 r = 0 214 if rc2 == 0 { 215 if pg_has("/tmp/vzp_r2.txt" as *u8, "VIZSLA-PLAN-LOAD scanned=8 new=0 dup_infile=0 dup_instore=8 segment=none" as *u8) == 1 { r = 1 } 216 } 217 pass = pass + pg_row("idempotent-reload" as *u8, r) 218 219 // rows 3-8: board at 2026-07-07 220 let rc3: i64 = pg_runv(pln, pg_args("board" as *u8, pfxP, "trip" as *u8, "2026-07-07" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r3.txt" as *u8) 221 r = 0 222 if rc3 == 0 { 223 if pg_has("/tmp/vzp_r3.txt" as *u8, "VIZSLA-PLAN-TASK plan=trip id=venue owner=jason due=2026-07-09 state=READY urg=4 imp=5 score=50 late=0 title=book-venue" as *u8) == 1 { r = 1 } 224 } 225 pass = pass + pg_row("board-ready-priority" as *u8, r) 226 227 r = pg_has("/tmp/vzp_r3.txt" as *u8, "VIZSLA-PLAN-TASK plan=trip id=invites owner=maria due=2026-07-12 state=BLOCKED urg=4 imp=4 score=48 late=0 title=send-invites" as *u8) 228 pass = pass + pg_row("board-conf-loadbearing" as *u8, r) 229 230 r = pg_has("/tmp/vzp_r3.txt" as *u8, "VIZSLA-PLAN-TASK plan=trip id=budget owner=maria due=2026-07-05 state=DONE title=set-budget" as *u8) 231 pass = pass + pg_row("board-done" as *u8, r) 232 233 r = pg_has("/tmp/vzp_r3.txt" as *u8, "VIZSLA-PLAN-VERDICT plan=trip tasks=5 done=1 ready=1 blocked=3 late=0 pct=20 critical_min=270" as *u8) 234 pass = pass + pg_row("board-verdict" as *u8, r) 235 236 r = pg_has("/tmp/vzp_r3.txt" as *u8, "VIZSLA-PLAN-CRITICAL plan=trip effort_min=270 path=venue>invites>food" as *u8) 237 pass = pass + pg_row("critical-path" as *u8, r) 238 239 r = pg_has("/tmp/vzp_r3.txt" as *u8, "VIZSLA-PLAN-MILE plan=trip id=m1 date=2026-07-15 due_tasks=3 done=1 pct=33" as *u8) 240 pass = pass + pg_row("milestone-pct" as *u8, r) 241 242 // row 9: board at 2026-07-10 -> venue overdue 243 let rc9: i64 = pg_runv(pln, pg_args("board" as *u8, pfxP, "trip" as *u8, "2026-07-10" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r9.txt" as *u8) 244 r = 0 245 if rc9 == 0 { 246 if pg_has("/tmp/vzp_r9.txt" as *u8, "VIZSLA-PLAN-TASK plan=trip id=venue owner=jason due=2026-07-09 state=READY urg=5 imp=5 score=60 late=1 title=book-venue" as *u8) == 1 { 247 if pg_has("/tmp/vzp_r9.txt" as *u8, "VIZSLA-PLAN-VERDICT plan=trip tasks=5 done=1 ready=1 blocked=3 late=1 pct=20 critical_min=270" as *u8) == 1 { r = 1 } 248 } 249 } 250 pass = pass + pg_row("board-overdue" as *u8, r) 251 252 // rows 10-12: timeblock the day plan into jason's real calendar 253 pg_runv(pln, pg_args("load" as *u8, "/tmp/vzp_day.txt" as *u8, pfxP, "6403" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_l10.txt" as *u8) 254 pg_runv(cal, pg_args("load" as *u8, "/tmp/vzp_cal.txt" as *u8, pfxC, "6405" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_l10b.txt" as *u8) 255 let rc10: i64 = pg_runv(pln, pg_args("timeblock" as *u8, pfxP, "day" as *u8, pfxC, "2026-07-08" as *u8, "480" as *u8, "1320" as *u8, 0 as *u8), "/tmp/vzp_r10.txt" as *u8) 256 r = 0 257 if rc10 == 0 { 258 if pg_has("/tmp/vzp_r10.txt" as *u8, "VIZSLA-PLAN-BLOCK plan=day date=2026-07-08 start=08:00 end=10:00 task=deep" as *u8) == 1 { r = 1 } 259 } 260 pass = pass + pg_row("timeblock-place-first" as *u8, r) 261 262 r = pg_has("/tmp/vzp_r10.txt" as *u8, "VIZSLA-PLAN-BLOCK plan=day date=2026-07-08 start=12:00 end=13:00 task=email" as *u8) 263 pass = pass + pg_row("timeblock-next-window" as *u8, r) 264 265 r = 0 266 if pg_has("/tmp/vzp_r10.txt" as *u8, "VIZSLA-PLAN-UNPLACED plan=day task=mega effort_min=700 reason=no-free-window-fits" as *u8) == 1 { 267 if pg_has("/tmp/vzp_r10.txt" as *u8, "VIZSLA-PLAN-TIMEBLOCK plan=day date=2026-07-08 placed=2 unplaced=1 used_min=180 free_min=720" as *u8) == 1 { r = 1 } 268 } 269 pass = pass + pg_row("timeblock-verdict" as *u8, r) 270 271 // row 13: dependency cycle -> loud fail naming the stuck tasks (negative control) 272 pg_runv(pln, pg_args("load" as *u8, "/tmp/vzp_cyc.txt" as *u8, pfxP, "6404" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_l13.txt" as *u8) 273 let rc13: i64 = pg_runv(pln, pg_args("board" as *u8, pfxP, "cyc" as *u8, "2026-07-07" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r13.txt" as *u8) 274 r = 0 275 if rc13 == 1 { 276 if pg_has("/tmp/vzp_r13.txt" as *u8, "VIZSLA-PLAN-CYCLE plan=cyc stuck=a,b" as *u8) == 1 { r = 1 } 277 } 278 pass = pass + pg_row("cycle-detected" as *u8, r) 279 280 // row 14: determinism 281 pg_runv(pln, pg_args("board" as *u8, pfxP, "trip" as *u8, "2026-07-07" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r14.txt" as *u8) 282 r = pg_fileeq("/tmp/vzp_r3.txt" as *u8, "/tmp/vzp_r14.txt" as *u8) 283 pass = pass + pg_row("board-determinism" as *u8, r) 284 285 // row 15: bad date (negative control) 286 let rc15: i64 = pg_runv(pln, pg_args("board" as *u8, pfxP, "trip" as *u8, "2026-13-99" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r15.txt" as *u8) 287 r = 0 288 if rc15 == 1 { r = 1 } 289 pass = pass + pg_row("loud-fail-bad-date" as *u8, r) 290 291 // row 16: unknown plan (negative control) 292 let rc16: i64 = pg_runv(pln, pg_args("board" as *u8, pfxP, "ghost" as *u8, "2026-07-07" as *u8, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzp_r16.txt" as *u8) 293 r = 0 294 if rc16 == 1 { r = 1 } 295 pass = pass + pg_row("loud-fail-unknown-plan" as *u8, r) 296 297 let permil: i64 = (pass * 1000) / 16 298 let logfd: i64 = sys_openat_append("knowledge/status/vizsla_gate.log" as *u8, 0x1a4) 299 var fdi: i64 = 0 300 while fdi < 2 { 301 var fd: i64 = 1 302 if fdi == 1 { fd = logfd } 303 if fd > 0 { 304 let line: *u8 = sys_mmap(256) 305 var o: i64 = 0 306 o = pg_cat(line, o, "VIZSLA-PLAN-GATE epoch=" as *u8) 307 o = pg_catn(line, o, sys_now_realtime_sec()) 308 o = pg_cat(line, o, " rows=16 pass=" as *u8) 309 o = pg_catn(line, o, pass) 310 o = pg_cat(line, o, " permil=" as *u8) 311 o = pg_catn(line, o, permil) 312 if pass == 16 { 313 o = pg_cat(line, o, " verdict=GREEN\n" as *u8) 314 } else { 315 o = pg_cat(line, o, " verdict=RED\n" as *u8) 316 } 317 sys_write(fd, line, o) 318 } 319 fdi = fdi + 1 320 } 321 if logfd > 0 { sys_close(logfd) } 322 if pass == 16 { return 0 } 323 return 1 324}