code wiki / _hdl_build / nx_sovereign_format_census.nx
nx_sovereign_format_census.nx source
↩ module page · 221 lines · 11415 B
1// nx_sovereign_format_census.nx -- the ENFORCEMENT SENSOR for the sovereign-information-management law
2// ([[feedback-no-tsv-sovereign-seg-store]] / [[feedback-pure-nishi-infomgmt-no-sql]]): why do organs keep
3// writing .tsv/.log/.txt internal state instead of nx_seg_store? Because NOTHING MEASURES IT. This closes
4// that gap the same way the sensor-gap program closes gate blindness: walk runtime/_hdl_build, classify each
5// organ's DATA PERSISTENCE, print the live debt, and GATE on no-backslide (a NEW flat-file writer = RED).
6//
7// CLASSIFY (per organ, from source):
8// writes-flat-internal = (openat_wr | openat_append) AND (.tsv | .csv | .log | .txt) [almost never interop]
9// sovereign = ss_commit | ss_add( | nx_seg_store | sov_put | nx_sov_ledger [the store]
10// interop-boundary = writes .html | .json [served output = LEGIT]
11// => VIOLATION = writes-flat-internal AND NOT sovereign (the pure debt: flat state, no sovereign path)
12// PARTIAL = writes-flat-internal AND sovereign (mid-migration)
13// SOVEREIGN = sovereign AND NOT writes-flat-internal
14// CONSERVATIVE by design: .html/.json are NOT counted as violations (that is the legitimate interop boundary
15// Nishi OS keeps for reading/serving the world's data) -- so the printed debt is a FLOOR, real debt is >=.
16//
17// SELF-LIAR-KILLED: a .tsv-writer fixture must classify VIOLATION; an ss_commit fixture SOVEREIGN; a served
18// .html fixture must NOT be a violation (interop, not debt); determinism; unreadable file = counted, never
19// fabricated. REGRESSION GATE stores its baseline SOVEREIGNLY via nx_sov_ledger (dogfoods the fix, NO .tsv):
20// violations may not exceed baseline -> a new flat-file writer trips RED. Prints the debt regardless.
21// Sovereign nx_cc->nxasm; CWD=nxc2 root. expect_exit: 0 license_tier: ORIGINAL
22import "nx_syscalls.nx"
23import "nx_dirent.nx"
24import "nx_fcntl.nx"
25import "nx_sov_ledger.nx"
26const K_MAGIC_16384: i64 = 16384
27const K_MAGIC_1024: i64 = 1024
28const K_MAGIC_1048576: i64 = 1048576
29
30func w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
31func wn(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1}; sys_write(1,b,k); return 0 }
32func fc_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
33func fc_lc(c: i64) -> i64 { if c>=65 { if c<=90 { return c+32 } } return c }
34func fc_pct(a: i64, b: i64) -> i64 { if b<=0 { return 0 } return (100*a)/b }
35
36func byte_copy(dst: *u8, src: *u8, n: i64) -> i64 { var i: i64=0; while i<n { dst[i]=src[i]; i=i+1 } return 0 }
37
38// case-insensitive substring
39func has_ci(buf: *u8, len: i64, ndl: *u8) -> i64 {
40 let nl: i64 = fc_slen(ndl)
41 if nl == 0 { return 1 }
42 var i: i64 = 0
43 while i + nl <= len {
44 var j: i64 = 0; var ok: i64 = 1
45 while j < nl { if fc_lc(buf[i+j] as i64) != (ndl[j] as i64) { ok=0; j=nl } else { j=j+1 } }
46 if ok == 1 { return 1 }
47 i = i + 1
48 }
49 return 0
50}
51
52func has_write(buf: *u8, len: i64) -> i64 {
53 if has_ci(buf, len, "openat_wr" as *u8) == 1 { return 1 }
54 if has_ci(buf, len, "openat_append" as *u8) == 1 { return 1 }
55 return 0
56}
57func has_flat(buf: *u8, len: i64) -> i64 {
58 if has_ci(buf, len, ".tsv" as *u8) == 1 { return 1 }
59 if has_ci(buf, len, ".csv" as *u8) == 1 { return 1 }
60 if has_ci(buf, len, ".log" as *u8) == 1 { return 1 }
61 if has_ci(buf, len, ".txt" as *u8) == 1 { return 1 }
62 return 0
63}
64func has_sov(buf: *u8, len: i64) -> i64 {
65 if has_ci(buf, len, "ss_commit" as *u8) == 1 { return 1 }
66 if has_ci(buf, len, "ss_add(" as *u8) == 1 { return 1 }
67 if has_ci(buf, len, "nx_seg_store" as *u8) == 1 { return 1 }
68 if has_ci(buf, len, "sov_put" as *u8) == 1 { return 1 }
69 if has_ci(buf, len, "nx_sov_ledger" as *u8) == 1 { return 1 }
70 return 0
71}
72func has_interop(buf: *u8, len: i64) -> i64 {
73 if has_ci(buf, len, ".html" as *u8) == 1 { return 1 }
74 if has_ci(buf, len, ".json" as *u8) == 1 { return 1 }
75 return 0
76}
77// VIOLATION = writes a flat internal sink AND has no sovereign path
78func is_violation(buf: *u8, len: i64) -> i64 {
79 if has_write(buf, len) == 0 { return 0 }
80 if has_flat(buf, len) == 0 { return 0 }
81 if has_sov(buf, len) == 1 { return 0 }
82 return 1
83}
84
85func read_gate(path: *u8, buf: *u8, cap: i64) -> i64 {
86 let fd: i64 = sys_openat_rd(path)
87 if fd < 0 { return 0 - 1 }
88 var total: i64 = 0; var go: i64 = 1
89 while go == 1 {
90 go = 0
91 let tail: *u8 = ((buf as i64) + total) as *u8
92 let n: i64 = sys_read(fd, tail, cap - total)
93 if n > 0 { total = total + n; if total < cap { go = 1 } }
94 }
95 sys_close(fd)
96 return total
97}
98func ends_nx(name: *u8, len: i64) -> i64 {
99 if len < 3 { return 0 }
100 if name[len-3] != (0x2E as u8) { return 0 }
101 if name[len-2] != (0x6E as u8) { return 0 }
102 if name[len-1] != (0x78 as u8) { return 0 }
103 return 1
104}
105
106func main() -> i64 {
107 w("=== nx_sovereign_format_census: sovereign-vs-flat DATA persistence across runtime/_hdl_build ===\n" as *u8)
108
109 // ---------- SELF-TESTS (liar-killers on the classifier) ----------
110 let vio: *u8 = "let fd = sys_openat_wr(\"knowledge/status/x.tsv\", 420)\x00" as *u8
111 let sov: *u8 = "let ww = ss_begin(); ss_commit(prefix, ww, sys_now_us())\x00" as *u8
112 let intp: *u8 = "sys_openat_wr(\"knowledge/publish/page.html\", 420); // serve HTTP/1\x00" as *u8
113 let neg: *u8 = "the quick brown fox has no persistence at all\x00" as *u8
114 var self_ok: i64 = 1
115 if is_violation(vio, fc_slen(vio)) != 1 { self_ok = 0 } // a .tsv writer IS a violation
116 if has_sov(sov, fc_slen(sov)) != 1 { self_ok = 0 } // ss_commit IS sovereign
117 if is_violation(sov, fc_slen(sov)) != 0 { self_ok = 0 } // sovereign is NOT a violation
118 if is_violation(intp, fc_slen(intp)) != 0 { self_ok = 0 } // a served .html is interop, NOT a violation
119 if is_violation(neg, fc_slen(neg)) != 0 { self_ok = 0 } // neg control
120 let d1: i64 = is_violation(vio, fc_slen(vio))
121 let d2: i64 = is_violation(vio, fc_slen(vio))
122 if d1 != d2 { self_ok = 0 } // determinism
123 let evid: i64 = read_gate("runtime/_hdl_build/__fmt_nonexistent_zzqq.nx" as *u8, sys_mmap(64), 32)
124 if evid >= 0 { self_ok = 0 } // unreadable -> -1
125 w("[self-tests] tsv-writer=VIOLATION ss_commit=SOVEREIGN served-html=NOT-violation neg/det/evidence -> " as *u8)
126 if self_ok == 1 { w("classifier TRUSTWORTHY\n" as *u8) } else { w("classifier BROKEN\n" as *u8) }
127
128 // ---------- WALK + tally ----------
129 let dirp: *u8 = "runtime/_hdl_build" as *u8
130 let dlen: i64 = fc_slen(dirp)
131 let dfd: i64 = nx_openat(NX_AT_FDCWD, dirp, NX_O_RDONLY | NX_O_DIRECTORY, 0)
132 if dfd < 0 { w(" [RED] cannot open runtime/_hdl_build\n" as *u8); sys_exit(1); return 1 }
133 let dbuf: *u8 = sys_mmap(K_MAGIC_16384)
134 let dr_raw: *u8 = sys_mmap(NX_DIRENT_BYTES)
135 let dr: *NxDirent = dr_raw as *NxDirent
136 let path: *u8 = sys_mmap(K_MAGIC_1024)
137 let fbuf: *u8 = sys_mmap(K_MAGIC_1048576 + 16)
138
139 var nfiles: i64 = 0
140 var n_persist: i64 = 0
141 var n_sov: i64 = 0
142 var n_violation: i64 = 0
143 var n_partial: i64 = 0
144 var n_interop: i64 = 0
145
146 var batch: i64 = nx_dirent_read(dfd, dbuf, K_MAGIC_16384)
147 while batch > 0 {
148 var off: i64 = 0
149 while off < batch {
150 let next_off: i64 = nx_dirent_iter(dbuf, off, batch, dr)
151 if next_off <= 0 { off = batch + 1 }
152 if off <= batch {
153 let nmlen: i64 = nx_dirent_name_len(dr)
154 if ends_nx(dr.name, nmlen) == 1 {
155 byte_copy(path, dirp, dlen)
156 path[dlen] = 47 as u8
157 byte_copy(((path as i64)+dlen+1) as *u8, dr.name, nmlen)
158 path[dlen+1+nmlen] = 0 as u8
159 nfiles = nfiles + 1
160 let flen: i64 = read_gate(path, fbuf, K_MAGIC_1048576)
161 if flen >= 0 {
162 let wflat: i64 = has_write(fbuf, flen) * has_flat(fbuf, flen)
163 let sv: i64 = has_sov(fbuf, flen)
164 let itp: i64 = has_write(fbuf, flen) * has_interop(fbuf, flen)
165 var persists: i64 = 0
166 if wflat == 1 { persists = 1 }
167 if sv == 1 { persists = 1 }
168 if persists == 1 { n_persist = n_persist + 1 }
169 if wflat == 1 { if sv == 1 { n_partial = n_partial + 1 } }
170 if wflat == 1 { if sv == 0 { n_violation = n_violation + 1 } }
171 if sv == 1 { if wflat == 0 { n_sov = n_sov + 1 } }
172 if itp == 1 { n_interop = n_interop + 1 }
173 }
174 }
175 off = next_off
176 }
177 }
178 batch = nx_dirent_read(dfd, dbuf, K_MAGIC_16384)
179 }
180 sys_close(dfd)
181
182 w("scanned " as *u8); wn(nfiles); w(" .nx; data-persisting = " as *u8); wn(n_persist); w("\n" as *u8)
183 w(" SOVEREIGN (seg_store, no flat) = " as *u8); wn(n_sov); w("\n" as *u8)
184 w(" PARTIAL (flat + seg_store) = " as *u8); wn(n_partial); w("\n" as *u8)
185 w(" VIOLATION (flat internal, NO sov)= " as *u8); wn(n_violation)
186 w(" <== THE DEBT (floor; .json/.html interop excluded)\n" as *u8)
187 w(" interop-boundary (.html/.json) = " as *u8); wn(n_interop); w(" (legitimate: served/exported)\n" as *u8)
188 let sovpct: i64 = fc_pct(n_sov, n_sov + n_violation)
189 w(" sovereign share of internal state = " as *u8); wn(sovpct); w("% (target 1000)\n" as *u8)
190
191 // ---------- REGRESSION GATE (baseline stored SOVEREIGNLY -- dogfoods nx_sov_ledger, NO tsv) ----------
192 let base: *i64 = sys_mmap(8*8) as *i64
193 let nb: i64 = sov_get_ints("knowledge/store/fmtcensus" as *u8, "fmt:baseline" as *u8, base, 4)
194 var regress: i64 = 0
195 var had_base: i64 = 0
196 if nb >= 3 {
197 had_base = 1
198 if n_violation > base[2] { regress = 1 } // a NEW flat-file writer since baseline
199 }
200 if had_base == 0 {
201 let cur: *i64 = sys_mmap(8*4) as *i64
202 cur[0] = n_persist; cur[1] = n_sov; cur[2] = n_violation
203 sov_put_ints("knowledge/store/fmtcensus" as *u8, "fmt:baseline" as *u8, cur, 3)
204 w(" [baseline seeded SOVEREIGNLY -> knowledge/store/fmtcensus (seg_store, no tsv)]\n" as *u8)
205 }
206 if had_base == 1 {
207 w(" baseline violation=" as *u8); wn(base[2])
208 if regress == 1 { w(" -> [REGRESSION] new flat-file writer(s) added since baseline -> RED\n" as *u8) }
209 if regress == 0 { w(" -> [ok] no new flat-file writers (debt held or reduced)\n" as *u8) }
210 }
211
212 var green: i64 = 1
213 if self_ok != 1 { green = 0 }
214 if regress != 0 { green = 0 }
215 if green == 1 {
216 w("=== verdict: GREEN (classifier trustworthy; no new flat-file debt). The VIOLATION count IS the migration worklist. ===\n" as *u8)
217 sys_exit(0); return 0
218 }
219 w("=== verdict: RED (classifier broken OR new flat-file writer added -- migrate it to nx_sov_ledger/nx_seg_store) ===\n" as *u8)
220 sys_exit(1); return 1
221}