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}