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}