code wiki / _hdl_build / nx_eff_scan.nx
nx_eff_scan.nx source
↩ module page · 278 lines · 12473 B
1// nx_eff_scan.nx -- THE efficiency-telemetry scanner CLI (eff lane F731, 2026-07-18).
2// Thin CLI over nx_eff_lib (the shared measurement+conversion core -- DRY, rule 15). Emits MEASURED
3// per-day spend rows (time via worklog gaps, tokens via transcript needles) + money/energy via the
4// lib's DECLARED coefficients, with the estimator method + rates printed in the ENV envelope so a
5// human sees exactly what produced every number (operator: "non-fake numbers ... real estimates").
6// nx_eff_scan -> fast usage banner + exit 0 (build-time run is instant)
7// nx_eff_scan selftest -> fixture gate (exact counts + neg-controls, gv verdict)
8// nx_eff_scan scan [worklog] [trdir] [window] -> real scan (defaults; win clamped 1..28)
9// Row: ROW d<day> <day> <actions> <mcp> <shell> <fileops> <active_sec> <tok_in> <tok_out> <tok_cr> <tok_cw> <trfiles>
10// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
11import "nx_eff_lib.nx"
12import "nx_gate_verdict.nx"
13
14const ES_WL_DEF: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder/memory/worklog/worklog.tsv"
15const ES_TR_DEF: *u8 = "/mnt/c/Users/elder/.claude/projects/C--Users-elder"
16
17func es_emit(dayw: *i64, nowday: i64, win: i64, env: *i64, modacc: *i64) -> i64 {
18 gv_puts("EFF-SCAN v1\n" as *u8)
19 gv_puts("ENV window_days=" as *u8)
20 gv_num(win)
21 gv_puts(" nowday=" as *u8)
22 gv_num(nowday)
23 gv_puts(" wl_rows=" as *u8)
24 gv_num(env[ES_E_WLR])
25 gv_puts(" wl_bytes=" as *u8)
26 gv_num(env[ES_E_WLB])
27 gv_puts(" tr_files=" as *u8)
28 gv_num(env[ES_E_TRF])
29 gv_puts(" tr_trunc=" as *u8)
30 gv_num(env[ES_E_TRUNC])
31 gv_puts(" tr_bytes=" as *u8)
32 gv_num(env[ES_E_TRB])
33 gv_puts(" active_estimator=gap300-strict token_method=needle-sum per_file_cap=33554432 price_cents_per_Mtok_in=1500 wh_per_Mtok=400\n" as *u8)
34 var idx: i64 = win - 1
35 var ta: i64 = 0
36 var ti_: i64 = 0
37 var to_: i64 = 0
38 var tcr: i64 = 0
39 var tcw: i64 = 0
40 var tsec: i64 = 0
41 while idx >= 0 {
42 let base: i64 = idx * ES_NF
43 let any: i64 = dayw[base] + dayw[base+9]
44 if any > 0 {
45 gv_puts("ROW d" as *u8)
46 gv_num(nowday - idx)
47 gv_puts(" " as *u8)
48 gv_num(nowday - idx)
49 var f: i64 = 0
50 while f < ES_NF {
51 gv_puts(" " as *u8)
52 gv_num(dayw[base + f])
53 f = f + 1
54 }
55 gv_puts("\n" as *u8)
56 ta = ta + dayw[base]
57 tsec = tsec + dayw[base+4]
58 ti_ = ti_ + dayw[base+5]
59 to_ = to_ + dayw[base+6]
60 tcr = tcr + dayw[base+7]
61 tcw = tcw + dayw[base+8]
62 }
63 idx = idx - 1
64 }
65 let cost: i64 = efl_cost_cents(ti_, to_, tcr, tcw)
66 let wh: i64 = efl_energy_wh(ti_, to_, tcr, tcw)
67 gv_puts("TOT actions=" as *u8)
68 gv_num(ta)
69 gv_puts(" active_hours=" as *u8)
70 gv_num(tsec / 3600)
71 gv_puts(" tok_in=" as *u8)
72 gv_num(ti_)
73 gv_puts(" tok_out=" as *u8)
74 gv_num(to_)
75 gv_puts(" tok_cache_read=" as *u8)
76 gv_num(tcr)
77 gv_puts(" tok_cache_write=" as *u8)
78 gv_num(tcw)
79 gv_puts(" cost_cents=" as *u8)
80 gv_num(cost)
81 gv_puts(" energy_wh=" as *u8)
82 gv_num(wh)
83 gv_puts(" (money+energy = ESTIMATE via declared rates above)\n" as *u8)
84 var realcost: i64 = 0
85 var t: i64 = 0
86 while t < EFL_NTIER {
87 let mb: i64 = t * 4
88 let tc: i64 = efl_cost_tier(t, modacc[mb], modacc[mb+1], modacc[mb+2], modacc[mb+3])
89 realcost = realcost + tc
90 gv_puts("MODEL m" as *u8)
91 gv_num(t)
92 gv_puts(" " as *u8)
93 gv_num(modacc[mb])
94 gv_puts(" " as *u8)
95 gv_num(modacc[mb+1])
96 gv_puts(" " as *u8)
97 gv_num(modacc[mb+2])
98 gv_puts(" " as *u8)
99 gv_num(modacc[mb+3])
100 gv_puts(" cost_cents=" as *u8)
101 gv_num(tc)
102 gv_puts("\n" as *u8)
103 t = t + 1
104 }
105 gv_puts("REALCOST cents=" as *u8)
106 gv_num(realcost)
107 gv_puts(" vs flat_ceiling=" as *u8)
108 gv_num(cost)
109 gv_puts(" (per-model attributed; m0=fable m1=opus m2=sonnet m3=haiku m4=other)\n" as *u8)
110 return 0
111}
112// fixture helpers (selftest only)
113func es_put_file(path: *u8, b: *u8, n: i64) -> i64 {
114 let fd: i64 = sys_openat_wr(path, 420)
115 if fd < 0 { return 0 - 1 }
116 sys_write(fd, b, n)
117 sys_close(fd)
118 return 0
119}
120func es_cat(d: *u8, o: i64, s: *u8) -> i64 { var i: i64 = 0; var oo: i64 = o; while s[i] != (0 as u8) { d[oo] = s[i]; oo = oo + 1; i = i + 1 } return oo }
121func es_catn(d: *u8, o: i64, v: i64) -> i64 {
122 let t: *u8 = sys_mmap(28)
123 var m: i64 = v
124 var k: i64 = 0
125 if m == 0 { t[0] = ES_ZERO as u8; k = 1 }
126 while m > 0 { t[k] = (ES_ZERO + (m % 10)) as u8; m = m / 10; k = k + 1 }
127 var oo: i64 = o
128 var i: i64 = 0
129 while i < k { d[oo] = t[k-1-i]; oo = oo + 1; i = i + 1 }
130 return oo
131}
132func es_selftest() -> i64 {
133 let ctr: *i64 = gv_ctr()
134 gv_head("nx_eff_scan selftest -- fixture worklog + transcript, exact counts + neg-controls" as *u8)
135 let now: i64 = sys_now_realtime_sec()
136 let base_e: i64 = (now / ES_DAYSEC) * ES_DAYSEC + 1000
137 let wb: *u8 = sys_mmap(4096)
138 var o: i64 = 0
139 o = es_catn(wb, o, base_e)
140 o = es_cat(wb, o, "\tingest\tmcp__nishi__nx_health\tx\n" as *u8)
141 o = es_catn(wb, o, base_e + 100)
142 o = es_cat(wb, o, "\tingest\tPowerShell\twsl something\n" as *u8)
143 o = es_catn(wb, o, base_e + 900)
144 o = es_cat(wb, o, "\tingest\tRead\tsome/file.md\n" as *u8)
145 o = es_cat(wb, o, "#garbage line with no epoch\n" as *u8)
146 es_put_file("/tmp/eff_gate_wl.tsv" as *u8, wb, o)
147 sys_mkdir("/tmp/eff_gate_tr" as *u8, 511)
148 let tb: *u8 = sys_mmap(4096)
149 var o2: i64 = 0
150 o2 = es_cat(tb, o2, "{\x22usage\x22:{\x22input_tokens\x22:100,\x22cache_read_input_tokens\x22:7,\x22cache_creation_input_tokens\x22:3,\x22output_tokens\x22:25}}\n" as *u8)
151 o2 = es_cat(tb, o2, "{\x22reinput_tokens\x22:999,\x22xoutput_tokens\x22:888}\n" as *u8)
152 es_put_file("/tmp/eff_gate_tr/fix.jsonl" as *u8, tb, o2)
153 let env: *i64 = sys_mmap(ES_ENV_SLOTS * 8) as *i64
154 let wlb: *u8 = sys_mmap(ES_CAP_WL)
155 let wn: i64 = es_read_bounded("/tmp/eff_gate_wl.tsv" as *u8, wlb, ES_CAP_WL, env)
156 env[ES_E_WLB] = wn
157 let maxe: i64 = es_wl_maxepoch(wlb, wn)
158 let nowday: i64 = maxe / ES_DAYSEC
159 let dayw: *i64 = sys_mmap(ES_WIN_MAX * ES_NF * 8) as *i64
160 es_wl_scan(wlb, wn, dayw, nowday, ES_WIN_DEF, env)
161 let tbuf: *u8 = sys_mmap(ES_CAP_TR)
162 let modacc: *i64 = sys_mmap(EFL_NTIER * 4 * 8) as *i64
163 es_tr_scan("/tmp/eff_gate_tr" as *u8, tbuf, dayw, nowday, ES_WIN_DEF, env, modacc)
164 var c1: i64 = 0
165 if dayw[0] == 3 { c1 = 1 }
166 gv_check("T1 actions==3" as *u8, c1, ctr)
167 var c2: i64 = 0
168 if dayw[1] == 1 { c2 = 1 }
169 gv_check("T2 mcp==1" as *u8, c2, ctr)
170 var c3: i64 = 0
171 if dayw[2] == 1 { c3 = 1 }
172 gv_check("T3 shell==1" as *u8, c3, ctr)
173 var c4: i64 = 0
174 if dayw[3] == 1 { c4 = 1 }
175 gv_check("T4 fileops==1" as *u8, c4, ctr)
176 var c5: i64 = 0
177 if dayw[4] == 100 { c5 = 1 }
178 gv_check("T5 active_sec==100 (800s gap excluded by gap300-strict)" as *u8, c5, ctr)
179 var c6: i64 = 0
180 if dayw[5] == 100 { c6 = 1 }
181 gv_check("T6 tok_in==100 (decoy reinput_tokens NOT counted)" as *u8, c6, ctr)
182 var c7: i64 = 0
183 if dayw[6] == 25 { c7 = 1 }
184 gv_check("T7 tok_out==25 (decoy xoutput_tokens NOT counted)" as *u8, c7, ctr)
185 var c8: i64 = 0
186 if dayw[7] == 7 { c8 = 1 }
187 gv_check("T8 cache_read==7 (not double-counted into tok_in)" as *u8, c8, ctr)
188 var c9: i64 = 0
189 if dayw[8] == 3 { c9 = 1 }
190 gv_check("T9 cache_write==3" as *u8, c9, ctr)
191 var c10: i64 = 0
192 if env[ES_E_WLR] == 3 { c10 = 1 }
193 gv_check("T10 NEG garbage line ignored (wl_rows==3)" as *u8, c10, ctr)
194 let bad: i64 = es_read_bounded("/tmp/eff_gate_nonexistent_xyz" as *u8, wlb, 4096, env)
195 var c11: i64 = 0
196 if bad < 0 { c11 = 1 }
197 gv_check("T11 NEG unreadable path -> -1 fail-closed" as *u8, c11, ctr)
198 var c12: i64 = 0
199 if dayw[9] == 1 { c12 = 1 }
200 gv_check("T12 transcript file counted once" as *u8, c12, ctr)
201 // T13 conversions: cost = (100*100 + 25*500 + 7*10 + 3*125)*1500/1e8 = (10000+12500+70+375)*1500/1e8
202 // = 22945*1500/1e8 = 34417500/1e8 = 0 cents (sub-cent at fixture scale) -> proves integer floor honest
203 let cost: i64 = efl_cost_cents(100, 25, 7, 3)
204 var c13: i64 = 0
205 if cost == 0 { c13 = 1 }
206 gv_check("T13 cost integer-floor at fixture scale (22945bp -> 0 cents, no fake rounding)" as *u8, c13, ctr)
207 // T14 conversion scale check: 1M input tok -> 1500 cents ($15.00) exactly
208 let cost2: i64 = efl_cost_cents(1000000, 0, 0, 0)
209 var c14: i64 = 0
210 if cost2 == 1500 { c14 = 1 }
211 gv_check("T14 cost 1M-input==1500c ($15.00/Mtok input, declared rate)" as *u8, c14, ctr)
212 // T15-T19 per-model attribution: fixture no-model usage -> OTHER; a direct model-fixture buckets fable+sonnet
213 var c15: i64 = 0
214 if modacc[EFL_T_OTHER*4] == 100 { c15 = 1 }
215 gv_check("T15 no-model usage -> OTHER tier (in==100)" as *u8, c15, ctr)
216 let mfix: *u8 = sys_mmap(4096)
217 var mo: i64 = 0
218 mo = es_cat(mfix, mo, "{\x22model\x22:\x22claude-fable-5\x22,\x22usage\x22:{\x22input_tokens\x22:1000000}}\n" as *u8)
219 mo = es_cat(mfix, mo, "{\x22model\x22:\x22claude-sonnet-5\x22,\x22usage\x22:{\x22input_tokens\x22:2000000}}\n" as *u8)
220 let modacc2: *i64 = sys_mmap(EFL_NTIER * 4 * 8) as *i64
221 es_tr_tokens_bymodel(mfix, mo, modacc2)
222 var c16: i64 = 0
223 if modacc2[EFL_T_FABLE*4] == 1000000 { c16 = 1 }
224 gv_check("T16 fable line -> FABLE tier (in==1M)" as *u8, c16, ctr)
225 var c17: i64 = 0
226 if modacc2[EFL_T_SONNET*4] == 2000000 { c17 = 1 }
227 gv_check("T17 sonnet line -> SONNET tier (in==2M)" as *u8, c17, ctr)
228 var c18: i64 = 0
229 if efl_cost_tier(EFL_T_FABLE, 1000000, 0, 0, 0) == 1000 { c18 = 1 }
230 gv_check("T18 fable 1M-input cost==1000c ($10/Mtok fetched rate)" as *u8, c18, ctr)
231 var c19: i64 = 0
232 if efl_cost_tier(EFL_T_SONNET, 2000000, 0, 0, 0) == 600 { c19 = 1 }
233 gv_check("T19 sonnet 2M-input cost==600c ($3/Mtok)" as *u8, c19, ctr)
234 let db2: *u8 = sys_mmap(1024)
235 let dn2: i64 = es_cat(db2, 0, "{\x22message\x22:{\x22usage\x22:{\x22input_tokens\x22:50}},\x22usage\x22:{\x22input_tokens\x22:50}}\n" as *u8)
236 let dw2: *i64 = sys_mmap(ES_WIN_MAX * ES_NF * 8) as *i64
237 es_tr_tokens(db2, dn2, dw2, 0)
238 var c20: i64 = 0
239 if dw2[5] == 50 { c20 = 1 }
240 gv_check("T20 double-usage line counted ONCE (dedup fixes the 2x double-count)" as *u8, c20, ctr)
241 let rc: i64 = gv_verdict("EFF-SCAN-GATE" as *u8, ctr, "counts + neg-controls + conversion KAT + per-model attribution + dedup" as *u8)
242 return rc
243}
244func main(argc: i64, argv: *i64) -> i64 {
245 if argc < 2 {
246 gv_puts("nx_eff_scan v1 -- efficiency telemetry scanner (eff lane F731)\n" as *u8)
247 gv_puts(" selftest fixture gate (exact counts + neg-controls)\n" as *u8)
248 gv_puts(" scan [worklog] [trdir] [window] real measured spend rows (time/tokens/money/energy)\n" as *u8)
249 sys_exit(0)
250 return 0
251 }
252 let a1: *u8 = argv[1] as *u8
253 if es_eq(a1, "selftest" as *u8) == 1 { let rc: i64 = es_selftest(); sys_exit(rc); return rc }
254 if es_eq(a1, "scan" as *u8) == 0 { gv_puts("unknown verb (use: selftest | scan)\n" as *u8); sys_exit(2); return 2 }
255 var wl: *u8 = ES_WL_DEF
256 var tr: *u8 = ES_TR_DEF
257 var win: i64 = ES_WIN_DEF
258 if argc >= 3 { wl = argv[2] as *u8 }
259 if argc >= 4 { tr = argv[3] as *u8 }
260 if argc >= 5 { win = es_atoi(argv[4] as *u8) }
261 if win < 1 { win = 1 }
262 if win > ES_WIN_MAX { win = ES_WIN_MAX }
263 let env: *i64 = sys_mmap(ES_ENV_SLOTS * 8) as *i64
264 let wlb: *u8 = sys_mmap(ES_CAP_WL)
265 let wn: i64 = es_read_bounded(wl, wlb, ES_CAP_WL, env)
266 if wn < 0 { gv_puts("ERR worklog unreadable\n" as *u8); sys_exit(1); return 1 }
267 env[ES_E_WLB] = wn
268 let maxe: i64 = es_wl_maxepoch(wlb, wn)
269 if maxe <= 0 { gv_puts("ERR worklog has no epoch rows\n" as *u8); sys_exit(1); return 1 }
270 let nowday: i64 = maxe / ES_DAYSEC
271 let dayw: *i64 = sys_mmap(ES_WIN_MAX * ES_NF * 8) as *i64
272 es_wl_scan(wlb, wn, dayw, nowday, win, env)
273 let tbuf: *u8 = sys_mmap(ES_CAP_TR)
274 let modacc: *i64 = sys_mmap(EFL_NTIER * 4 * 8) as *i64
275 es_tr_scan(tr, tbuf, dayw, nowday, win, env, modacc)
276 es_emit(dayw, nowday, win, env, modacc)
277 return 0
278}