code wiki / _hdl_build / nx_cap_harvest.nx
nx_cap_harvest.nx source
↩ module page · 94 lines · 3839 B
1// nx_cap_harvest.nx -- SCALE (F310b): auto-harvest a BROAD capability catalog from the live tool
2// registry (tool_allowlist.conf) -> knowledge/store/ecocap- so nx_recombine works ACROSS THE ENTERPRISE
3// at scale, NOT on hand-seeded catalogs. Each registry row -> capability (col0=name, col6=keywords =
4// name with '_' -> ' '). Reusable. Reads via sys_read_file (raw slurp). Manual tab writes (no hex escapes).
5// nx_cap_harvest [registry-file] [out-prefix] defaults: tool_allowlist.conf knowledge/store/ecocap-
6// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
7import "nx_store_seed_lib.nx"
8import "nx_seg_store.nx"
9import "nx_syscalls.nx"
10import "nx_runtime.nx"
11
12const CH_CAP: i64 = 1048576
13const CH_NL: i64 = 10
14const CH_TAB: i64 = 9
15const CH_HASH: i64 = 35
16const CH_US: i64 = 95
17const CH_SP: i64 = 32
18const CH_SEV7: i64 = 55
19const CH_STDERR: i64 = 2
20const CH_EXIT_IO: i64 = 1
21const CH_MAXOUT: i64 = 512
22
23func ch_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
24func ch_werr(s: *u8) -> i64 { sys_write(CH_STDERR, s, ch_slen(s)); return 0 }
25
26func main(argc: i64, argv: *i64) -> i64 {
27 var regp: *u8 = "tool_allowlist.conf" as *u8
28 var outp: *u8 = "knowledge/store/ecocap-" as *u8
29 if argc > 1 { regp = argv[1] as *u8 }
30 if argc > 2 { outp = argv[2] as *u8 }
31
32 let lenp: *i64 = sys_mmap(8) as *i64
33 lenp[0] = 0
34 let buf: *u8 = sys_read_file(regp, lenp)
35 let n: i64 = lenp[0]
36 if n <= 0 { ch_werr("registry file empty or unreadable\n" as *u8); sys_exit(CH_EXIT_IO); return CH_EXIT_IO }
37
38 let out: *u8 = sys_mmap(CH_CAP)
39 var oo: i64 = 0
40 var ncaps: i64 = 0
41 var i: i64 = 0
42 while i < n {
43 var le: i64 = i
44 var s: i64 = 1
45 while s == 1 { if le >= n { s = 0 } else { if buf[le] == (CH_NL as u8) { s = 0 } else { le = le + 1 } } }
46 if le > i { if buf[i] != (CH_HASH as u8) {
47 var nameend: i64 = i
48 var s2: i64 = 1
49 while s2 == 1 { if nameend >= le { s2 = 0 } else { if buf[nameend] == (CH_TAB as u8) { s2 = 0 } else { nameend = nameend + 1 } } }
50 if nameend > i { if ncaps < CH_MAXOUT {
51 var k: i64 = i
52 while k < nameend { out[oo] = buf[k]; oo = oo + 1; k = k + 1 }
53 out[oo] = CH_TAB as u8
54 oo = oo + 1
55 k = i
56 while k < nameend { out[oo] = buf[k]; oo = oo + 1; k = k + 1 }
57 out[oo] = CH_TAB as u8
58 oo = oo + 1
59 out[oo] = CH_SEV7 as u8
60 oo = oo + 1
61 out[oo] = CH_TAB as u8
62 oo = oo + 1
63 oo = ss_cat(out, oo, "LIVE" as *u8)
64 out[oo] = CH_TAB as u8
65 oo = oo + 1
66 oo = ss_cat(out, oo, "team" as *u8)
67 out[oo] = CH_TAB as u8
68 oo = oo + 1
69 oo = ss_cat(out, oo, "cap" as *u8)
70 out[oo] = CH_TAB as u8
71 oo = oo + 1
72 k = i
73 while k < nameend {
74 if buf[k] == (CH_US as u8) { out[oo] = CH_SP as u8 } else { out[oo] = buf[k] }
75 oo = oo + 1
76 k = k + 1
77 }
78 out[oo] = CH_NL as u8
79 oo = oo + 1
80 ncaps = ncaps + 1
81 } }
82 } }
83 i = le + 1
84 }
85 if ncaps == 0 { ch_werr("no capabilities harvested\n" as *u8); sys_exit(0); return 0 }
86 if sts_seed(outp, out, oo) < 0 { ch_werr("ecocap plane commit error\n" as *u8); sys_exit(CH_EXIT_IO); return CH_EXIT_IO }
87 let msg: *u8 = sys_mmap(128)
88 var mo: i64 = ss_cat(msg, 0, "CAP-HARVEST caps=" as *u8)
89 mo = ss_catn(msg, mo, ncaps)
90 mo = ss_cat(msg, mo, " from registry\n" as *u8)
91 sys_write(1, msg, mo)
92 sys_exit(0)
93 return 0
94}