code wiki / _hdl_build / nx_eff_scan.nx
nx_eff_scan.nx source
↩ module page · 279 lines · 12539 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 if v < 0 { d[o] = 45 as u8; return es_catn(d, o + 1, 0 - v) }
123 let t: *u8 = sys_mmap(28)
124 var m: i64 = v
125 var k: i64 = 0
126 if m == 0 { t[0] = ES_ZERO as u8; k = 1 }
127 while m > 0 { t[k] = (ES_ZERO + (m % 10)) as u8; m = m / 10; k = k + 1 }
128 var oo: i64 = o
129 var i: i64 = 0
130 while i < k { d[oo] = t[k-1-i]; oo = oo + 1; i = i + 1 }
131 return oo
132}
133func es_selftest() -> i64 {
134 let ctr: *i64 = gv_ctr()
135 gv_head("nx_eff_scan selftest -- fixture worklog + transcript, exact counts + neg-controls" as *u8)
136 let now: i64 = sys_now_realtime_sec()
137 let base_e: i64 = (now / ES_DAYSEC) * ES_DAYSEC + 1000
138 let wb: *u8 = sys_mmap(4096)
139 var o: i64 = 0
140 o = es_catn(wb, o, base_e)
141 o = es_cat(wb, o, "\tingest\tmcp__nishi__nx_health\tx\n" as *u8)
142 o = es_catn(wb, o, base_e + 100)
143 o = es_cat(wb, o, "\tingest\tPowerShell\twsl something\n" as *u8)
144 o = es_catn(wb, o, base_e + 900)
145 o = es_cat(wb, o, "\tingest\tRead\tsome/file.md\n" as *u8)
146 o = es_cat(wb, o, "#garbage line with no epoch\n" as *u8)
147 es_put_file("/tmp/eff_gate_wl.tsv" as *u8, wb, o)
148 sys_mkdir("/tmp/eff_gate_tr" as *u8, 511)
149 let tb: *u8 = sys_mmap(4096)
150 var o2: i64 = 0
151 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)
152 o2 = es_cat(tb, o2, "{\x22reinput_tokens\x22:999,\x22xoutput_tokens\x22:888}\n" as *u8)
153 es_put_file("/tmp/eff_gate_tr/fix.jsonl" as *u8, tb, o2)
154 let env: *i64 = sys_mmap(ES_ENV_SLOTS * 8) as *i64
155 let wlb: *u8 = sys_mmap(ES_CAP_WL)
156 let wn: i64 = es_read_bounded("/tmp/eff_gate_wl.tsv" as *u8, wlb, ES_CAP_WL, env)
157 env[ES_E_WLB] = wn
158 let maxe: i64 = es_wl_maxepoch(wlb, wn)
159 let nowday: i64 = maxe / ES_DAYSEC
160 let dayw: *i64 = sys_mmap(ES_WIN_MAX * ES_NF * 8) as *i64
161 es_wl_scan(wlb, wn, dayw, nowday, ES_WIN_DEF, env)
162 let tbuf: *u8 = sys_mmap(ES_CAP_TR)
163 let modacc: *i64 = sys_mmap(EFL_NTIER * 4 * 8) as *i64
164 es_tr_scan("/tmp/eff_gate_tr" as *u8, tbuf, dayw, nowday, ES_WIN_DEF, env, modacc)
165 var c1: i64 = 0
166 if dayw[0] == 3 { c1 = 1 }
167 gv_check("T1 actions==3" as *u8, c1, ctr)
168 var c2: i64 = 0
169 if dayw[1] == 1 { c2 = 1 }
170 gv_check("T2 mcp==1" as *u8, c2, ctr)
171 var c3: i64 = 0
172 if dayw[2] == 1 { c3 = 1 }
173 gv_check("T3 shell==1" as *u8, c3, ctr)
174 var c4: i64 = 0
175 if dayw[3] == 1 { c4 = 1 }
176 gv_check("T4 fileops==1" as *u8, c4, ctr)
177 var c5: i64 = 0
178 if dayw[4] == 100 { c5 = 1 }
179 gv_check("T5 active_sec==100 (800s gap excluded by gap300-strict)" as *u8, c5, ctr)
180 var c6: i64 = 0
181 if dayw[5] == 100 { c6 = 1 }
182 gv_check("T6 tok_in==100 (decoy reinput_tokens NOT counted)" as *u8, c6, ctr)
183 var c7: i64 = 0
184 if dayw[6] == 25 { c7 = 1 }
185 gv_check("T7 tok_out==25 (decoy xoutput_tokens NOT counted)" as *u8, c7, ctr)
186 var c8: i64 = 0
187 if dayw[7] == 7 { c8 = 1 }
188 gv_check("T8 cache_read==7 (not double-counted into tok_in)" as *u8, c8, ctr)
189 var c9: i64 = 0
190 if dayw[8] == 3 { c9 = 1 }
191 gv_check("T9 cache_write==3" as *u8, c9, ctr)
192 var c10: i64 = 0
193 if env[ES_E_WLR] == 3 { c10 = 1 }
194 gv_check("T10 NEG garbage line ignored (wl_rows==3)" as *u8, c10, ctr)
195 let bad: i64 = es_read_bounded("/tmp/eff_gate_nonexistent_xyz" as *u8, wlb, 4096, env)
196 var c11: i64 = 0
197 if bad < 0 { c11 = 1 }
198 gv_check("T11 NEG unreadable path -> -1 fail-closed" as *u8, c11, ctr)
199 var c12: i64 = 0
200 if dayw[9] == 1 { c12 = 1 }
201 gv_check("T12 transcript file counted once" as *u8, c12, ctr)
202 // T13 conversions: cost = (100*100 + 25*500 + 7*10 + 3*125)*1500/1e8 = (10000+12500+70+375)*1500/1e8
203 // = 22945*1500/1e8 = 34417500/1e8 = 0 cents (sub-cent at fixture scale) -> proves integer floor honest
204 let cost: i64 = efl_cost_cents(100, 25, 7, 3)
205 var c13: i64 = 0
206 if cost == 0 { c13 = 1 }
207 gv_check("T13 cost integer-floor at fixture scale (22945bp -> 0 cents, no fake rounding)" as *u8, c13, ctr)
208 // T14 conversion scale check: 1M input tok -> 1500 cents ($15.00) exactly
209 let cost2: i64 = efl_cost_cents(1000000, 0, 0, 0)
210 var c14: i64 = 0
211 if cost2 == 1500 { c14 = 1 }
212 gv_check("T14 cost 1M-input==1500c ($15.00/Mtok input, declared rate)" as *u8, c14, ctr)
213 // T15-T19 per-model attribution: fixture no-model usage -> OTHER; a direct model-fixture buckets fable+sonnet
214 var c15: i64 = 0
215 if modacc[EFL_T_OTHER*4] == 100 { c15 = 1 }
216 gv_check("T15 no-model usage -> OTHER tier (in==100)" as *u8, c15, ctr)
217 let mfix: *u8 = sys_mmap(4096)
218 var mo: i64 = 0
219 mo = es_cat(mfix, mo, "{\x22model\x22:\x22claude-fable-5\x22,\x22usage\x22:{\x22input_tokens\x22:1000000}}\n" as *u8)
220 mo = es_cat(mfix, mo, "{\x22model\x22:\x22claude-sonnet-5\x22,\x22usage\x22:{\x22input_tokens\x22:2000000}}\n" as *u8)
221 let modacc2: *i64 = sys_mmap(EFL_NTIER * 4 * 8) as *i64
222 es_tr_tokens_bymodel(mfix, mo, modacc2)
223 var c16: i64 = 0
224 if modacc2[EFL_T_FABLE*4] == 1000000 { c16 = 1 }
225 gv_check("T16 fable line -> FABLE tier (in==1M)" as *u8, c16, ctr)
226 var c17: i64 = 0
227 if modacc2[EFL_T_SONNET*4] == 2000000 { c17 = 1 }
228 gv_check("T17 sonnet line -> SONNET tier (in==2M)" as *u8, c17, ctr)
229 var c18: i64 = 0
230 if efl_cost_tier(EFL_T_FABLE, 1000000, 0, 0, 0) == 1000 { c18 = 1 }
231 gv_check("T18 fable 1M-input cost==1000c ($10/Mtok fetched rate)" as *u8, c18, ctr)
232 var c19: i64 = 0
233 if efl_cost_tier(EFL_T_SONNET, 2000000, 0, 0, 0) == 600 { c19 = 1 }
234 gv_check("T19 sonnet 2M-input cost==600c ($3/Mtok)" as *u8, c19, ctr)
235 let db2: *u8 = sys_mmap(1024)
236 let dn2: i64 = es_cat(db2, 0, "{\x22message\x22:{\x22usage\x22:{\x22input_tokens\x22:50}},\x22usage\x22:{\x22input_tokens\x22:50}}\n" as *u8)
237 let dw2: *i64 = sys_mmap(ES_WIN_MAX * ES_NF * 8) as *i64
238 es_tr_tokens(db2, dn2, dw2, 0)
239 var c20: i64 = 0
240 if dw2[5] == 50 { c20 = 1 }
241 gv_check("T20 double-usage line counted ONCE (dedup fixes the 2x double-count)" as *u8, c20, ctr)
242 let rc: i64 = gv_verdict("EFF-SCAN-GATE" as *u8, ctr, "counts + neg-controls + conversion KAT + per-model attribution + dedup" as *u8)
243 return rc
244}
245func main(argc: i64, argv: *i64) -> i64 {
246 if argc < 2 {
247 gv_puts("nx_eff_scan v1 -- efficiency telemetry scanner (eff lane F731)\n" as *u8)
248 gv_puts(" selftest fixture gate (exact counts + neg-controls)\n" as *u8)
249 gv_puts(" scan [worklog] [trdir] [window] real measured spend rows (time/tokens/money/energy)\n" as *u8)
250 sys_exit(0)
251 return 0
252 }
253 let a1: *u8 = argv[1] as *u8
254 if es_eq(a1, "selftest" as *u8) == 1 { let rc: i64 = es_selftest(); sys_exit(rc); return rc }
255 if es_eq(a1, "scan" as *u8) == 0 { gv_puts("unknown verb (use: selftest | scan)\n" as *u8); sys_exit(2); return 2 }
256 var wl: *u8 = ES_WL_DEF
257 var tr: *u8 = ES_TR_DEF
258 var win: i64 = ES_WIN_DEF
259 if argc >= 3 { wl = argv[2] as *u8 }
260 if argc >= 4 { tr = argv[3] as *u8 }
261 if argc >= 5 { win = es_atoi(argv[4] as *u8) }
262 if win < 1 { win = 1 }
263 if win > ES_WIN_MAX { win = ES_WIN_MAX }
264 let env: *i64 = sys_mmap(ES_ENV_SLOTS * 8) as *i64
265 let wlb: *u8 = sys_mmap(ES_CAP_WL)
266 let wn: i64 = es_read_bounded(wl, wlb, ES_CAP_WL, env)
267 if wn < 0 { gv_puts("ERR worklog unreadable\n" as *u8); sys_exit(1); return 1 }
268 env[ES_E_WLB] = wn
269 let maxe: i64 = es_wl_maxepoch(wlb, wn)
270 if maxe <= 0 { gv_puts("ERR worklog has no epoch rows\n" as *u8); sys_exit(1); return 1 }
271 let nowday: i64 = maxe / ES_DAYSEC
272 let dayw: *i64 = sys_mmap(ES_WIN_MAX * ES_NF * 8) as *i64
273 es_wl_scan(wlb, wn, dayw, nowday, win, env)
274 let tbuf: *u8 = sys_mmap(ES_CAP_TR)
275 let modacc: *i64 = sys_mmap(EFL_NTIER * 4 * 8) as *i64
276 es_tr_scan(tr, tbuf, dayw, nowday, win, env, modacc)
277 es_emit(dayw, nowday, win, env, modacc)
278 return 0
279}