code wiki / _hdl_build / nx_store_lineage.nx

nx_store_lineage.nx source

↩ module page · 145 lines · 7684 B

1// nx_store_lineage.nx -- the LINEAGE rung over the store catalog (DataHub/OpenLineage-class): for each organ, 2// which seg_stores does it reference, and as PRODUCER (writes -> ss_commit/ncfg_commit) or CONSUMER (reads -> 3// ss_open/ss_hget/ncfg_open). ONE sovereign getdents walk over runtime/ + _hdl_build/, READ-ONLY / ADDITIVE 4// (touches nothing). Matches the literal "knowledge/store/<name>" prefix in organ source (static-prefix edges; 5// dynamically-built prefixes are counted separately, honest). Composes nx_seg_store (ss_readall/ss_cat). 6// Self-verifies: the nx_algo_registry_migrate -> algo-registry PRODUCER edge is found. 7// expect_exit: 0 license_tier: ORIGINAL 8import "nx_seg_store.nx" 9import "nx_syscalls.nx" 10const K_MAGIC_262144: i64 = 262144 11const K_MAGIC_1024: i64 = 1024 12const K_MAGIC_2097152: i64 = 2097152 13 14func ln_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 ln_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 ln_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 26func ln_ends(name: *u8, suf: *u8) -> i64 { 27 let nl: i64 = ln_len(name); let sl: i64 = ln_len(suf) 28 if nl < sl { return 0 } 29 var i: i64 = 0 30 while i < sl { if name[nl - sl + i] != suf[i] { return 0 } i = i + 1 } 31 return 1 32} 33// substring search in buf[start..n); -1 if absent 34func ln_find(buf: *u8, n: i64, start: i64, needle: *u8, nlen: i64) -> i64 { 35 if nlen == 0 { return start } 36 var p: i64 = start 37 while p + nlen <= n { 38 var j: i64 = 0; var hit: i64 = 1 39 while j < nlen { if buf[p + j] != needle[j] { hit = 0; j = nlen } else { j = j + 1 } } 40 if hit == 1 { return p } 41 p = p + 1 42 } 43 return 0 - 1 44} 45func ln_has(buf: *u8, n: i64, needle: *u8) -> i64 { if ln_find(buf, n, 0, needle, ln_len(needle)) >= 0 { return 1 } return 0 } 46// store-name char? a-z 0-9 - _ 47func ln_isnc(c: i64) -> i64 { 48 if c >= 97 { if c <= 122 { return 1 } } 49 if c >= 48 { if c <= 57 { return 1 } } 50 if c == 45 { return 1 } 51 if c == 95 { return 1 } 52 return 0 53} 54// acc: [0]=static edges [1]=dynamic-prefix refs [2]=emitted [3]=verify-found [4]=organs-with-store-ref 55func ln_walk(dir: *u8, acc: *i64) -> i64 { 56 let fd: i64 = sys_openat_rd(dir) 57 if fd < 0 { return 0 } 58 let dbuf: *u8 = sys_mmap(K_MAGIC_262144) 59 let szp: *i64 = sys_mmap(16) as *i64 60 var go: i64 = 1 61 while go == 1 { 62 let nb: i64 = sys_getdents64(fd, dbuf, K_MAGIC_262144) 63 if nb <= 0 { go = 0 } else { 64 var off: i64 = 0 65 while off < nb { 66 let rec: *u8 = (dbuf as i64 + off) as *u8 67 let rl: i64 = dirent_reclen(rec) 68 if rl <= 0 { off = nb } else { 69 let nm: *u8 = dirent_name(rec) 70 if ln_ends(nm, ".nx" as *u8) == 1 { 71 let path: *u8 = sys_mmap(K_MAGIC_1024); var o: i64 = 0 72 o = ss_cat(path, o, dir); path[o] = 47 as u8; o = o + 1 73 o = ss_cat(path, o, nm); path[o] = 0 as u8 74 szp[0] = 0 75 let buf: *u8 = ss_readall(path, szp) 76 let n: i64 = szp[0] 77 if n > 0 { if n < K_MAGIC_2097152 { 78 var isP: i64 = 0 79 if ln_has(buf, n, "ss_commit" as *u8) == 1 { isP = 1 } 80 if ln_has(buf, n, "ncfg_commit" as *u8) == 1 { isP = 1 } 81 var isCo: i64 = 0 82 if ln_has(buf, n, "ss_open" as *u8) == 1 { isCo = 1 } 83 if ln_has(buf, n, "ss_hget" as *u8) == 1 { isCo = 1 } 84 if ln_has(buf, n, "ncfg_open" as *u8) == 1 { isCo = 1 } 85 var organ_counted: i64 = 0 86 var pos: i64 = 0 87 var more: i64 = 1 88 while more == 1 { 89 let p: i64 = ln_find(buf, n, pos, "knowledge/store/" as *u8, 16) 90 if p < 0 { more = 0 } else { 91 let st: i64 = p + 16 92 var l: i64 = 0 93 var cont: i64 = 1 94 while cont == 1 { 95 if st + l >= n { cont = 0 } else { 96 if ln_isnc(buf[st + l] as i64) == 1 { l = l + 1 } else { cont = 0 } 97 } 98 } 99 if l > 0 { 100 acc[0] = acc[0] + 1 101 if organ_counted == 0 { acc[4] = acc[4] + 1; organ_counted = 1 } 102 if acc[2] < 120 { 103 acc[2] = acc[2] + 1 104 ln_puts(" " as *u8) 105 var q: i64 = 0; let nlen: i64 = ln_len(nm) - 3 106 while q < nlen { let oo: *u8 = sys_mmap(1); oo[0] = nm[q]; sys_write(1, oo, 1); q = q + 1 } 107 ln_puts(" [" as *u8) 108 if isP == 1 { ln_puts("P" as *u8) } 109 if isCo == 1 { ln_puts("C" as *u8) } 110 if isP == 0 { if isCo == 0 { ln_puts("?" as *u8) } } 111 ln_puts("] " as *u8) 112 var r2: i64 = 0 113 while r2 < l { let o2: *u8 = sys_mmap(1); o2[0] = buf[st + r2]; sys_write(1, o2, 1); r2 = r2 + 1 } 114 ln_puts("\n" as *u8) 115 } 116 if ln_find(nm, ln_len(nm), 0, "algo_registry_migrate" as *u8, 21) >= 0 { 117 if ln_find(buf, st + l, st, "algo-registry" as *u8, 13) >= 0 { if isP == 1 { acc[3] = 1 } } 118 } 119 } else { acc[1] = acc[1] + 1 } 120 pos = p + 16 121 } 122 } 123 } } 124 } 125 off = off + rl 126 } 127 } 128 } 129 } 130 sys_close(fd) 131 return 0 132} 133func main() -> i64 { 134 ln_puts("STORE LINEAGE: organ -> seg_store [P]roducer(commit) / [C]onsumer(open) (static prefixes; emit cap 120)\n" as *u8) 135 let acc: *i64 = sys_mmap(64) as *i64 136 var i: i64 = 0; while i < 8 { acc[i] = 0; i = i + 1 } 137 ln_walk("runtime" as *u8, acc) 138 ln_walk("runtime/_hdl_build" as *u8, acc) 139 ln_puts("LINEAGE SUMMARY: static-edges="); ln_putn(acc[0]) 140 ln_puts(" organs-with-store-ref="); ln_putn(acc[4]) 141 ln_puts(" dynamic-prefix-refs="); ln_putn(acc[1]); ln_puts("\n" as *u8) 142 if acc[3] == 1 { ln_puts("STORE-LINEAGE: GREEN (nx_algo_registry_migrate -> algo-registry PRODUCER edge found)\n" as *u8); return 0 } 143 ln_puts("STORE-LINEAGE: RED (expected the algo-registry producer edge)\n" as *u8) 144 return 1 145}