code wiki / _hdl_build / nx_uat_run.nx

nx_uat_run.nx source

↩ module page · 158 lines · 7099 B

1// nx_uat_run.nx -- THE CONSUMER UAT RUNNER (operator doctrine 2026-08-02: digital-twin, see it -> 2// log it -> work it -> UAT it, on cadence -- the loop a team of people AND consumers would run). 3// Walks knowledge/uat_journeys.conf (id|url|connect|latency_ms_max|must_contain), fetches each 4// journey through the REAL sovereign edge by forking the promoted nx_https_get.elf (the same bytes a 5// user's request traverses), measures WALL latency as a human feels it, checks HTTP 200 + the content 6// the human came for, and journals ONE frame per journey to knowledge/status/uat.jrnl (append-only). 7// A journey slower than its bar FAILS even if the bytes are perfect: the bar is the consumer's 8// patience, not the backend's throughput (seeded by the 8845ms SERP finding, 2026-08-02). 9// Bars/journeys live in DATA (rule 11): expanding UAT = adding a conf row, never a code change. 10// license_tier: ORIGINAL expect_exit: 0 when every journey passes 11import "nx_syscalls.nx" 12import "nx_estate_path.nx" // ep_anchor: the CWD must not decide this organ's verdict 13import "nx_gate_verdict.nx" 14 15func ua_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 16 17func ua_find(hay: *u8, n: i64, needle: *u8) -> i64 { 18 let nl: i64 = ua_slen(needle) 19 if nl == 0 { return 0 - 1 } 20 var i: i64 = 0 21 while i + nl <= n { 22 var j: i64 = 0 23 var hit: i64 = 1 24 while j < nl { if hay[i+j] != needle[j] { hit = 0; j = nl } else { j = j + 1 } } 25 if hit == 1 { return i } 26 i = i + 1 27 } 28 return 0 - 1 29} 30 31func ua_atoi(s: *u8) -> i64 { 32 var v: i64 = 0 33 var i: i64 = 0 34 while s[i] != (0 as u8) { 35 let c: i64 = s[i] as i64 36 if c >= 48 { if c <= 57 { v = v * 10 + (c - 48) } } 37 i = i + 1 38 } 39 return v 40} 41 42// fork the promoted fetcher, stdout -> out_path; returns exit code (128+sig on signal) 43func ua_fetch(url: *u8, conn: *u8, out_path: *u8) -> i64 { 44 let pid: i64 = sys_fork() 45 if pid == 0 { 46 let out: i64 = sys_openat_wr(out_path, 0x1a4) 47 if out >= 0 { sys_dup3(out, 1, 0) } 48 let argv: *i64 = sys_mmap(8 * 4) as *i64 49 argv[0] = "nx_https_get.elf" as *u8 as i64 50 argv[1] = url as i64 51 var na: i64 = 2 52 if conn[0] != (45 as u8) { argv[2] = conn as i64; na = 3 } 53 argv[na] = 0 54 let envp: *i64 = sys_mmap(16) as *i64 55 envp[0] = "PATH=/usr/bin:/bin" as *u8 as i64 56 envp[1] = 0 57 sys_execve("nx_https_get.elf" as *u8, argv, envp) 58 sys_exit(127) 59 } 60 let st: *i64 = sys_mmap(16) as *i64 61 sys_wait4(pid, st, 0) 62 if (st[0] & 0x7f) != 0 { return 128 + (st[0] & 0x7f) } 63 return (st[0] >> 8) & 0xff 64} 65 66func ua_journal(id: *u8, ok: i64, ms: i64) -> i64 { 67 let fd: i64 = sys_openat_append("knowledge/status/uat.jrnl" as *u8, 0x1a4) 68 if fd < 0 { return 0 } 69 let ln: *u8 = sys_mmap(512) 70 var o: i64 = gv_catn(ln, 0, sys_now_realtime_sec()) 71 ln[o] = 9 as u8; o = o + 1 72 o = gv_cat(ln, o, "uat" as *u8) 73 ln[o] = 9 as u8; o = o + 1 74 o = gv_cat(ln, o, id) 75 ln[o] = 9 as u8; o = o + 1 76 o = gv_cat(ln, o, "run" as *u8) 77 ln[o] = 9 as u8; o = o + 1 78 if ok == 1 { o = gv_cat(ln, o, "PASS" as *u8) } else { o = gv_cat(ln, o, "FAIL" as *u8) } 79 ln[o] = 9 as u8; o = o + 1 80 o = gv_cat(ln, o, "ms=" as *u8) 81 o = gv_catn(ln, o, ms) 82 ln[o] = 10 as u8; o = o + 1 83 sys_write(fd, ln, o) 84 sys_close(fd) 85 return 0 86} 87 88func main() -> i64 { 89 // ANCHOR FIRST (2026-08-04, nx_cwdguard finding): this organ reads a RELATIVE 90 // knowledge/ path, so its answer depended on where it was launched. No-op when 91 // already at the estate root, so the cron/MCP context is unchanged. 92 ep_anchor() 93 gv_puts("=== NX-UAT-RUN: consumer journeys through the REAL edge (see it, log it, UAT it) ===\n" as *u8) 94 let box: *i64 = sys_mmap(16) as *i64 95 let cf: *u8 = sys_read_file("knowledge/uat_journeys.conf" as *u8, box) 96 if (cf as i64) == 0 { gv_puts("UAT-RUN RED: journeys conf ABSENT (a loop with no journeys is a wish)\n" as *u8); return 3 } 97 let cn: i64 = box[0] 98 let ctr: *i64 = gv_ctr() 99 let idb: *u8 = sys_mmap(128) 100 let urlb: *u8 = sys_mmap(512) 101 let connb: *u8 = sys_mmap(128) 102 let latb: *u8 = sys_mmap(64) 103 let needb: *u8 = sys_mmap(256) 104 let outp: *u8 = sys_mmap(64) 105 let obox: *i64 = sys_mmap(16) as *i64 106 var jn: i64 = 0 107 var i: i64 = 0 108 while i < cn { 109 var e: i64 = i 110 while e < cn { if cf[e] == (10 as u8) { break } e = e + 1 } 111 if e > i { if cf[i] != (35 as u8) { 112 // split on | into 5 fields 113 let fs: *i64 = sys_mmap(8*6) as *i64 114 var nf: i64 = 0 115 fs[0] = i 116 var p: i64 = i 117 while p < e { if cf[p] == (124 as u8) { if nf < 4 { nf = nf + 1; fs[nf] = p + 1 } } p = p + 1 } 118 if nf == 4 { 119 var q: i64 = 0 120 q = 0; var s: i64 = fs[0]; while s < fs[1]-1 { if q < 127 { idb[q]=cf[s]; q=q+1 } s=s+1 } idb[q]=0 as u8 121 q = 0; s = fs[1]; while s < fs[2]-1 { if q < 511 { urlb[q]=cf[s]; q=q+1 } s=s+1 } urlb[q]=0 as u8 122 q = 0; s = fs[2]; while s < fs[3]-1 { if q < 127 { connb[q]=cf[s]; q=q+1 } s=s+1 } connb[q]=0 as u8 123 q = 0; s = fs[3]; while s < fs[4]-1 { if q < 63 { latb[q]=cf[s]; q=q+1 } s=s+1 } latb[q]=0 as u8 124 q = 0; s = fs[4]; while s < e { if q < 255 { needb[q]=cf[s]; q=q+1 } s=s+1 } needb[q]=0 as u8 125 let latmax: i64 = ua_atoi(latb) 126 var o2: i64 = gv_cat(outp, 0, "/tmp/uat_j" as *u8) 127 o2 = gv_catn(outp, o2, jn) 128 o2 = gv_cat(outp, o2, ".out" as *u8) 129 outp[o2] = 0 as u8 130 let t0: i64 = sys_now_us() 131 let rc: i64 = ua_fetch(urlb, connb, outp) 132 let ms: i64 = (sys_now_us() - t0) / 1000 133 var http_ok: i64 = 0 134 var body_ok: i64 = 0 135 let ob: *u8 = sys_read_file(outp, obox) 136 if (ob as i64) != 0 { 137 if ua_find(ob, obox[0], "HTTP/1.1 200" as *u8) >= 0 { http_ok = 1 } 138 if ua_find(ob, obox[0], needb) >= 0 { body_ok = 1 } 139 } 140 var ok: i64 = 0 141 if rc == 0 { if http_ok == 1 { if body_ok == 1 { if ms <= latmax { ok = 1 } } } } 142 gv_puts(" journey " as *u8); gv_puts(idb) 143 gv_puts(": ms=" as *u8); gv_num(ms) 144 gv_puts(" bar=" as *u8); gv_num(latmax) 145 gv_puts(" http200=" as *u8); gv_num(http_ok) 146 gv_puts(" content=" as *u8); gv_num(body_ok) 147 gv_puts(" rc=" as *u8); gv_num(rc) 148 gv_puts("\n" as *u8) 149 gv_check(idb, ok, ctr) 150 ua_journal(idb, ok, ms) 151 jn = jn + 1 152 } 153 } } 154 i = e + 1 155 } 156 if jn == 0 { gv_puts("UAT-RUN RED: zero journeys parsed\n" as *u8); return 3 } 157 return gv_verdict("UAT-RUN" as *u8, ctr, "every consumer journey inside its human-patience bar with the content the human came for" as *u8) 158}