code wiki / _hdl_build / nx_ui_struct.nx

nx_ui_struct.nx source

↩ module page · 154 lines · 9546 B

1// nx_ui_struct.nx -- ui-validation (the DETERMINISTIC, LLM-FREE structural-regression core of the operator's 2// DARPA/Tier-1 hybrid UI-testing architecture, Section 2.A). NO semantic reasoning, NO model: it captures a 3// page's STRUCTURAL FINGERPRINT (the interactive-role + landmark inventory of the DOM = an AXTree-lite over 4// the served HTML) and diffs current-vs-baseline to flag STRUCTURAL REGRESSIONS instantly -- e.g. a <button> 5// silently becoming a <div onclick> (the architecture's exact example: role downgrade = a11y + test-hook 6// regression). Deterministic, ~ms, air-gapped-capable (fork-captures nx_https_get for the fetch only). 7// HONEST ENVELOPE: structural-inventory fingerprint (tag/landmark census + non-semantic-interaction smell), 8// NOT full Zhang-Shasha tree-edit-distance over a real AXTree (that needs the sovereign browser's live 9// accessibility tree = filed next rung). Single baseline at a time. 10// nx_ui_struct baseline <url> [connect] | check <url> [connect] 11// exit: 0 GREEN(no regression) | 3 STRUCTURAL-REGRESSION | 4 fetch/baseline-fail | 2 usage. 12// license_tier: ORIGINAL expect_exit: 0 13import "nx_tool_run.nx" 14const K_MAGIC_30000: i64 = 30000 15const K_MAGIC_524288: i64 = 524288 16const K_MAGIC_4096: i64 = 4096 17const K_MAGIC_1024: i64 = 1024 18const K_MAGIC_8192: i64 = 8192 19const K_MAGIC_8000: i64 = 8000 20const K_MAGIC_16384: i64 = 16384 21 22func us_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 23func us_b(rep: *u8, pos: i64, s: *u8) -> i64 { var p: i64 = pos; var i: i64 = 0; while s[i] != (0 as u8) { if p < K_MAGIC_30000 { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p } 24func us_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < K_MAGIC_30000 { rep[p] = 45 as u8; p = p + 1 } m = 0 - m } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { if p < K_MAGIC_30000 { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p } 25func us_count(buf: *u8, n: i64, pat: *u8) -> i64 { 26 var pl: i64 = 0 27 while pat[pl] != (0 as u8) { pl = pl + 1 } 28 if pl == 0 { return 0 } 29 var c: i64 = 0 30 var i: i64 = 0 31 while i + pl <= n { 32 var k: i64 = 0 33 var m: i64 = 1 34 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } } 35 if m == 1 { c = c + 1; i = i + pl } else { i = i + 1 } 36 } 37 return c 38} 39func us_reads(path: *u8, buf: *u8, cap: i64) -> i64 { 40 let fd: i64 = sys_openat_rd(path) 41 if fd < 0 { return 0 - 1 } 42 var n: i64 = 0 43 var go: i64 = 1 44 while go == 1 { let r: i64 = sys_read(fd, (buf as i64 + n) as *u8, cap - n); if r <= 0 { go = 0 } else { n = n + r } if n >= cap { go = 0 } } 45 sys_close(fd) 46 return n 47} 48// the structural fingerprint: 12 deterministic byte-counts over the served HTML 49func us_fp(buf: *u8, n: i64, fp: *i64) -> i64 { 50 fp[0] = us_count(buf, n, "<button" as *u8) 51 fp[1] = us_count(buf, n, "<a " as *u8) 52 fp[2] = us_count(buf, n, "<input" as *u8) 53 fp[3] = us_count(buf, n, "<form" as *u8) 54 fp[4] = us_count(buf, n, "<select" as *u8) 55 fp[5] = us_count(buf, n, "<textarea" as *u8) 56 fp[6] = us_count(buf, n, "<main" as *u8) 57 fp[7] = us_count(buf, n, "<nav" as *u8) 58 fp[8] = us_count(buf, n, "<h1" as *u8) 59 fp[9] = us_count(buf, n, "<table" as *u8) 60 fp[10] = us_count(buf, n, "role=" as *u8) 61 fp[11] = us_count(buf, n, "onclick" as *u8) 62 return 0 63} 64func main(argc: i64, argv: *i64) -> i64 { 65 if argc < 3 { us_w(2, "usage: nx_ui_struct baseline|check <url> [connect]\n" as *u8); sys_exit(2); return 2 } 66 let verb: *u8 = argv[1] as *u8 67 let url: *u8 = argv[2] as *u8 68 let HG: *u8 = "/volume1/homes/elderwesto/nishihost/nx_https_get.elf" as *u8 69 let cap: i64 = K_MAGIC_524288 70 let buf: *u8 = sys_mmap(cap + 16) 71 let olen: *i64 = sys_mmap(16) as *i64 72 let av: *i64 = sys_mmap(16 * 8) as *i64 73 av[0] = HG as i64 74 av[1] = url as i64 75 if argc >= 4 { av[2] = argv[3] as i64; av[3] = 0 } else { av[2] = 0 } 76 let frc: i64 = tr_run_capture(HG, av, buf, cap, olen) 77 let n: i64 = olen[0] 78 if frc == 127 { us_w(1, "UI-STRUCT verdict=FETCH-FAIL exec-127\n" as *u8); sys_exit(4); return 4 } 79 if n <= 0 { us_w(1, "UI-STRUCT verdict=FETCH-FAIL empty\n" as *u8); sys_exit(4); return 4 } 80 let fp: *i64 = sys_mmap(16 * 8) as *i64 81 us_fp(buf, n, fp) 82 let basepath: *u8 = "knowledge/status/ui_struct_base.txt" as *u8 83 let v0: i64 = verb[0] 84 if v0 == 98 { 85 // baseline: write the fingerprint 86 let wb: *u8 = sys_mmap(K_MAGIC_4096) 87 var wp: i64 = 0 88 wp = us_b(wb, wp, "UI-STRUCT-BASELINE url=" as *u8); wp = us_b(wb, wp, url); wp = us_b(wb, wp, "\n" as *u8) 89 var i: i64 = 0 90 while i < 12 { wp = us_bn(wb, wp, fp[i]); wp = us_b(wb, wp, "\n" as *u8); i = i + 1 } 91 let bt: *u8 = "knowledge/status/ui_struct_base.txt.tmp" as *u8 92 let bfd: i64 = sys_openat_wr(bt, 420) 93 if bfd < 0 { us_w(1, "UI-STRUCT verdict=WRITE-FAIL\n" as *u8); sys_exit(4); return 4 } 94 sys_write(bfd, wb, wp); sys_close(bfd); sys_renameat(bt, basepath) 95 us_w(1, "UI-STRUCT verb=baseline captured buttons=" as *u8) 96 let rep0: *u8 = sys_mmap(K_MAGIC_1024); var r0: i64 = 0 97 r0 = us_bn(rep0, r0, fp[0]); r0 = us_b(rep0, r0, " links=" as *u8); r0 = us_bn(rep0, r0, fp[1]); r0 = us_b(rep0, r0, " inputs=" as *u8); r0 = us_bn(rep0, r0, fp[2]); r0 = us_b(rep0, r0, " main=" as *u8); r0 = us_bn(rep0, r0, fp[6]); r0 = us_b(rep0, r0, " nav=" as *u8); r0 = us_bn(rep0, r0, fp[7]); r0 = us_b(rep0, r0, " onclick=" as *u8); r0 = us_bn(rep0, r0, fp[11]); r0 = us_b(rep0, r0, " -> knowledge/status/ui_struct_base.txt\n" as *u8) 98 sys_write(1, rep0, r0) 99 sys_exit(0); return 0 100 } 101 // check: read baseline, diff 102 let bbuf: *u8 = sys_mmap(K_MAGIC_8192) 103 let bn: i64 = us_reads(basepath, bbuf, K_MAGIC_8000) 104 if bn < 0 { us_w(1, "UI-STRUCT verdict=NO-BASELINE (run baseline first)\n" as *u8); sys_exit(4); return 4 } 105 // parse baseline: skip line 0 (header), then 12 integer lines 106 let base: *i64 = sys_mmap(16 * 8) as *i64 107 var bi: i64 = 0 108 var li: i64 = 0 109 var start: i64 = 0 110 var seenhdr: i64 = 0 111 while bi <= bn { 112 var isend: i64 = 0 113 if bi == bn { isend = 1 } else { if bbuf[bi] == (10 as u8) { isend = 1 } } 114 if isend == 1 { 115 if seenhdr == 0 { seenhdr = 1 } else { if li < 12 { var vv: i64 = 0; var j: i64 = start; while j < bi { let c: i64 = bbuf[j]; if c >= 48 { if c <= 57 { vv = vv * 10 + (c - 48) } } j = j + 1 } base[li] = vv; li = li + 1 } } 116 start = bi + 1 117 } 118 bi = bi + 1 119 } 120 let rep: *u8 = sys_mmap(K_MAGIC_16384) 121 var p: i64 = 0 122 p = us_b(rep, p, "{" as *u8) 123 p = us_b(rep, p, "\"kind\":\"structural_regression\",\"url\":\"" as *u8); p = us_b(rep, p, url); p = us_b(rep, p, "\",\"deltas\":[" as *u8) 124 let names: *u8 = 0 as *u8 125 var reg: i64 = 0 126 var i2: i64 = 0 127 // per-field delta 128 while i2 < 12 { 129 if i2 > 0 { p = us_b(rep, p, "," as *u8) } 130 p = us_b(rep, p, "{\"f\":" as *u8); p = us_bn(rep, p, i2) 131 p = us_b(rep, p, ",\"base\":" as *u8); p = us_bn(rep, p, base[i2]) 132 p = us_b(rep, p, ",\"now\":" as *u8); p = us_bn(rep, p, fp[i2]); p = us_b(rep, p, "}" as *u8) 133 i2 = i2 + 1 134 } 135 p = us_b(rep, p, "]," as *u8) 136 // regression rules (deterministic): interactive/landmark DROP or button->div (buttons down & onclick up) 137 var reasons: i64 = 0 138 p = us_b(rep, p, "\"regressions\":[" as *u8) 139 if fp[0] < base[0] { if reasons > 0 { p = us_b(rep, p, "," as *u8) } p = us_b(rep, p, "\"buttons dropped " as *u8); p = us_bn(rep, p, base[0]); p = us_b(rep, p, "->" as *u8); p = us_bn(rep, p, fp[0]); p = us_b(rep, p, "\"" as *u8); reasons = reasons + 1; reg = 1 } 140 if fp[0] < base[0] { if fp[11] > base[11] { if reasons > 0 { p = us_b(rep, p, "," as *u8) } p = us_b(rep, p, "\"BUTTON->DIV downgrade (buttons down, onclick up) = a11y+test-hook regression\"" as *u8); reasons = reasons + 1; reg = 1 } } 141 if fp[6] < base[6] { if reasons > 0 { p = us_b(rep, p, "," as *u8) } p = us_b(rep, p, "\"<main> landmark lost\"" as *u8); reasons = reasons + 1; reg = 1 } 142 if fp[7] < base[7] { if reasons > 0 { p = us_b(rep, p, "," as *u8) } p = us_b(rep, p, "\"<nav> landmark lost\"" as *u8); reasons = reasons + 1; reg = 1 } 143 if fp[2] < base[2] { if reasons > 0 { p = us_b(rep, p, "," as *u8) } p = us_b(rep, p, "\"inputs dropped\"" as *u8); reasons = reasons + 1; reg = 1 } 144 if fp[1] < base[1] { if reasons > 0 { p = us_b(rep, p, "," as *u8) } p = us_b(rep, p, "\"links dropped\"" as *u8); reasons = reasons + 1; reg = 1 } 145 p = us_b(rep, p, "],\"verdict\":\"" as *u8) 146 if reg == 1 { p = us_b(rep, p, "STRUCTURAL-REGRESSION" as *u8) } else { p = us_b(rep, p, "GREEN" as *u8) } 147 p = us_b(rep, p, "\",\"envelope\":\"deterministic LLM-free structural-inventory fingerprint diff (interactive+landmark census + button->div smell); full ZSS tree-edit-distance over the sovereign browser AXTree = next rung\"}" as *u8) 148 sys_write(1, rep, p) 149 let ofd: i64 = sys_openat_wr("knowledge/status/ui_struct.out.tmp" as *u8, 420) 150 if ofd >= 0 { sys_write(ofd, rep, p); sys_close(ofd); sys_renameat("knowledge/status/ui_struct.out.tmp" as *u8, "knowledge/status/ui_struct.out" as *u8) } 151 if reg == 1 { sys_exit(3); return 3 } 152 sys_exit(0) 153 return 0 154}