code wiki / _hdl_build / nx_organ_registry_gate.nx

nx_organ_registry_gate.nx source

↩ module page · 131 lines · 5453 B

1// nx_organ_registry_gate.nx -- POINTER-INTEGRITY GUARD for consolidation. 2// 3// The durable fix for "an organ vanished because consolidation deleted it and 4// left the pointers dangling" (caught live: nx_fetch, the merged research 5// fetcher, was dedup-deleted -> SOURCE-NOT-FOUND days later). Per 6// feedback-no-tool-proliferation-consolidate-or-justify + Cardinal 13 7// (additive-only: consolidation SUPERSEDES-AND-PRESERVES, never deletes a 8// superseder), this guard reads the canonical-organ registry 9// (knowledge/registry/organ_supersession.tsv) and asserts EVERY listed 10// canonical organ's source still resolves on disk. RED the instant one is 11// missing -> the consolidation breakage surfaces LOUDLY (REACTIVE pillar) 12// instead of as a mysterious build failure later. 13// 14// Liar-kill: a hardcoded BOGUS path must read as MISSING (proves the checker 15// actually stats the filesystem and isn't rubber-stamping GREEN). 16// 17// Evidence -> knowledge/status/organ_registry.log 18// Composes: nx_syscalls (file probe). license_tier: ORIGINAL 19import "nx_syscalls.nx" 20 21const REG_PATH: *u8 = "knowledge/registry/organ_supersession.tsv" 22const ORG_LOG: *u8 = "knowledge/status/organ_registry.log" 23 24func ew(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 25func ewn(fd: i64, v: i64) -> i64 { 26 let bb: *u8 = sys_mmap(28); var m: i64 = v 27 if m < 0 { m = 0 - m; sys_write(fd, "-" as *u8, 1) } 28 let t: *u8 = sys_mmap(28); var k: i64 = 0 29 if m == 0 { t[0] = 48; k = 1 } 30 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 31 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 32 sys_write(fd, bb, k); return 0 33} 34 35// does this source path resolve on disk? 36func org_exists(relpath: *u8) -> i64 { 37 let fd: i64 = sys_openat_rd(relpath) 38 if fd < 0 { return 0 } 39 sys_close(fd) 40 return 1 41} 42 43// copy src[a..b) into dst, NUL-terminate; return length 44func org_copy(dst: *u8, src: *u8, a: i64, b: i64) -> i64 { 45 var i: i64 = 0 46 while a + i < b { dst[i] = src[a + i]; i = i + 1 } 47 dst[i] = 0 as u8 48 return i 49} 50 51func main() -> i64 { 52 var ok: i64 = 1 53 54 // multi-target writer: stdout + the durable log 55 let namebuf: *u8 = sys_mmap(512) 56 let pathbuf: *u8 = sys_mmap(1024) 57 58 // ---- liar-kill self-test: a bogus path MUST be missing ---- 59 var selftest_ok: i64 = 1 60 if org_exists("runtime/nx__bogus_sentinel_zzz__.nx" as *u8) != 0 { selftest_ok = 0; ok = 0 } 61 62 // ---- read the registry ---- 63 let lb: *i64 = sys_mmap(16) as *i64 64 let data: *u8 = sys_read_file(REG_PATH, lb) 65 var rows: i64 = 0 66 var present: i64 = 0 67 var missing: i64 = 0 68 var registry_ok: i64 = 1 69 if (data as i64) == 0 { registry_ok = 0; ok = 0 } 70 71 // open the log once for the per-missing detail lines 72 let logfd: i64 = sys_openat_append(ORG_LOG, 420) 73 74 if registry_ok == 1 { 75 let n: i64 = lb[0] 76 var pos: i64 = 0 77 while pos < n { 78 // find end of line 79 var eol: i64 = pos 80 var fe: i64 = 0 81 while fe == 0 { if eol >= n { fe = 1 } else { if (data[eol] & 0xff) == 10 { fe = 1 } else { eol = eol + 1 } } } 82 // skip blank lines and comments (#...) 83 var skip: i64 = 0 84 if eol <= pos { skip = 1 } 85 if skip == 0 { if (data[pos] & 0xff) == 35 { skip = 1 } } // '#' 86 if skip == 0 { 87 // field 1 = name [pos, tab1) 88 var tab1: i64 = pos 89 var f1: i64 = 0 90 while f1 == 0 { if tab1 >= eol { f1 = 1 } else { if (data[tab1] & 0xff) == 9 { f1 = 1 } else { tab1 = tab1 + 1 } } } 91 if tab1 < eol { 92 // field 2 = relpath [tab1+1, tab2) 93 var tab2: i64 = tab1 + 1 94 var f2: i64 = 0 95 while f2 == 0 { if tab2 >= eol { f2 = 1 } else { if (data[tab2] & 0xff) == 9 { f2 = 1 } else { tab2 = tab2 + 1 } } } 96 org_copy(namebuf, data, pos, tab1) 97 org_copy(pathbuf, data, tab1 + 1, tab2) 98 rows = rows + 1 99 if org_exists(pathbuf) == 1 { 100 present = present + 1 101 } else { 102 missing = missing + 1 103 ok = 0 104 if logfd >= 1 { ew(logfd, " MISSING-CANONICAL name=" as *u8); ew(logfd, namebuf); ew(logfd, " path=" as *u8); ew(logfd, pathbuf); ew(logfd, "\n" as *u8) } 105 ew(1, " MISSING-CANONICAL name=" as *u8); ew(1, namebuf); ew(1, " path=" as *u8); ew(1, pathbuf); ew(1, "\n" as *u8) 106 } 107 } 108 } 109 pos = eol + 1 110 } 111 } 112 113 // ---- verdict to stdout + log ---- 114 var fd: i64 = 1 115 while fd >= 1 { 116 ew(fd, "ORGANREGISTRYGATE authored=organ selftest_bogus_detected=" as *u8); ewn(fd, selftest_ok) 117 ew(fd, " registry_readable=" as *u8); ewn(fd, registry_ok) 118 ew(fd, " canonical_rows=" as *u8); ewn(fd, rows) 119 ew(fd, " present=" as *u8); ewn(fd, present) 120 ew(fd, " missing=" as *u8); ewn(fd, missing) 121 if ok == 1 { ew(fd, " verdict=GREEN\n" as *u8) } else { ew(fd, " verdict=RED\n" as *u8) } 122 if fd == 1 { 123 if logfd >= 1 { fd = logfd } else { fd = 0 } 124 } else { 125 sys_close(fd); fd = 0 126 } 127 } 128 129 if ok == 1 { return 0 } 130 return 1 131}