code wiki / _hdl_build / nx_vqoe_gate.nx
nx_vqoe_gate.nx source
↩ module page · 373 lines · 15797 B
1// nx_vqoe_gate.nx -- the STANDING VIDEO SHIP-GATE (F601; eats debt seq35).
2// WHY: prior /video seeds measured the ENCODER VM (36-81fps) while the received room ran 1fps --
3// the 100x engine-truth-vs-field-truth gap that made /video suck. This organ grades the thing the
4// family actually experiences: the RECEIVER-side /api/vqoe beacons (vqoe.jsonl, appended by
5// nx_mgmt_api ma_vqoe from real rooms + the headless probe). It publishes a machine verdict the
6// reliability plane (nx_deploy_ready via knowledge/registry/deploy_checks.tsv) and any agent can
7// gate on BEFORE shipping video changes.
8// VERDICTS (honest three-state):
9// GREEN = fresh beacons within thresholds -> ship.
10// AMBER = insufficient fresh evidence -> ship is UNPROVEN (not blocked; the remediation is to
11// generate evidence: headless probe or a real call). No GREEN marker = deploy_ready warns.
12// RED = received-room truth failed a threshold -> DO NOT ship video changes.
13// DATA-DRIVEN (rule 11/17): thresholds live in knowledge/registry/vqoe_gate.conf key=value rows,
14// compiled defaults only as bootstrap fallback. ENVELOPE DECLARED (scale law): reads the TAIL
15// tail_bytes of vqoe.jsonl (default 4MiB), keeps <=8192 rtt samples; over-cap is COUNTED + printed,
16// never silent. Imports ONLY nx_syscalls = drift-immune (the reliability-guard pattern).
17// usage: nx_vqoe_gate [jsonl] [conf] [outlog] (defaults: vqoe.jsonl,
18// knowledge/registry/vqoe_gate.conf, knowledge/status/video_vqoe_gate.log)
19// license_tier: ORIGINAL
20import "nx_syscalls.nx"
21
22const VG_RTT_CAP: i64 = 8192
23
24func vg_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
25
26func vg_s(dst: *u8, off: i64, s: *u8) -> i64 {
27 var i: i64 = 0
28 while s[i] != (0 as u8) { dst[off+i] = s[i]; i = i + 1 }
29 return off + i
30}
31
32func vg_n(dst: *u8, off: i64, v: i64) -> i64 {
33 var m: i64 = v
34 var o: i64 = off
35 if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m }
36 let t: *u8 = sys_mmap(32)
37 var k: i64 = 0
38 if m == 0 { t[0] = 48 as u8; k = 1 }
39 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
40 var j: i64 = 0
41 while j < k { dst[o+j] = t[k-1-j]; j = j + 1 }
42 return o + k
43}
44
45func vg_starts(b: *u8, off: i64, le: i64, lit: *u8) -> i64 {
46 var i: i64 = 0
47 while lit[i] != (0 as u8) {
48 if off + i >= le { return 0 }
49 if b[off+i] != lit[i] { return 0 }
50 i = i + 1
51 }
52 return 1
53}
54
55// find `needle` in [start,le); parse the (signed) integer right after it. Returns position
56// after the value (for repeat scans) or -1 if not found. Value -> oval[0].
57func vg_findint(b: *u8, le: i64, needle: *u8, start: i64, oval: *i64) -> i64 {
58 var i: i64 = start
59 while i < le {
60 if vg_starts(b, i, le, needle) == 1 {
61 var nl: i64 = 0
62 while needle[nl] != (0 as u8) { nl = nl + 1 }
63 var p: i64 = i + nl
64 var neg: i64 = 0
65 if p < le { if b[p] == (45 as u8) { neg = 1; p = p + 1 } }
66 var v: i64 = 0
67 var any: i64 = 0
68 var sc: i64 = 1
69 while sc == 1 {
70 if p >= le { sc = 0 } else {
71 let c: i64 = b[p] as i64
72 if c < 48 { sc = 0 } else { if c > 57 { sc = 0 } else { v = v * 10 + (c - 48); any = 1; p = p + 1 } }
73 }
74 }
75 if any == 0 { oval[0] = 0 - 1; return p }
76 if neg == 1 { v = 0 - v }
77 oval[0] = v
78 return p
79 }
80 i = i + 1
81 }
82 return 0 - 1
83}
84
85// conf line "<key>=<uint>" -> value, else -1
86func vg_lineval(cb: *u8, ls: i64, le: i64, key: *u8) -> i64 {
87 var k: i64 = 0
88 while key[k] != (0 as u8) {
89 if ls + k >= le { return 0 - 1 }
90 if cb[ls+k] != key[k] { return 0 - 1 }
91 k = k + 1
92 }
93 if ls + k >= le { return 0 - 1 }
94 if cb[ls+k] != (61 as u8) { return 0 - 1 }
95 var v: i64 = 0
96 var any: i64 = 0
97 var p: i64 = ls + k + 1
98 while p < le {
99 let c: i64 = cb[p] as i64
100 if c >= 48 { if c <= 57 { v = v * 10 + (c - 48); any = 1 } }
101 p = p + 1
102 }
103 if any == 0 { return 0 - 1 }
104 return v
105}
106
107func vg_confget(cb: *u8, cn: i64, key: *u8, dflt: i64) -> i64 {
108 if (cb as i64) == 0 { return dflt }
109 var i: i64 = 0
110 while i < cn {
111 var e: i64 = i
112 var sc: i64 = 1
113 while sc == 1 {
114 if e >= cn { sc = 0 } else { if cb[e] == (10 as u8) { sc = 0 } else { e = e + 1 } }
115 }
116 if e > i { if cb[i] != (35 as u8) {
117 let v: i64 = vg_lineval(cb, i, e, key)
118 if v >= 0 { return v }
119 } }
120 i = e + 1
121 }
122 return dflt
123}
124
125func main(argc: i64, argv: *i64) -> i64 {
126 var jsonl: *u8 = "vqoe.jsonl" as *u8
127 var confp: *u8 = "knowledge/registry/vqoe_gate.conf" as *u8
128 var outp: *u8 = "knowledge/status/video_vqoe_gate.log" as *u8
129 if argc >= 2 { jsonl = argv[1] as *u8 }
130 if argc >= 3 { confp = argv[2] as *u8 }
131 if argc >= 4 { outp = argv[3] as *u8 }
132
133 // ---- thresholds (data-driven; compiled numbers are BOOTSTRAP DEFAULTS only) ----
134 let clen: *i64 = sys_mmap(8) as *i64
135 let cb: *u8 = sys_read_file(confp, clen)
136 var cn: i64 = 0
137 if (cb as i64) != 0 { cn = clen[0] }
138 let window: i64 = vg_confget(cb, cn, "window_sec" as *u8, 86400)
139 let minb: i64 = vg_confget(cb, cn, "min_beacons" as *u8, 3)
140 let decmin: i64 = vg_confget(cb, cn, "dec_fps_min" as *u8, 8)
141 let rttmax: i64 = vg_confget(cb, cn, "rtt_ms_max" as *u8, 2000)
142 let dropmax: i64 = vg_confget(cb, cn, "drop_pct_max" as *u8, 20)
143 let tailb: i64 = vg_confget(cb, cn, "tail_bytes" as *u8, 4194304)
144 let starvmax: i64 = vg_confget(cb, cn, "starv_pct_max" as *u8, 25)
145
146 // ---- now (wall clock) ----
147 let tsb: *i64 = sys_mmap(16) as *i64
148 tsb[0] = 0
149 sys_clock_gettime_real(tsb)
150 let now: i64 = tsb[0]
151
152 // ---- tail-read the beacon journal (ENVELOPE: last tail_bytes only, DECLARED below) ----
153 var jb: *u8 = 0 as *u8
154 var jn: i64 = 0
155 var ds: i64 = 0
156 var fsz: i64 = 0
157 let fd: i64 = sys_openat_rd(jsonl)
158 if fd >= 0 {
159 fsz = sys_lseek(fd, 0, 2)
160 var start: i64 = 0
161 if fsz > tailb { start = fsz - tailb }
162 sys_lseek(fd, start, 0)
163 jb = sys_mmap(tailb + 64)
164 var got: i64 = 0
165 var rsc: i64 = 1
166 while rsc == 1 {
167 let r: i64 = sys_read(fd, jb + got, tailb - got)
168 if r <= 0 { rsc = 0 } else { got = got + r; if got >= tailb { rsc = 0 } }
169 }
170 jn = got
171 sys_close(fd)
172 if start > 0 {
173 var ssc: i64 = 1
174 while ssc == 1 {
175 if ds >= jn { ssc = 0 } else { if jb[ds] == (10 as u8) { ssc = 0; ds = ds + 1 } else { ds = ds + 1 } }
176 }
177 }
178 }
179
180 // ---- scan beacons ----
181 let rtts: *i64 = sys_mmap(VG_RTT_CAP * 8) as *i64
182 var nrtt: i64 = 0
183 let decs: *i64 = sys_mmap(VG_RTT_CAP * 8) as *i64
184 var ndec: i64 = 0
185 var overcap: i64 = 0
186 var nb: i64 = 0
187 var nprobe: i64 = 0
188 var nstarv: i64 = 0
189 var newest: i64 = 0
190 var worstdec: i64 = 99999
191 var dksum: i64 = 0
192 var rxsum: i64 = 0
193 let vbox: *i64 = sys_mmap(8) as *i64
194 var i: i64 = ds
195 while i < jn {
196 var e: i64 = i
197 var sc: i64 = 1
198 while sc == 1 {
199 if e >= jn { sc = 0 } else { if jb[e] == (10 as u8) { sc = 0 } else { e = e + 1 } }
200 }
201 if e > i + 8 {
202 let tp: i64 = vg_findint(jb, e, "\"t\":" as *u8, i, vbox)
203 if tp >= 0 {
204 let t: i64 = vbox[0]
205 if t > newest { newest = t }
206 if t >= now - window { if t <= now + 3600 {
207 // 2026-07-29: DIAGNOSTIC HARNESS ROWS ARE NOT FAMILY TRUTH. Build 855+ tags probe
208 // beacons "tp":1 (?probe=1 auto-join rooms). Grade REAL rows only; count the
209 // excluded loudly. (Pre-855 probe rows are unmarked -- they age out of the window.)
210 var isprobe: i64 = 0
211 let pbp: i64 = vg_findint(jb, e, "\"tp\":" as *u8, i, vbox)
212 if pbp >= 0 { if vbox[0] == 1 { isprobe = 1 } }
213 if isprobe == 1 { nprobe = nprobe + 1 } else {
214 nb = nb + 1
215 let rp: i64 = vg_findint(jb, e, "\"rtt\":" as *u8, i, vbox)
216 if rp >= 0 { if vbox[0] >= 0 {
217 if nrtt < VG_RTT_CAP { rtts[nrtt] = vbox[0]; nrtt = nrtt + 1 } else { overcap = overcap + 1 }
218 } }
219 var sawneg: i64 = 0
220 var dp: i64 = i
221 var dsc: i64 = 1
222 while dsc == 1 {
223 dp = vg_findint(jb, e, "\"dec\":" as *u8, dp, vbox)
224 if dp < 0 { dsc = 0 } else {
225 if vbox[0] >= 0 {
226 if vbox[0] < worstdec { worstdec = vbox[0] }
227 if ndec < VG_RTT_CAP { decs[ndec] = vbox[0]; ndec = ndec + 1 } else { overcap = overcap + 1 }
228 } else { sawneg = 1 }
229 }
230 }
231 var kp: i64 = i
232 var ksc: i64 = 1
233 while ksc == 1 {
234 kp = vg_findint(jb, e, "\"dk\":" as *u8, kp, vbox)
235 if kp < 0 { ksc = 0 } else { if vbox[0] > 0 { dksum = dksum + vbox[0] } }
236 }
237 var sawrx: i64 = 0
238 var xp: i64 = i
239 var xsc: i64 = 1
240 while xsc == 1 {
241 xp = vg_findint(jb, e, "\"rx\":" as *u8, xp, vbox)
242 if xp < 0 { xsc = 0 } else { if vbox[0] > 0 { rxsum = rxsum + vbox[0]; sawrx = 1 } }
243 }
244 // DECODE-STARVATION (the probe835 blind spot 2026-07-20): frames ARRIVING (rx>0) but the
245 // decoder NEVER producing (dec=-1) is a hard failure signature, not a skip -- count it.
246 if sawneg == 1 { if sawrx == 1 { nstarv = nstarv + 1 } }
247 }
248 } }
249 }
250 }
251 i = e + 1
252 }
253
254 // ---- p50 rtt (insertion sort; nrtt <= 8192 by construction) ----
255 var si: i64 = 1
256 while si < nrtt {
257 let key: i64 = rtts[si]
258 var sj: i64 = si - 1
259 var msc: i64 = 1
260 while msc == 1 {
261 if sj < 0 { msc = 0 } else { if rtts[sj] <= key { msc = 0 } else { rtts[sj+1] = rtts[sj]; sj = sj - 1 } }
262 }
263 rtts[sj+1] = key
264 si = si + 1
265 }
266 var p50: i64 = 0 - 1
267 if nrtt > 0 { p50 = rtts[nrtt / 2] }
268
269 // ---- p50 dec fps (median = the robust received-fps floor; MIN would false-RED on the by-design
270 // F604 slow-start ramp or one probe-host contention sample -- measured live 2026-07-20) ----
271 var di: i64 = 1
272 while di < ndec {
273 let dkey: i64 = decs[di]
274 var dj: i64 = di - 1
275 var dmsc: i64 = 1
276 while dmsc == 1 {
277 if dj < 0 { dmsc = 0 } else { if decs[dj] <= dkey { dmsc = 0 } else { decs[dj+1] = decs[dj]; dj = dj - 1 } }
278 }
279 decs[dj+1] = dkey
280 di = di + 1
281 }
282 var p50dec: i64 = 0 - 1
283 if ndec > 0 { p50dec = decs[ndec / 2] }
284
285 var droppct: i64 = 0 - 1
286 if rxsum + dksum > 0 { droppct = (dksum * 100) / (rxsum + dksum) }
287
288 // ---- verdict ----
289 var verdict: i64 = 0
290 let why: *u8 = sys_mmap(1024)
291 var wo: i64 = 0
292 if nb < minb { verdict = 2 } else {
293 if p50dec >= 0 { if p50dec < decmin {
294 verdict = 1
295 wo = vg_s(why, wo, " p50_dec_fps=" as *u8); wo = vg_n(why, wo, p50dec); wo = vg_s(why, wo, "<" as *u8); wo = vg_n(why, wo, decmin)
296 } }
297 if p50 >= 0 { if p50 > rttmax {
298 verdict = 1
299 wo = vg_s(why, wo, " p50_rtt_ms=" as *u8); wo = vg_n(why, wo, p50); wo = vg_s(why, wo, ">" as *u8); wo = vg_n(why, wo, rttmax)
300 } }
301 if droppct >= 0 { if droppct > dropmax {
302 verdict = 1
303 wo = vg_s(why, wo, " drop_pct=" as *u8); wo = vg_n(why, wo, droppct); wo = vg_s(why, wo, ">" as *u8); wo = vg_n(why, wo, dropmax)
304 } }
305 if nstarv * 100 > nb * starvmax {
306 verdict = 1
307 wo = vg_s(why, wo, " decode-starvation=" as *u8); wo = vg_n(why, wo, nstarv); wo = vg_s(why, wo, "/" as *u8); wo = vg_n(why, wo, nb)
308 }
309 }
310 why[wo] = 0 as u8
311
312 // ---- build report ----
313 let ob: *u8 = sys_mmap(16384)
314 var o: i64 = 0
315 o = vg_s(ob, o, "nx_vqoe_gate epoch=" as *u8); o = vg_n(ob, o, now)
316 o = vg_s(ob, o, "\nevidence=" as *u8); o = vg_s(ob, o, jsonl)
317 o = vg_s(ob, o, " file_bytes=" as *u8); o = vg_n(ob, o, fsz)
318 o = vg_s(ob, o, " window_sec=" as *u8); o = vg_n(ob, o, window)
319 o = vg_s(ob, o, " beacons=" as *u8); o = vg_n(ob, o, nb)
320 o = vg_s(ob, o, " probe_rows_excluded=" as *u8); o = vg_n(ob, o, nprobe)
321 o = vg_s(ob, o, " newest_age_s=" as *u8)
322 if newest > 0 { o = vg_n(ob, o, now - newest) } else { o = vg_n(ob, o, 0 - 1) }
323 o = vg_s(ob, o, "\np50_dec_fps=" as *u8)
324 if p50dec >= 0 { o = vg_n(ob, o, p50dec) } else { o = vg_s(ob, o, "na" as *u8) }
325 o = vg_s(ob, o, " worst_dec_fps=" as *u8)
326 if worstdec < 99999 { o = vg_n(ob, o, worstdec) } else { o = vg_s(ob, o, "na" as *u8) }
327 o = vg_s(ob, o, " p50_rtt_ms=" as *u8)
328 if p50 >= 0 { o = vg_n(ob, o, p50) } else { o = vg_s(ob, o, "na" as *u8) }
329 o = vg_s(ob, o, " drop_pct=" as *u8)
330 if droppct >= 0 { o = vg_n(ob, o, droppct) } else { o = vg_s(ob, o, "na" as *u8) }
331 o = vg_s(ob, o, " (dk=" as *u8); o = vg_n(ob, o, dksum)
332 o = vg_s(ob, o, " rx=" as *u8); o = vg_n(ob, o, rxsum); o = vg_s(ob, o, ")" as *u8)
333 o = vg_s(ob, o, " starv=" as *u8); o = vg_n(ob, o, nstarv); o = vg_s(ob, o, "/" as *u8); o = vg_n(ob, o, nb)
334 o = vg_s(ob, o, "\nthresholds dec_fps_min=" as *u8); o = vg_n(ob, o, decmin)
335 o = vg_s(ob, o, " rtt_ms_max=" as *u8); o = vg_n(ob, o, rttmax)
336 o = vg_s(ob, o, " drop_pct_max=" as *u8); o = vg_n(ob, o, dropmax)
337 o = vg_s(ob, o, " min_beacons=" as *u8); o = vg_n(ob, o, minb)
338 o = vg_s(ob, o, " src=" as *u8); o = vg_s(ob, o, confp)
339 o = vg_s(ob, o, "\nenvelope tail_bytes=" as *u8); o = vg_n(ob, o, tailb)
340 o = vg_s(ob, o, " rtt_cap=" as *u8); o = vg_n(ob, o, VG_RTT_CAP)
341 o = vg_s(ob, o, " overcap_dropped=" as *u8); o = vg_n(ob, o, overcap)
342 o = vg_s(ob, o, " (DECLARED, never silent)\n" as *u8)
343 if verdict == 0 {
344 o = vg_s(ob, o, "VERDICT=GREEN received-room QoE within thresholds\n" as *u8)
345 }
346 if verdict == 2 {
347 o = vg_s(ob, o, "VERDICT=AMBER insufficient-fresh-evidence beacons=" as *u8); o = vg_n(ob, o, nb)
348 o = vg_s(ob, o, "<" as *u8); o = vg_n(ob, o, minb)
349 o = vg_s(ob, o, " -- video ship UNPROVEN (not blocked): generate receiver evidence via the headless room probe or a real family call\n" as *u8)
350 }
351 if verdict == 1 {
352 o = vg_s(ob, o, "VERDICT=RED" as *u8); o = vg_s(ob, o, why)
353 o = vg_s(ob, o, " -- received-room truth FAILED; do NOT ship video changes (check relay load, client pacing, codec regression; re-run after fix)\n" as *u8)
354 }
355 ob[o] = 0 as u8
356
357 // ---- publish atomically (tmp + rename; a reader never sees a torn verdict) ----
358 let tmpp: *u8 = sys_mmap(1024)
359 var tp2: i64 = vg_s(tmpp, 0, outp)
360 tp2 = vg_s(tmpp, tp2, ".new" as *u8)
361 tmpp[tp2] = 0 as u8
362 let ofd: i64 = sys_openat_wr(tmpp, 0x1a4)
363 if ofd >= 0 {
364 sys_write(ofd, ob, o)
365 sys_close(ofd)
366 sys_renameat(tmpp, outp)
367 }
368 vg_puts(ob)
369 if verdict == 1 { sys_exit(1); return 1 }
370 if verdict == 2 { sys_exit(2); return 2 }
371 sys_exit(0)
372 return 0
373}