code wiki / _hdl_build / nx_algo_registry.nx

nx_algo_registry.nx source

↩ module page · 97 lines · 4652 B

1// nx_algo_registry.nx -- the SOVEREIGN algorithm registry, replacing the shell subsystem (nx_algo_register.sh + 2// bundle_lib.py + ...) that managed specs/algo_registry/<name>/meta.json. The card DATA already lives byte-faithful 3// in the seg_store knowledge/store/algo-registry- (migrated by nx_algo_registry_migrate); this is the sovereign 4// API over it: ar_count / ar_get / ar_register. Preserves the registration CAPABILITY (rule #25 never-strip) so the 5// per-entry meta.json + the shell producers can RETIRE (debt-drop) with the feature kept, not lost. 6// Self-gate: reads the REAL store (count + a known card byte-present) + proves ar_register round-trips on a FRESH 7// throwaway store (no production pollution). license_tier: ORIGINAL 8import "nx_seg_store.nx" 9import "nx_syscalls.nx" 10const AR_MAGIC_3000: i64 = 3000 11 12const AR_PREFIX: *u8 = "knowledge/store/algo-registry-" as *u8 13 14func ar_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 15func ar_putn(v: i64) -> i64 { 16 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 17 var m: i64 = v 18 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 19 let d: *u8 = sys_mmap(24); var k: i64 = 0 20 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 21 var j: i64 = k - 1 22 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 } 23 return 0 24} 25func ar_atoi(s: *u8, n: i64) -> i64 { 26 var v: i64 = 0; var i: i64 = 0 27 while i < n { let c: i64 = s[i]; if c >= 48 { if c <= 57 { v = v * 10 + (c - 48) } } i = i + 1 } 28 return v 29} 30// substring contains (small) 31func ar_has(b: *u8, n: i64, needle: *u8, nl: i64) -> i64 { 32 if nl == 0 { return 1 } 33 var p: i64 = 0 34 while p + nl <= n { 35 var j: i64 = 0; var hit: i64 = 1 36 while j < nl { if b[p + j] != needle[j] { hit = 0; j = nl } else { j = j + 1 } } 37 if hit == 1 { return 1 } 38 p = p + 1 39 } 40 return 0 41} 42// ---- the sovereign registry API (over an open store handle) ---- 43func ar_count(h: *i64) -> i64 { 44 let pp: *i64 = sys_mmap(16) as *i64 45 let ll: *i64 = sys_mmap(16) as *i64 46 if ss_hget(h, "__count" as *u8, pp, ll) != 1 { return 0 - 1 } 47 return ar_atoi(pp[0] as *u8, ll[0]) 48} 49// get card bytes for name; returns ptr (len into outlen[0]) or 0 50func ar_get(h: *i64, name: *u8, outlen: *i64) -> *u8 { 51 let pp: *i64 = sys_mmap(16) as *i64 52 let ll: *i64 = sys_mmap(16) as *i64 53 if ss_hget(h, name, pp, ll) != 1 { outlen[0] = 0; return 0 as *u8 } 54 outlen[0] = ll[0] 55 return pp[0] as *u8 56} 57// register (append) a card into the store at prefix; returns ss_commit rc 58func ar_register(prefix: *u8, name: *u8, json: *u8, jlen: i64) -> i64 { 59 let w: *i64 = ss_begin() 60 ss_add(w, 1, name, json, jlen) 61 return ss_commit(prefix, w, sys_now_ms()) 62} 63func main() -> i64 { 64 ar_puts("ALGO REGISTRY (sovereign, over knowledge/store/algo-registry-): replaces the shell/python producers\n" as *u8) 65 var pass: i64 = 0 66 // (1) READ the real production store 67 let h: *i64 = ss_open(AR_PREFIX) 68 if (h as i64) != 0 { 69 let c: i64 = ar_count(h) 70 ar_puts(" ar_count="); ar_putn(c); ar_puts("\n" as *u8) 71 if c >= AR_MAGIC_3000 { pass = pass + 1 } 72 let gl: *i64 = sys_mmap(16) as *i64 73 let card: *u8 = ar_get(h, "abs_diff_pair" as *u8, gl) 74 if (card as i64) != 0 { if gl[0] > 0 { if ar_has(card, gl[0], "nx_abs_diff" as *u8, 11) == 1 { 75 ar_puts(" ar_get(abs_diff_pair): "); ar_putn(gl[0]); ar_puts(" bytes, contains nx_abs_diff -- faithful\n" as *u8) 76 pass = pass + 1 77 } } } 78 } 79 // (2) prove ar_register round-trips on a FRESH throwaway store (no prod pollution) 80 let probe: *u8 = "/tmp/ar-probe-" as *u8 81 let pj: *u8 = "{\"name\":\"probe\",\"nx_module\":\"nx_probe\"}" as *u8 82 var pjl: i64 = 0; while pj[pjl] != (0 as u8) { pjl = pjl + 1 } 83 ar_register(probe, "probe_card" as *u8, pj, pjl) 84 let h2: *i64 = ss_open(probe) 85 if (h2 as i64) != 0 { 86 let gl2: *i64 = sys_mmap(16) as *i64 87 let got: *u8 = ar_get(h2, "probe_card" as *u8, gl2) 88 if (got as i64) != 0 { if gl2[0] == pjl { if ar_has(got, gl2[0], "nx_probe" as *u8, 8) == 1 { 89 ar_puts(" ar_register/ar_get round-trip on fresh store: OK\n" as *u8) 90 pass = pass + 1 91 } } } 92 } 93 ar_puts(" capability checks passed = "); ar_putn(pass); ar_puts("/3\n" as *u8) 94 if pass == 3 { ar_puts("ALGO-REGISTRY: GREEN (sovereign register/get/count over the store; meta.json + shell producers are now RETIRE-READY)\n" as *u8); return 0 } 95 ar_puts("ALGO-REGISTRY: RED\n" as *u8) 96 return 1 97}