code wiki / _hdl_build / nx_prim_query.nx

nx_prim_query.nx source

↩ module page · 148 lines · 8307 B

1// nx_prim_query.nx -- prim lane F782 (query_primitives: the 'what do I have' half of meet-in-the-middle). 2// Reads the F781 manifest knowledge/store/prim_registry.json and returns every primitive object whose 3// text matches the query (substring facet over domain/capabilities/signature/output/id) -- the sovereign 4// query the top-down orchestrator (F783) calls to find matching blocks. Objects copied VERBATIM (already 5// valid JSON). Result to stdout AND an atomic out-file (verifiable). READ-ONLY. Empty query = match-all. 6// Object boundaries found via PLAIN-WORD anchors + numeric-byte confirm ({\x22 before primitive_id) so the 7// match logic carries NO string-escape dependency (cannot silently 0-match). 8// nx_prim_query <query> [manifest.json] [out.json] 9// exit: 0 GREEN | 4 ABSENT/MALFORMED | 2 usage. 10// license_tier: ORIGINAL expect_exit: 0 11import "nx_syscalls.nx" 12const K_MAGIC_2048: i64 = 2048 13const K_MAGIC_262100: i64 = 262100 14const K_MAGIC_1048576: i64 = 1048576 15 16func pq_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 } 17func pq_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_262100 { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p } 18func pq_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < K_MAGIC_262100 { 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_262100 { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p } 19func pq_q(rep: *u8, pos: i64) -> i64 { var p: i64 = pos; if p < K_MAGIC_262100 { rep[p] = 34 as u8; p = p + 1 } return p } 20func pq_je(rep: *u8, pos: i64, src: *u8, s: i64, e: i64) -> i64 { 21 var p: i64 = pos 22 var i: i64 = s 23 while i < e { 24 let c: i64 = src[i] 25 if c == 34 { if p < K_MAGIC_262100 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_262100 { rep[p] = 34 as u8; p = p + 1 } } 26 else { if c == 92 { if p < K_MAGIC_262100 { rep[p] = 92 as u8; p = p + 1 } if p < K_MAGIC_262100 { rep[p] = 92 as u8; p = p + 1 } } 27 else { if c < 32 { if p < K_MAGIC_262100 { rep[p] = 32 as u8; p = p + 1 } } 28 else { if p < K_MAGIC_262100 { rep[p] = c as u8; p = p + 1 } } } } 29 i = i + 1 30 } 31 return p 32} 33func pq_cp(rep: *u8, pos: i64, src: *u8, s: i64, e: i64) -> i64 { var p: i64 = pos; var i: i64 = s; while i < e { if p < K_MAGIC_262100 { rep[p] = src[i]; p = p + 1 } i = i + 1 } return p } 34func pq_reads(path: *u8, buf: *u8, cap: i64) -> i64 { 35 let fd: i64 = sys_openat_rd(path) 36 if fd < 0 { return 0 - 1 } 37 var n: i64 = 0 38 var go: i64 = 1 39 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 } } 40 sys_close(fd) 41 return n 42} 43func pq_has(buf: *u8, s: i64, e: i64, pat: *u8, pl: i64) -> i64 { 44 if pl == 0 { return 1 } 45 var i: i64 = s 46 var hit: i64 = 0 47 while i + pl <= e { 48 var k: i64 = 0 49 var m: i64 = 1 50 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } } 51 if m == 1 { hit = 1; i = e } else { i = i + 1 } 52 } 53 return hit 54} 55func pq_off(buf: *u8, s: i64, e: i64, pat: *u8, pl: i64) -> i64 { 56 if pl == 0 { return 0 - 1 } 57 var i: i64 = s 58 var found: i64 = 0 - 1 59 while i + pl <= e { 60 var k: i64 = 0 61 var m: i64 = 1 62 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } } 63 if m == 1 { found = i; i = e } else { i = i + 1 } 64 } 65 return found 66} 67func pq_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 68func main(argc: i64, argv: *i64) -> i64 { 69 if argc < 2 { pq_w(2, "usage: nx_prim_query <query> [manifest.json] [out.json]\n" as *u8); sys_exit(2); return 2 } 70 let query: *u8 = argv[1] as *u8 71 var manifest: *u8 = "knowledge/store/prim_registry.json" as *u8 72 var outpath: *u8 = "knowledge/status/prim_query.json" as *u8 73 var tmppath: *u8 = "knowledge/status/prim_query.json.tmp" as *u8 74 if argc >= 3 { manifest = argv[2] as *u8 } 75 if argc >= 4 { outpath = argv[3] as *u8 } 76 let qlen: i64 = pq_slen(query) 77 let win: i64 = K_MAGIC_1048576 78 let buf: *u8 = sys_mmap(win + 16) 79 let n: i64 = pq_reads(manifest, buf, win) 80 if n < 0 { pq_w(1, "PRIM-QUERY verdict=ABSENT manifest unreadable\n" as *u8); sys_exit(4); return 4 } 81 if n >= win { pq_w(1, "PRIM-QUERY verdict=REFUSED manifest-window-saturated: raise win, a torn manifest scan undercounts primitives\n" as *u8); sys_exit(4); return 4 } 82 // PLAIN-WORD region anchors (no embedded quotes -> escape-independent) 83 let ph: i64 = pq_off(buf, 0, n, "primitives" as *u8, 10) 84 if ph < 0 { pq_w(1, "PRIM-QUERY verdict=MALFORMED no-primitives-key\n" as *u8); sys_exit(4); return 4 } 85 let rstart: i64 = ph + 10 86 let endpat: *u8 = sys_mmap(16) 87 endpat[0] = 93 as u8 88 endpat[1] = 44 as u8 89 endpat[2] = 34 as u8 90 endpat[3] = 101 as u8 91 endpat[4] = 110 as u8 92 endpat[5] = 118 as u8 93 endpat[6] = 101 as u8 94 endpat[7] = 108 as u8 95 endpat[8] = 111 as u8 96 endpat[9] = 112 as u8 97 endpat[10] = 101 as u8 98 let eh: i64 = pq_off(buf, rstart, n, endpat, 11) 99 var arrend: i64 = n 100 if eh > 0 { arrend = eh } 101 // object boundaries: word 'primitive_id' whose preceding 2 bytes are { and \x22 102 let bounds: *i64 = sys_mmap(K_MAGIC_2048 * 8) as *i64 103 var nb: i64 = 0 104 var scan: i64 = rstart 105 var go: i64 = 1 106 while go == 1 { 107 let o: i64 = pq_off(buf, scan, arrend, "primitive_id" as *u8, 12) 108 if o < 0 { go = 0 } else { 109 if o >= 2 { if buf[o-2] == (123 as u8) { if buf[o-1] == (34 as u8) { if nb < K_MAGIC_2048 { bounds[nb] = o - 2; nb = nb + 1 } } } } 110 scan = o + 12 111 } 112 } 113 let rep: *u8 = sys_mmap(win + 16) 114 var p: i64 = 0 115 p = pq_b(rep, p, "{" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, "v" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":1," as *u8) 116 p = pq_q(rep, p); p = pq_b(rep, p, "query" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":" as *u8); p = pq_q(rep, p); p = pq_je(rep, p, query, 0, qlen); p = pq_q(rep, p); p = pq_b(rep, p, "," as *u8) 117 p = pq_q(rep, p); p = pq_b(rep, p, "source" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, "knowledge/store/prim_registry.json" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, "," as *u8) 118 p = pq_q(rep, p); p = pq_b(rep, p, "match_kind" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, "substring-facet-domain-capabilities-signature-output-id-case-sensitive" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, "," as *u8) 119 p = pq_q(rep, p); p = pq_b(rep, p, "primitives" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":[" as *u8) 120 var matched: i64 = 0 121 var first: i64 = 1 122 var k: i64 = 0 123 while k < nb { 124 let ostart: i64 = bounds[k] 125 var oend: i64 = arrend 126 if k + 1 < nb { oend = bounds[k+1] } 127 var ce: i64 = oend 128 if ce > ostart { if buf[ce-1] == (44 as u8) { ce = ce - 1 } } 129 var hit: i64 = 0 130 if qlen == 0 { hit = 1 } else { hit = pq_has(buf, ostart, ce, query, qlen) } 131 if hit == 1 { 132 if first == 1 { first = 0 } else { p = pq_b(rep, p, "," as *u8) } 133 p = pq_cp(rep, p, buf, ostart, ce) 134 matched = matched + 1 135 } 136 k = k + 1 137 } 138 p = pq_b(rep, p, "]," as *u8) 139 p = pq_q(rep, p); p = pq_b(rep, p, "matched" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":" as *u8); p = pq_bn(rep, p, matched); p = pq_b(rep, p, "," as *u8) 140 p = pq_q(rep, p); p = pq_b(rep, p, "scanned" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":" as *u8); p = pq_bn(rep, p, nb); p = pq_b(rep, p, "," as *u8) 141 p = pq_q(rep, p); p = pq_b(rep, p, "cap" as *u8); p = pq_q(rep, p); p = pq_b(rep, p, ":2048" as *u8) 142 p = pq_b(rep, p, "}" as *u8) 143 sys_write(1, rep, p) 144 let tmpfd: i64 = sys_openat_wr(tmppath, 420) 145 if tmpfd >= 0 { sys_write(tmpfd, rep, p); sys_close(tmpfd); sys_renameat(tmppath, outpath) } 146 sys_exit(0) 147 return 0 148}