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}