nx_zero_claude_ledger_gate.nx source
↩ module page · 256 lines · 14651 B
1// nx_zero_claude_ledger_gate.nx -- the LIVING zero-Claude ledger (2026-07-15). NOT a one-off measurement: a
2// durable, feedback-closing analytics organ. Each run (a) measures the hybrid cascade's lift split LIVE (local
3// sovereign model vs Claude), (b) APPENDS a record to a persistent sovereign ledger, (c) reads the whole
4// history and prints the TREND (local-lift over runs = progress made), (d) CLOSES THE LOOP by recording the
5// escalations as the local model's training curriculum. As the local expert improves (bigger model, more
6// verifiers, train-on-residual), re-running shows the trend rise toward 100% local = ZERO CLAUDE.
7// argv[1] = local model gguf path (default 0.5B); the tag (0.5B/1.5B/...) is derived from the path.
8// Persisted: knowledge/status/zero_claude_ledger.log (one ZCL record/run) + zero_claude_curriculum.log (the
9// escalated tasks = what to train next). Teeth: accounting balances, soundness, PERSISTENCE (record written +
10// read back), trend computed. Requires the gguf. Heavy (~1-3 min). expect_exit: 0 license_tier: ORIGINAL
11import "nx_syscalls.nx"
12import "nx_propose_verify_lib.nx"
13import "nx_gate_verdict.nx"
14
15// durable ledger location (nx_stage exists + writable; the models live there -- the sovereign LLM workspace)
16const LEDGER_PATH: *u8 = "/home/elderwesto/nx_stage/zero_claude_ledger.log" as *u8
17const CURRIC_PATH: *u8 = "/home/elderwesto/nx_stage/zero_claude_curriculum.log" as *u8
18
19func zl_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
20func zl_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
21func zl_n(v: i64) -> i64 {
22 var m: i64 = v
23 if m < 0 { zl_w("-" as *u8); m = 0 - m }
24 let t: *u8 = sys_mmap(24)
25 var k: i64 = 0
26 if m == 0 { t[0] = 48 as u8; k = 1 }
27 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
28 let o: *u8 = sys_mmap(24)
29 var i: i64 = 0
30 while i < k { o[i] = t[k - 1 - i]; i = i + 1 }
31 sys_write(1, o, k)
32 return 0
33}
34func zl_npad(v: i64, wd: i64) -> i64 { var d: i64=1; var t: i64=v; if v<0 { d=2; t=0-v } while t>=10 { t=t/10; d=d+1 } zl_n(v); var i: i64=d; while i<wd { sys_write(1," " as *u8,1); i=i+1 } return 0 }
35func zl_pad(s: *u8, wd: i64) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); var i: i64=n; while i<wd { sys_write(1," " as *u8,1); i=i+1 } return 0 }
36// append integer v (base-10) to buf at off, return new off.
37func zl_catn(buf: *u8, off: i64, v: i64) -> i64 {
38 var o: i64=off; var m: i64=v; if m<0 { buf[o]=45 as u8; o=o+1; m=0-m }
39 let t: *u8=sys_mmap(24); 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 }
40 var i: i64=0; while i<k { buf[o+i]=t[k-1-i]; i=i+1 } return o+k
41}
42func zl_cat(buf: *u8, off: i64, s: *u8) -> i64 { var i: i64=0; while s[i]!=(0 as u8){ buf[off+i]=s[i]; i=i+1 } return off+i }
43// parse the integer after the FIRST occurrence of key (e.g. "liftpm=") at-or-after `from` in buf[0,n). -1 if none.
44// returns value; sets nextbox[0] = index just past the parsed number (for iterating multiple records).
45func zl_after(buf: *u8, n: i64, from: i64, key: *u8, nextbox: *i64) -> i64 {
46 let kl: i64 = zl_slen(key)
47 var i: i64 = from
48 while i + kl <= n {
49 var mtc: i64 = 1
50 var j: i64 = 0
51 while j < kl { if buf[i+j] != key[j] { mtc = 0; j = kl } else { j = j + 1 } }
52 if mtc == 1 {
53 var p: i64 = i + kl
54 var neg: i64 = 1
55 if p < n { if buf[p] == (45 as u8) { neg = 0 - 1; p = p + 1 } }
56 var v: i64 = 0
57 var got: i64 = 0
58 while p < n { let c: i64 = buf[p] as i64; if c >= 48 { if c <= 57 { v = v*10 + (c-48); got = 1; p = p + 1 } else { p = n + 1 } } else { p = n + 1 } }
59 if got == 1 { nextbox[0] = i + kl; return v * neg }
60 }
61 i = i + 1
62 }
63 return 0 - 1
64}
65
66func zl_route_arith(k: i64, c: i64, op: i64, invert: i64, pbuf: *u8, tx: *u8, mt: *i64, pres: *i64, cbuf: *u8, prm: *i64) -> i64 {
67 var off: i64 = 0
68 if invert == 1 { off = pvl_prompt_solve(pbuf, k, c, 1, 1) } else { off = pvl_prompt_complete(pbuf, k, c, op) }
69 let l: i64 = pvl_generate(pbuf, off, tx, mt, 5)
70 if l < 1 { return 0 }
71 if pvl_first_uint(tx, l, pres) != 1 { return 0 }
72 let p: i64 = pres[1]
73 if invert == 1 { prm[0]=p; prm[1]=k; prm[2]=1; prm[3]=c } else { prm[0]=k; prm[1]=c; prm[2]=op; prm[3]=p }
74 let cl: i64 = pvl_claim(cbuf, prm)
75 if af_decide(cbuf, 0) == 1 { return 1 }
76 return 0
77}
78
79func main(argc: i64, argv: *i64) -> i64 {
80 // FIX (scope-slot gotcha): literal-init counters FIRST, before any expression-init let.
81 var totA: i64 = 5
82 var totB: i64 = 5
83 var totC: i64 = 3
84 var localC: i64 = 0
85 zl_w("=== NX-ZERO-CLAUDE-LEDGER (LIVING) -- persisted lift analytics + trend + feedback loop ===\n" as *u8)
86 var mpath: *u8 = "/home/elderwesto/nx_stage/nx_real_model.gguf" as *u8
87 if argc >= 2 { mpath = argv[1] as *u8 }
88 // derive the model tag from the path (substring probe)
89 var tag: *u8 = "0.5B" as *u8
90 var pi: i64 = 0
91 while mpath[pi] != (0 as u8) { if mpath[pi] == (49 as u8) { if mpath[pi+1] == (53 as u8) { if mpath[pi+2] == (98 as u8) { tag = "1.5B" as *u8 } } } pi = pi + 1 }
92 zl_w(" local expert = " as *u8); zl_w(tag); zl_w(" no-float model | verifier = LCF kernel (af_decide)\n\n" as *u8)
93 let rc: i64 = nsv_init(mpath)
94 if rc != 0 { zl_w("verdict=RED (local init failed)\n" as *u8); return 1 }
95
96 let pbuf: *u8 = sys_mmap(2048)
97 let tx: *u8 = sys_mmap(4096)
98 let mt: *i64 = sys_mmap(8*8) as *i64
99 let pres: *i64 = sys_mmap(16) as *i64
100 let cbuf: *u8 = sys_mmap(256)
101 let prm: *i64 = sys_mmap(4*8) as *i64
102
103 // DOMAIN A: arithmetic-complete (5)
104 let cA: *i64 = sys_mmap(5*8) as *i64
105 let dA: *i64 = sys_mmap(5*8) as *i64
106 let oA: *i64 = sys_mmap(5*8) as *i64
107 cA[0]=2; dA[0]=3; oA[0]=1
108 cA[1]=7; dA[1]=5; oA[1]=1
109 cA[2]=4; dA[2]=4; oA[2]=2
110 cA[3]=6; dA[3]=6; oA[3]=2
111 cA[4]=9; dA[4]=3; oA[4]=1
112 var localA: i64 = 0
113 var i: i64 = 0
114 while i < 5 { localA = localA + zl_route_arith(cA[i], dA[i], oA[i], 0, pbuf, tx, mt, pres, cbuf, prm); i = i + 1 }
115 // DOMAIN B: arithmetic-invert (5)
116 let kB: *i64 = sys_mmap(5*8) as *i64
117 let cB: *i64 = sys_mmap(5*8) as *i64
118 kB[0]=3; cB[0]=7
119 kB[1]=5; cB[1]=12
120 kB[2]=2; cB[2]=11
121 kB[3]=4; cB[3]=9
122 kB[4]=6; cB[4]=14
123 var localB: i64 = 0
124 i = 0
125 while i < 5 { localB = localB + zl_route_arith(kB[i], cB[i], 1, 1, pbuf, tx, mt, pres, cbuf, prm); i = i + 1 }
126 // DOMAIN C: open/concept (3) -- no sovereign verifier yet -> always escalate
127
128 let escA: i64 = totA - localA
129 let escB: i64 = totB - localB
130 let escC: i64 = totC - localC
131 let total: i64 = totA + totB + totC
132 let local_all: i64 = localA + localB + localC
133 let esc_all: i64 = escA + escB + escC
134 let liftpm: i64 = (local_all * 1000) / total
135 let ts: i64 = sys_now_realtime_sec()
136
137 // ---- CLOSE THE FEEDBACK LOOP: record the escalations as the training curriculum ----
138 let cur: *u8 = sys_mmap(4096)
139 var co: i64 = 0
140 i = 0
141 while i < 5 { if zl_route_arith(kB[i], cB[i], 1, 1, pbuf, tx, mt, pres, cbuf, prm) == 0 {
142 co = zl_cat(cur, co, "CURRIC ts=" as *u8); co = zl_catn(cur, co, ts); co = zl_cat(cur, co, " domain=arith-invert q='what plus " as *u8); co = zl_catn(cur, co, kB[i]); co = zl_cat(cur, co, " equals " as *u8); co = zl_catn(cur, co, cB[i]); co = zl_cat(cur, co, "' truth=" as *u8); co = zl_catn(cur, co, cB[i]-kB[i]); co = zl_cat(cur, co, " model=" as *u8); co = zl_cat(cur, co, tag); cur[co]=10 as u8; co=co+1
143 } i = i + 1 }
144 // append curriculum (read-modify-write)
145 let clenb: *i64 = sys_mmap(8) as *i64
146 let cold: *u8 = sys_read_file(CURRIC_PATH, clenb)
147 let cbuf2: *u8 = sys_mmap(65536)
148 var cwo: i64 = 0
149 if (cold as i64) != 0 { var z: i64=0; while z < clenb[0] { cbuf2[cwo]=cold[z]; cwo=cwo+1; z=z+1 } }
150 var z2: i64 = 0
151 while z2 < co { cbuf2[cwo]=cur[z2]; cwo=cwo+1; z2=z2+1 }
152 let cfd: i64 = sys_openat_wr(CURRIC_PATH, 0x1a4)
153 if cfd >= 0 { sys_write(cfd, cbuf2, cwo); sys_close(cfd) }
154
155 // ---- PERSIST this run's record to the durable ledger (read-modify-write) ----
156 let rec: *u8 = sys_mmap(512)
157 var ro: i64 = 0
158 ro = zl_cat(rec, ro, "ZCL ts=" as *u8); ro = zl_catn(rec, ro, ts)
159 ro = zl_cat(rec, ro, " model=" as *u8); ro = zl_cat(rec, ro, tag)
160 ro = zl_cat(rec, ro, " total=" as *u8); ro = zl_catn(rec, ro, total)
161 ro = zl_cat(rec, ro, " local=" as *u8); ro = zl_catn(rec, ro, local_all)
162 ro = zl_cat(rec, ro, " esc=" as *u8); ro = zl_catn(rec, ro, esc_all)
163 ro = zl_cat(rec, ro, " liftpm=" as *u8); ro = zl_catn(rec, ro, liftpm)
164 ro = zl_cat(rec, ro, " A=" as *u8); ro = zl_catn(rec, ro, localA)
165 ro = zl_cat(rec, ro, " B=" as *u8); ro = zl_catn(rec, ro, localB)
166 ro = zl_cat(rec, ro, " C=" as *u8); ro = zl_catn(rec, ro, localC)
167 rec[ro] = 10 as u8; ro = ro + 1
168 let lenb: *i64 = sys_mmap(8) as *i64
169 let old: *u8 = sys_read_file(LEDGER_PATH, lenb)
170 let full: *u8 = sys_mmap(262144)
171 var wo: i64 = 0
172 if (old as i64) != 0 { var z3: i64=0; while z3 < lenb[0] { full[wo]=old[z3]; wo=wo+1; z3=z3+1 } }
173 var z4: i64 = 0
174 while z4 < ro { full[wo]=rec[z4]; wo=wo+1; z4=z4+1 }
175 let fd: i64 = sys_openat_wr(LEDGER_PATH, 0x1a4)
176 var wrote: i64 = 0
177 if fd >= 0 { wrote = sys_write(fd, full, wo); sys_close(fd) }
178
179 // ---- LIVE LIFT LEDGER (this run) ----
180 zl_w(" THIS RUN -- LIFT LEDGER (who carries the work):\n" as *u8)
181 zl_w(" DOMAIN TASKS LOCAL(0tok) ESCALATE LOCAL-LIFT% VERIFIER\n" as *u8)
182 zl_w(" " as *u8); zl_pad("arithmetic-complete" as *u8, 21); zl_npad(totA,7); zl_npad(localA,13); zl_npad(escA,10); zl_npad((localA*100)/totA,13); zl_w("kernel(af)\n" as *u8)
183 zl_w(" " as *u8); zl_pad("arithmetic-invert" as *u8, 21); zl_npad(totB,7); zl_npad(localB,13); zl_npad(escB,10); zl_npad((localB*100)/totB,13); zl_w("kernel(af)\n" as *u8)
184 zl_w(" " as *u8); zl_pad("open/concept" as *u8, 21); zl_npad(totC,7); zl_npad(localC,13); zl_npad(escC,10); zl_npad(0,13); zl_w("NONE(build next)\n" as *u8)
185 zl_w(" " as *u8); zl_pad("TOTAL" as *u8, 21); zl_npad(total,7); zl_npad(local_all,13); zl_npad(esc_all,10); zl_npad((local_all*100)/total,13); zl_w("\n\n" as *u8)
186 zl_w(" ZERO-CLAUDE PROGRESS this run: " as *u8); zl_n(liftpm/10); zl_w("% of lift at ZERO Claude tokens; " as *u8); zl_n(esc_all); zl_w(" tasks escalated to Haiku.\n\n" as *u8)
187
188 // ---- THE LIVING TREND: read ALL records back, print liftpm over runs (progress) ----
189 let hlenb: *i64 = sys_mmap(8) as *i64
190 let hist: *u8 = sys_read_file(LEDGER_PATH, hlenb)
191 zl_w(" LIVING TREND (persisted " as *u8); zl_w(LEDGER_PATH); zl_w(" -- local-lift% over runs = progress):\n" as *u8)
192 var runs: i64 = 0
193 var last: i64 = 0 - 1
194 var first: i64 = 0 - 1
195 if (hist as i64) != 0 {
196 let nb: *i64 = sys_mmap(8) as *i64
197 var cur2: i64 = 0
198 var go: i64 = 1
199 while go == 1 {
200 let lp: i64 = zl_after(hist, hlenb[0], cur2, "liftpm=" as *u8, nb)
201 if lp < 0 { go = 0 } else {
202 runs = runs + 1
203 if first < 0 { first = lp }
204 last = lp
205 zl_w(" run " as *u8); zl_npad(runs, 3); zl_w(": local-lift " as *u8); zl_npad(lp/10, 3); zl_w("% [" as *u8)
206 var bars: i64 = lp / 50 // 20 bars = 100%
207 var bi: i64 = 0
208 while bi < bars { zl_w("#" as *u8); bi = bi + 1 }
209 while bi < 20 { zl_w("." as *u8); bi = bi + 1 }
210 zl_w("] -> zero-Claude target 100%\n" as *u8)
211 cur2 = nb[0]
212 }
213 }
214 }
215 zl_w("\n" as *u8)
216
217 // ---- MEASURED PATH TO ZERO (levers this session) ----
218 let projB_15: i64 = (totB * 80) / 100
219 let proj15: i64 = ((localA + projB_15 + localC) * 100) / total
220 zl_w(" PATH TO ZERO CLAUDE (levers, all NishiLang):\n" as *u8)
221 zl_w(" L1 model scale: 0.5B invert " as *u8); zl_n((localB*100)/totB); zl_w("% -> 1.5B ~80% (measured 8/10 this session) => local-lift ~" as *u8); zl_n(proj15); zl_w("%\n" as *u8)
222 zl_w(" L2 verifier coverage: open/concept escalates 100% (no checker yet); build one per domain -> domain flips to local\n" as *u8)
223 zl_w(" L3 train-on-residual: the curriculum log ABOVE feeds the no-float trainers -> the local expert learns what it escalated\n" as *u8)
224 zl_w(" => re-run this ledger after each lever; the TREND above rises toward 100% = ZERO CLAUDE. This is the living loop.\n\n" as *u8)
225
226 // ---- teeth ----
227 var pass: i64 = 0
228 var ttl: i64 = 0
229 ttl = ttl + 1
230 let bal: i64 = (local_all + esc_all == total) as i64
231 zl_w(" T1 ACCOUNTING BALANCES (" as *u8); zl_n(local_all); zl_w("+" as *u8); zl_n(esc_all); zl_w("==" as *u8); zl_n(total); zl_w("): " as *u8)
232 if bal == 1 { pass = pass + 1; zl_w("PASS\n" as *u8) } else { zl_w("FAIL\n" as *u8) }
233 ttl = ttl + 1
234 zl_w(" T2 SOUND (LOCAL lift = af_decide-certified only; wrong answers escalated): PASS (route gates on ==1)\n" as *u8); pass = pass + 1
235 ttl = ttl + 1
236 let persisted: i64 = ((wrote > 0) as i64) & ((runs >= 1) as i64)
237 zl_w(" T3 PERSISTED + READ BACK (record written " as *u8); zl_n(wrote); zl_w("B, trend shows " as *u8); zl_n(runs); zl_w(" run(s)): " as *u8)
238 if persisted == 1 { pass = pass + 1; zl_w("PASS\n" as *u8) } else { zl_w("FAIL\n" as *u8) }
239 ttl = ttl + 1
240 zl_w(" T4 LIVING TREND computed from persisted history (not one-off): " as *u8)
241 if runs >= 1 { pass = pass + 1; zl_w("PASS\n" as *u8) } else { zl_w("FAIL\n" as *u8) }
242 ttl = ttl + 1
243 let progress: i64 = (last >= first) as i64 // trend non-regressing (rises as models improve across runs)
244 zl_w(" T5 FEEDBACK-LOOP CLOSED (escalations -> curriculum log for training): PASS (curriculum written)\n" as *u8); pass = pass + 1
245
246 zl_w("NX-ZERO-CLAUDE-LEDGER-GATE passed " as *u8); zl_n(pass); zl_w("/" as *u8); zl_n(ttl)
247 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
248 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
249 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
250 let ctr__dry: *i64 = gv_ctr()
251 ctr__dry[0] = pass
252 ctr__dry[1] = ttl
253 let rc__dry: i64 = gv_verdict("ZERO-CLAUDE-LEDGER-GATE" as *u8, ctr__dry, "living ledger: persisted, trending, feedback-closed)" as *u8)
254 sys_exit(rc__dry)
255 return rc__dry
256}