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}