code wiki / _hdl_build / nx_magicratchet.nx

nx_magicratchet.nx source

↩ module page · 174 lines · 7353 B

1// nx_magicratchet.nx -- F881 MAGIC-NUMBER RATCHET (the enforcement the operator demanded 2026-07-21: catch 2// me at submission, not by re-sweeping). A build must NOT INCREASE an organ's inline-magic-number count vs 3// its stored baseline. First build self-baselines (grandfathers existing violations); a build that ADDS a 4// magic number is REFUSED. Non-breaking (existing organs build), unbypassable (wired into /api/build), 5// fail-OPEN on any count/read uncertainty (a false refusal would be worse than a miss). Counting is DELEGATED 6// to `nx_law_warden countfile` -- ONE canonical L001 counter, no divergent reimplementation. Rule-11 CLEAN 7// itself (named consts, no inline magic). license_tier: ORIGINAL No hw writes (Rule 26). 8import "nx_syscalls.nx" 9import "nx_estr.nx" 10import "nx_tool_run.nx" 11 12const MR_CAPBUF: i64 = 4096 13const MR_SMALLBUF: i64 = 64 14const MR_ARGVN: i64 = 64 15const MR_MODE: i64 = 0x1a4 16const MR_DIRMODE: i64 = 0x1ed 17const MR_REFUSE: i64 = 3 18const MR_FEEDBUF: i64 = 8192 19const MR_MAPCAP: i64 = 1600 // bounded embed of nx_magic map output (keeps the refusal under the mgmt read cap) 20 21// parse the integer following "magic" in a {"magic":N} blob. -1 if absent (=> caller fails open). 22func mr_parse_magic(buf: *u8, n: i64) -> i64 { 23 var pos: i64 = 0 - 1 24 var i: i64 = 0 25 while i + 5 <= n { 26 if buf[i] == (109 as u8) { if buf[i+1] == (97 as u8) { if buf[i+2] == (103 as u8) { if buf[i+3] == (105 as u8) { if buf[i+4] == (99 as u8) { 27 if pos < 0 { pos = i } 28 } } } } } 29 i = i + 1 30 } 31 if pos < 0 { return 0 - 1 } 32 var j: i64 = pos + 5 33 var started: i64 = 0 34 var v: i64 = 0 35 var go: i64 = 1 36 while go == 1 { 37 if j >= n { go = 0 } else { 38 let c: i64 = buf[j] as i64 39 if c >= 48 { if c <= 57 { started = 1; v = v * 10 + (c - 48); j = j + 1 } else { if started == 1 { go = 0 } else { j = j + 1 } } } 40 else { if started == 1 { go = 0 } else { j = j + 1 } } 41 } 42 } 43 if started == 0 { return 0 - 1 } 44 return v 45} 46 47// read a non-negative int from a file; -1 if unreadable/empty. 48func mr_read_int(path: *u8) -> i64 { 49 let fd: i64 = sys_openat_rd(path) 50 if fd < 0 { return 0 - 1 } 51 let b: *u8 = sys_mmap(MR_SMALLBUF) 52 let r: i64 = sys_read(fd, b, MR_SMALLBUF - 1) 53 sys_close(fd) 54 if r <= 0 { return 0 - 1 } 55 var v: i64 = 0 56 var started: i64 = 0 57 var i: i64 = 0 58 while i < r { let c: i64 = b[i] as i64; if c >= 48 { if c <= 57 { started = 1; v = v * 10 + (c - 48) } } i = i + 1 } 59 if started == 0 { return 0 - 1 } 60 return v 61} 62 63// write an int + newline to path (atomic enough for a single-writer baseline). 0 ok. 64func mr_write_int(path: *u8, v: i64) -> i64 { 65 let b: *u8 = sys_mmap(MR_SMALLBUF) 66 var o: i64 = es_catn(b, 0, v) 67 b[o] = 10 as u8 68 o = o + 1 69 let fd: i64 = sys_openat_wr(path, MR_MODE) 70 if fd < 0 { return 0 - 1 } 71 sys_write(fd, b, o) 72 sys_close(fd) 73 return 0 74} 75 76func main(argc: i64, argv: *i64) -> i64 { 77 // usage: nx_magicratchet check <organ-name> (or just <organ-name>) 78 if argc < 2 { es_puts("usage: nx_magicratchet check <organ-name>\n" as *u8); sys_exit(2); return 2 } 79 var name: *u8 = argv[1] as *u8 80 if argc >= 3 { name = argv[2] as *u8 } 81 82 // build the source path: buildroot/runtime/_hdl_build/<name>.nx 83 let src: *u8 = sys_mmap(512) 84 var so: i64 = es_cat(src, 0, "buildroot/runtime/_hdl_build/" as *u8) 85 so = es_cat(src, so, name) 86 so = es_cat(src, so, ".nx" as *u8) 87 src[so] = 0 as u8 88 89 // count via the ONE canonical counter (nx_law_warden countfile) 90 let warden: *u8 = "./nx_law_warden.elf" as *u8 91 let av: *i64 = sys_mmap(8 * MR_ARGVN) as *i64 92 av[0] = warden as i64 93 av[1] = "countfile" as *u8 as i64 94 av[2] = src as i64 95 av[3] = 0 96 let out: *u8 = sys_mmap(MR_CAPBUF) 97 let olen: *i64 = sys_mmap(16) as *i64 98 tr_run_capture(warden, av, out, MR_CAPBUF - 1, olen) 99 let count: i64 = mr_parse_magic(out, olen[0]) 100 101 // FAIL-OPEN: if we could not count, allow the build (never a false refusal on a counting failure) 102 if count < 0 { 103 es_puts("{\"tool\":\"nx_magicratchet\",\"organ\":\"" as *u8) 104 es_puts(name) 105 es_puts("\",\"verdict\":\"ALLOW-UNCOUNTED\"}\n" as *u8) 106 sys_exit(0) 107 return 0 108 } 109 110 // baseline path 111 sys_mkdir("knowledge/status/magicbase\x00" as *u8, MR_DIRMODE) 112 let bp: *u8 = sys_mmap(512) 113 var bo: i64 = es_cat(bp, 0, "knowledge/status/magicbase/" as *u8) 114 bo = es_cat(bp, bo, name) 115 bo = es_cat(bp, bo, ".cnt" as *u8) 116 bp[bo] = 0 as u8 117 118 let base: i64 = mr_read_int(bp) 119 120 // REFUSE if a baseline exists and the count INCREASED 121 if base >= 0 { 122 if count > base { 123 // CLEAR ACTIONABLE FEEDBACK (operator 2026-07-21: a refusal must tell the AI+human exactly what 124 // and how, not throw a weird error). Fork `nx_magic map <src>` to list the exact offending literals 125 // (line/col/value/proposed-const) and name the ONE-COMMAND auto-fix. 126 let mav: *i64 = sys_mmap(8 * MR_ARGVN) as *i64 127 mav[0] = "./nx_magic.elf" as *u8 as i64 128 mav[1] = "map" as *u8 as i64 129 mav[2] = src as i64 130 mav[3] = 0 131 let mout: *u8 = sys_mmap(MR_FEEDBUF) 132 let molen: *i64 = sys_mmap(16) as *i64 133 tr_run_capture("./nx_magic.elf" as *u8, mav, mout, MR_FEEDBUF - 1, molen) 134 let rb: *u8 = sys_mmap(MR_FEEDBUF) 135 var ro: i64 = es_cat(rb, 0, "{\"tool\":\"nx_magicratchet\",\"organ\":\"" as *u8) 136 ro = es_cat(rb, ro, name) 137 ro = es_cat(rb, ro, "\",\"verdict\":\"REFUSE\",\"magic\":" as *u8) 138 ro = es_catn(rb, ro, count) 139 ro = es_cat(rb, ro, ",\"baseline\":" as *u8) 140 ro = es_catn(rb, ro, base) 141 ro = es_cat(rb, ro, ",\"why\":\"this build ADDS " as *u8) 142 ro = es_catn(rb, ro, count - base) 143 ro = es_cat(rb, ro, " inline magic number(s) (rule 11); the ratchet only lets the count go DOWN\",\"fix\":\"run: nx_magic apply " as *u8) 144 ro = es_cat(rb, ro, src) 145 ro = es_cat(rb, ro, " (auto-hoists each literal to a named const, proven byte-identical), then rebuild\",\"offenders\":" as *u8) 146 var mi: i64 = 0 147 var mn: i64 = molen[0] 148 if mn > MR_MAPCAP { mn = MR_MAPCAP } 149 while mi < mn { rb[ro] = mout[mi]; ro = ro + 1; mi = mi + 1 } 150 // strip a trailing newline from the embedded map JSON so the outer object stays well-formed 151 if ro > 0 { if rb[ro - 1] == (10 as u8) { ro = ro - 1 } } 152 ro = es_cat(rb, ro, "}\n" as *u8) 153 rb[ro] = 0 as u8 154 es_puts(rb) 155 sys_exit(MR_REFUSE) 156 return MR_REFUSE 157 } 158 } 159 160 // ALLOW: update the baseline (ratchet down / first-sight grandfather) 161 mr_write_int(bp, count) 162 let ab: *u8 = sys_mmap(512) 163 var ao: i64 = es_cat(ab, 0, "{\"tool\":\"nx_magicratchet\",\"organ\":\"" as *u8) 164 ao = es_cat(ab, ao, name) 165 ao = es_cat(ab, ao, "\",\"verdict\":\"ALLOW\",\"magic\":" as *u8) 166 ao = es_catn(ab, ao, count) 167 ao = es_cat(ab, ao, ",\"baseline\":" as *u8) 168 ao = es_catn(ab, ao, base) 169 ao = es_cat(ab, ao, "}\n" as *u8) 170 ab[ao] = 0 as u8 171 es_puts(ab) 172 sys_exit(0) 173 return 0 174}