code wiki / _hdl_build / nx_vizsla_venue_gate.nx
nx_vizsla_venue_gate.nx source
↩ module page · 291 lines · 12071 B
1// nx_vizsla_venue_gate.nx -- VIZSLA VENUE gate: the find/hire-buildings pipeline proven against
2// hand-computed fixtures, INCLUDING the booked->calendar bridge composed through the REAL
3// nx_vizsla_calendar organ (the emitted CAL-LINE is loaded and must appear on the day view).
4//
5// fixture: REQ party cap=40 budget=50000c 2026-08-15 18:00 +180
6// hall-a cap60 45000c -> 50+30+(5000*20)/50000=82 stage found->contacted->quoted
7// loft-b cap35 30000c -> 0+30+8=38 too_small stage found
8// barn-c cap80 90000c -> 50+0=50 over_budget stage found
9// initial: booked=none best=hall-a score=82 stages=5
10// then STAGE 2026-07-05 hall-a booked -> booked=hall-a + BOOKED line + CAL-LINE
11// "EVENT venue-party 2026-08-15 1080 180 grange-hall" -> loads into the calendar ->
12// day 2026-08-15 shows 18:00-21:00 venue-party.
13//
14// Rows: 1 venue-load 2 idempotent-reload 3 cand-top-scored 4 cand-over-budget 5 cand-too-small
15// 6 board-verdict 7 stage-latest-wins 8 booked-line 9 cal-bridge-line 10 cal-bridge-composes
16// 11 board-determinism 12 loud-fail-no-req[neg] 13 loud-fail-bad-stage[neg]
17// Evidence: VIZSLA-VEN-GATE -> stdout + knowledge/status/vizsla_gate.log; exit 0 iff 13/13.
18// spec: knowledge/research/2026-06-22-vizsla-sclass-roadmap.md license_tier: ORIGINAL
19import "nx_syscalls.nx"
20
21func eg_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
22func eg_p(s: *u8) -> i64 { sys_write(1, s, eg_slen(s)); return 0 }
23
24func eg_cat(dst: *u8, off: i64, s: *u8) -> i64 {
25 var i: i64 = 0
26 while s[i] != (0 as u8) { dst[off + i] = s[i]; i = i + 1 }
27 return off + i
28}
29
30func eg_catn(dst: *u8, off: i64, v: i64) -> i64 {
31 var o: i64 = off
32 var m: i64 = v
33 if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m }
34 let t: *u8 = sys_mmap(28)
35 var k: i64 = 0
36 if m == 0 { t[0] = 48 as u8; k = 1 }
37 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
38 var i: i64 = 0
39 while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 }
40 return o + k
41}
42
43func eg_write(path: *u8, content: *u8) -> i64 {
44 let fd: i64 = sys_openat_wr(path, 0x1a4)
45 if fd < 0 { return 0 - 1 }
46 sys_write(fd, content, eg_slen(content))
47 sys_close(fd)
48 return 0
49}
50
51func eg_readall(path: *u8, szout: *i64) -> *u8 {
52 let fd: i64 = sys_openat_rd(path)
53 if fd < 0 { szout[0] = 0 - 1; return 0 as *u8 }
54 let sz: i64 = sys_lseek(fd, 0, 2)
55 sys_lseek(fd, 0, 0)
56 let buf: *u8 = sys_mmap(sz + 64)
57 var got: i64 = 0
58 var n: i64 = 1
59 while n > 0 {
60 n = sys_read(fd, (buf as i64 + got) as *u8, 65536)
61 if n > 0 { got = got + n }
62 }
63 sys_close(fd)
64 szout[0] = got
65 return buf
66}
67
68func eg_runv(elf: *u8, args: *i64, outpath: *u8) -> i64 {
69 let pid: i64 = sys_fork()
70 if pid == 0 {
71 if (outpath as i64) != 0 {
72 let ofd: i64 = sys_openat_wr(outpath, 0x1a4)
73 if ofd >= 0 { sys_dup3(ofd, 1, 0); sys_dup3(ofd, 2, 0) }
74 }
75 let argv: *i64 = sys_mmap(128) as *i64
76 argv[0] = elf as i64
77 var i: i64 = 0
78 var go: i64 = 1
79 while go == 1 {
80 if args[i] == 0 { go = 0 } else {
81 argv[i + 1] = args[i]
82 i = i + 1
83 }
84 }
85 argv[i + 1] = 0
86 let envp: *i64 = sys_mmap(16) as *i64
87 envp[0] = 0
88 sys_execve(elf, argv, envp)
89 sys_exit(127)
90 }
91 let st: *i64 = sys_mmap(16) as *i64
92 sys_wait4(pid, st, 0)
93 let sig: i64 = st[0] & 0x7f
94 if sig != 0 { return 128 + sig }
95 return (st[0] >> 8) & 0xff
96}
97
98func eg_has(path: *u8, needle: *u8) -> i64 {
99 let szp: *i64 = sys_mmap(16) as *i64
100 let b: *u8 = eg_readall(path, szp)
101 let sz: i64 = szp[0]
102 let n: i64 = eg_slen(needle)
103 if sz < n { return 0 }
104 var i: i64 = 0
105 while i + n <= sz {
106 var ok: i64 = 1
107 var j: i64 = 0
108 while j < n {
109 if b[i + j] != needle[j] { ok = 0; j = n } else { j = j + 1 }
110 }
111 if ok == 1 { return 1 }
112 i = i + 1
113 }
114 return 0
115}
116
117func eg_fileeq(p1: *u8, p2: *u8) -> i64 {
118 let s1: *i64 = sys_mmap(16) as *i64
119 let s2: *i64 = sys_mmap(16) as *i64
120 let b1: *u8 = eg_readall(p1, s1)
121 let b2: *u8 = eg_readall(p2, s2)
122 if s1[0] != s2[0] { return 0 }
123 if s1[0] <= 0 { return 0 }
124 var i: i64 = 0
125 while i < s1[0] {
126 if b1[i] != b2[i] { return 0 }
127 i = i + 1
128 }
129 return 1
130}
131
132func eg_row(name: *u8, pass: i64) -> i64 {
133 eg_p("ROW " as *u8)
134 eg_p(name)
135 if pass == 1 { eg_p(" PASS\n" as *u8) } else { eg_p(" FAIL\n" as *u8) }
136 return pass
137}
138
139func eg_args(a1: *u8, a2: *u8, a3: *u8, a4: *u8, a5: *u8) -> *i64 {
140 let a: *i64 = sys_mmap(64) as *i64
141 a[0] = a1 as i64
142 a[1] = a2 as i64
143 a[2] = a3 as i64
144 a[3] = a4 as i64
145 a[4] = a5 as i64
146 a[5] = 0
147 return a
148}
149
150func eg_ensure(elf: *u8, organ: *u8) -> i64 {
151 let pr: i64 = sys_openat_rd(elf)
152 if pr >= 0 { sys_close(pr); return 0 }
153 eg_p(" instrument missing -> rebuilding via durable runner\n" as *u8)
154 eg_runv("_offc/nx_sov_build_run.elf" as *u8, eg_args(organ, 0 as *u8, 0 as *u8, 0 as *u8, 0 as *u8), "/tmp/vzv_rebuild.out" as *u8)
155 return 0
156}
157
158func main(argc: i64, argv: *i64) -> i64 {
159 eg_p("=== VIZSLA VENUE GATE: hire-pipeline scoring/stages/booked-calendar-bridge KATs ===\n" as *u8)
160 let ven: *u8 = "/tmp/nx_vizsla_venue.sov.elf" as *u8
161 let cal: *u8 = "/tmp/nx_vizsla_calendar.sov.elf" as *u8
162 eg_ensure(ven, "nx_vizsla_venue" as *u8)
163 eg_ensure(cal, "nx_vizsla_calendar" as *u8)
164
165 let us: i64 = sys_now_us()
166 let pfx: *u8 = sys_mmap(128)
167 var po: i64 = 0
168 po = eg_cat(pfx, po, "/tmp/vzvV" as *u8)
169 po = eg_catn(pfx, po, us)
170 po = eg_cat(pfx, po, "-" as *u8)
171 pfx[po] = 0 as u8
172 let pfxC: *u8 = sys_mmap(128)
173 po = 0
174 po = eg_cat(pfxC, po, "/tmp/vzvC" as *u8)
175 po = eg_catn(pfxC, po, us)
176 po = eg_cat(pfxC, po, "-" as *u8)
177 pfxC[po] = 0 as u8
178
179 let fx: *u8 = "REQ party 40 50000 2026-08-15 1080 180\nVENUE party hall-a 60 45000 555-1000 grange-hall\nVENUE party loft-b 35 30000 555-2000 city-loft\nVENUE party barn-c 80 90000 555-3000 event-barn\nSTAGE 2026-07-01 party hall-a found\nSTAGE 2026-07-02 party hall-a contacted\nSTAGE 2026-07-03 party hall-a quoted\nSTAGE 2026-07-01 party loft-b found\nSTAGE 2026-07-01 party barn-c found\n" as *u8
180 eg_write("/tmp/vzv_fx.txt" as *u8, fx)
181
182 var pass: i64 = 0
183 var r: i64 = 0
184
185 // row 1: load
186 let rc1: i64 = eg_runv(ven, eg_args("load" as *u8, "/tmp/vzv_fx.txt" as *u8, pfx, "6501" as *u8, 0 as *u8), "/tmp/vzv_r1.txt" as *u8)
187 r = 0
188 if rc1 == 0 {
189 if eg_has("/tmp/vzv_r1.txt" as *u8, "VIZSLA-VEN-LOAD scanned=9 new=9 dup_infile=0 dup_instore=0 segment=seg-6501" as *u8) == 1 { r = 1 }
190 }
191 pass = pass + eg_row("venue-load" as *u8, r)
192
193 // row 2: idempotent reload
194 let rc2: i64 = eg_runv(ven, eg_args("load" as *u8, "/tmp/vzv_fx.txt" as *u8, pfx, "6502" as *u8, 0 as *u8), "/tmp/vzv_r2.txt" as *u8)
195 r = 0
196 if rc2 == 0 {
197 if eg_has("/tmp/vzv_r2.txt" as *u8, "VIZSLA-VEN-LOAD scanned=9 new=0 dup_infile=0 dup_instore=9 segment=none" as *u8) == 1 { r = 1 }
198 }
199 pass = pass + eg_row("idempotent-reload" as *u8, r)
200
201 // rows 3-6: initial board
202 let rc3: i64 = eg_runv(ven, eg_args("board" as *u8, pfx, "party" as *u8, 0 as *u8, 0 as *u8), "/tmp/vzv_r3.txt" as *u8)
203 r = 0
204 if rc3 == 0 {
205 if eg_has("/tmp/vzv_r3.txt" as *u8, "VIZSLA-VEN-CAND event=party id=hall-a stage=quoted cap=60 cost=45000 score=82 over_budget=0 too_small=0 contact=555-1000 name=grange-hall" as *u8) == 1 { r = 1 }
206 }
207 pass = pass + eg_row("cand-top-scored" as *u8, r)
208
209 r = eg_has("/tmp/vzv_r3.txt" as *u8, "VIZSLA-VEN-CAND event=party id=barn-c stage=found cap=80 cost=90000 score=50 over_budget=1 too_small=0" as *u8)
210 pass = pass + eg_row("cand-over-budget" as *u8, r)
211
212 r = eg_has("/tmp/vzv_r3.txt" as *u8, "VIZSLA-VEN-CAND event=party id=loft-b stage=found cap=35 cost=30000 score=38 over_budget=0 too_small=1" as *u8)
213 pass = pass + eg_row("cand-too-small" as *u8, r)
214
215 r = eg_has("/tmp/vzv_r3.txt" as *u8, "VIZSLA-VEN-VERDICT event=party venues=3 stages=5 booked=none best=hall-a score=82" as *u8)
216 pass = pass + eg_row("board-verdict" as *u8, r)
217
218 // rows 7-9: book hall-a (later-dated stage wins), bridge lines appear
219 eg_write("/tmp/vzv_book.txt" as *u8, "STAGE 2026-07-05 party hall-a booked\n" as *u8)
220 eg_runv(ven, eg_args("load" as *u8, "/tmp/vzv_book.txt" as *u8, pfx, "6503" as *u8, 0 as *u8), "/tmp/vzv_l7.txt" as *u8)
221 let rc7: i64 = eg_runv(ven, eg_args("board" as *u8, pfx, "party" as *u8, 0 as *u8, 0 as *u8), "/tmp/vzv_r7.txt" as *u8)
222 r = 0
223 if rc7 == 0 {
224 if eg_has("/tmp/vzv_r7.txt" as *u8, "VIZSLA-VEN-CAND event=party id=hall-a stage=booked" as *u8) == 1 {
225 if eg_has("/tmp/vzv_r7.txt" as *u8, "VIZSLA-VEN-VERDICT event=party venues=3 stages=6 booked=hall-a best=hall-a score=82" as *u8) == 1 { r = 1 }
226 }
227 }
228 pass = pass + eg_row("stage-latest-wins" as *u8, r)
229
230 r = eg_has("/tmp/vzv_r7.txt" as *u8, "VIZSLA-VEN-BOOKED event=party id=hall-a date=2026-08-15" as *u8)
231 pass = pass + eg_row("booked-line" as *u8, r)
232
233 r = eg_has("/tmp/vzv_r7.txt" as *u8, "VIZSLA-VEN-CAL-LINE EVENT venue-party 2026-08-15 1080 180 grange-hall" as *u8)
234 pass = pass + eg_row("cal-bridge-line" as *u8, r)
235
236 // row 10: the bridge row COMPOSES -- load it through the real calendar organ, see the event
237 eg_write("/tmp/vzv_cal.txt" as *u8, "EVENT venue-party 2026-08-15 1080 180 grange-hall\n" as *u8)
238 let rcl: i64 = eg_runv(cal, eg_args("load" as *u8, "/tmp/vzv_cal.txt" as *u8, pfxC, "6504" as *u8, 0 as *u8), "/tmp/vzv_l10.txt" as *u8)
239 let rc10: i64 = eg_runv(cal, eg_args("day" as *u8, pfxC, "2026-08-15" as *u8, 0 as *u8, 0 as *u8), "/tmp/vzv_r10.txt" as *u8)
240 r = 0
241 if rcl == 0 { if rc10 == 0 {
242 if eg_has("/tmp/vzv_r10.txt" as *u8, "VIZSLA-CAL-EVENT date=2026-08-15 start=18:00 end=21:00 dur=180 id=venue-party title=grange-hall" as *u8) == 1 { r = 1 }
243 } }
244 pass = pass + eg_row("cal-bridge-composes" as *u8, r)
245
246 // row 11: determinism
247 eg_runv(ven, eg_args("board" as *u8, pfx, "party" as *u8, 0 as *u8, 0 as *u8), "/tmp/vzv_r11.txt" as *u8)
248 r = eg_fileeq("/tmp/vzv_r7.txt" as *u8, "/tmp/vzv_r11.txt" as *u8)
249 pass = pass + eg_row("board-determinism" as *u8, r)
250
251 // row 12: board on an event with no REQ (negative control)
252 let rc12: i64 = eg_runv(ven, eg_args("board" as *u8, pfx, "ghost" as *u8, 0 as *u8, 0 as *u8), "/tmp/vzv_r12.txt" as *u8)
253 r = 0
254 if rc12 == 1 { r = 1 }
255 pass = pass + eg_row("loud-fail-no-req" as *u8, r)
256
257 // row 13: bad stage word (negative control)
258 eg_write("/tmp/vzv_bad.txt" as *u8, "STAGE 2026-07-06 party hall-a maybe\n" as *u8)
259 let rc13: i64 = eg_runv(ven, eg_args("load" as *u8, "/tmp/vzv_bad.txt" as *u8, pfx, "6505" as *u8, 0 as *u8), "/tmp/vzv_r13.txt" as *u8)
260 r = 0
261 if rc13 == 1 { r = 1 }
262 pass = pass + eg_row("loud-fail-bad-stage" as *u8, r)
263
264 let permil: i64 = (pass * 1000) / 13
265 let logfd: i64 = sys_openat_append("knowledge/status/vizsla_gate.log" as *u8, 0x1a4)
266 var fdi: i64 = 0
267 while fdi < 2 {
268 var fd: i64 = 1
269 if fdi == 1 { fd = logfd }
270 if fd > 0 {
271 let line: *u8 = sys_mmap(256)
272 var o: i64 = 0
273 o = eg_cat(line, o, "VIZSLA-VEN-GATE epoch=" as *u8)
274 o = eg_catn(line, o, sys_now_realtime_sec())
275 o = eg_cat(line, o, " rows=13 pass=" as *u8)
276 o = eg_catn(line, o, pass)
277 o = eg_cat(line, o, " permil=" as *u8)
278 o = eg_catn(line, o, permil)
279 if pass == 13 {
280 o = eg_cat(line, o, " verdict=GREEN\n" as *u8)
281 } else {
282 o = eg_cat(line, o, " verdict=RED\n" as *u8)
283 }
284 sys_write(fd, line, o)
285 }
286 fdi = fdi + 1
287 }
288 if logfd > 0 { sys_close(logfd) }
289 if pass == 13 { return 0 }
290 return 1
291}