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}