code wiki / _hdl_build / nx_debt_view.nx

nx_debt_view.nx source

↩ module page · 167 lines · 9612 B

1// nx_debt_view.nx -- loop lane (eats debt seq215 visibility half). The debt ledger outgrew the 64KB MCP 2// transport (221 rows, ~130KB list output) so tail rows -- including sev-8/7 most-important debt -- were 3// UNREADABLE and eat-by-index was blind. This organ is the bounded VIEW: it fork-captures the canonical 4// reader (nx_debt.elf list -- composition via tr_run1, NO schema reimplementation = no drift) and serves 5// paged / severity-filtered / substring views that always fit the transport. Read-only; the eat stays in 6// nx_debt (verify a row's content HERE, then eat its index THERE = verified-eat procedure). 7// nx_debt_view page <offset> <count> | sev <minsev> | find <substr> 8// ENVELOPE (declared in output): shown cap 40 rows/call, 700 bytes/row (truncation marked), capture cap 9// 512KB. sev = open rows only, sev-field heuristic: first 1-char digit TAB field. exit: 0 | 2 usage | 4 capture-fail. 10// license_tier: ORIGINAL expect_exit: 0 11import "nx_tool_run.nx" 12// RULE-11: these were named K_MAGIC_<value> -- a magic number wearing a magic name is still a magic number. 13// SIZED FROM MEASUREMENT 2026-07-30, not taste: the ledger held 1833 OPEN rows at ~700B each (~1.28MB) while 14// the capture cap was 512KB. So this reader silently saw 734 rows and PRINTED total_rows=734 -- 60% of the open 15// ledger was invisible to every seat that picks work here, and nothing in the output said so. Two independent 16// caps bind: the fork-capture byte cap AND the line-index row cap; BOTH must exceed the corpus, and when either 17// cannot, the view must declare coverage_complete=0 rather than present a truncated prefix as a total (law L011). 18const DV_OUTMAX: i64 = 60000 19const DV_CAPTURE_CAP: i64 = 4194304 20const DV_MAXROWS: i64 = 16384 21const DV_OUTBUF: i64 = 65536 22 23func dv_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 24func dv_b(rep: *u8, pos: i64, s: *u8) -> i64 { var p: i64 = pos; var i: i64 = 0; while s[i] != (0 as u8) { if p < DV_OUTMAX { rep[p] = s[i]; p = p + 1 } i = i + 1 } return p } 25func dv_bn(rep: *u8, pos: i64, v: i64) -> i64 { var p: i64 = pos; var m: i64 = v; if m < 0 { if p < DV_OUTMAX { rep[p] = 45 as u8; p = p + 1 } m = 0 - m } 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 { if p < DV_OUTMAX { rep[p] = t[k - 1 - i]; p = p + 1 } i = i + 1 } return p } 26func dv_atoi(s: *u8) -> i64 { var v: i64 = 0; var i: i64 = 0; while s[i] != (0 as u8) { let c: i64 = s[i]; if c < 48 { i = i + 1 } else { if c > 57 { i = i + 1 } else { v = v * 10 + (c - 48); i = i + 1 } } } return v } 27func dv_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 28func dv_has(buf: *u8, s: i64, e: i64, pat: *u8, pl: i64) -> i64 { 29 if pl == 0 { return 0 } 30 var i: i64 = s 31 var hit: i64 = 0 32 while i + pl <= e { 33 var k: i64 = 0 34 var m: i64 = 1 35 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } } 36 if m == 1 { hit = 1; i = e } else { i = i + 1 } 37 } 38 return hit 39} 40// sev of line [s,e): first TAB-delimited field that is exactly one digit 1-9; 0 if none 41func dv_sev(buf: *u8, s: i64, e: i64) -> i64 { 42 var fs2: i64 = s 43 var i: i64 = s 44 var sev: i64 = 0 45 while i <= e { 46 var isend: i64 = 0 47 if i == e { isend = 1 } else { if buf[i] == (9 as u8) { isend = 1 } } 48 if isend == 1 { 49 if i - fs2 == 1 { let c: i64 = buf[fs2]; if c >= 49 { if c <= 57 { if sev == 0 { sev = c - 48 } } } } 50 fs2 = i + 1 51 } 52 i = i + 1 53 } 54 return sev 55} 56// emit line [s,e) truncated at 700 bytes with marker 57func dv_line(rep: *u8, pos: i64, buf: *u8, s: i64, e: i64) -> i64 { 58 var p: i64 = pos 59 var n: i64 = e - s 60 var trunc: i64 = 0 61 if n > 700 { n = 700; trunc = 1 } 62 var i: i64 = 0 63 while i < n { if p < DV_OUTMAX { rep[p] = buf[s + i]; p = p + 1 } i = i + 1 } 64 if trunc == 1 { p = dv_b(rep, p, "...[ROW-TRUNC-700]" as *u8) } 65 p = dv_b(rep, p, "\n" as *u8) 66 return p 67} 68func main(argc: i64, argv: *i64) -> i64 { 69 if argc < 3 { dv_w(2, "usage: nx_debt_view page <offset> <count> | sev <minsev> | find <substr>\n" as *u8); sys_exit(2); return 2 } 70 let verb: *u8 = argv[1] as *u8 71 let cap: i64 = DV_CAPTURE_CAP 72 let out: *u8 = sys_mmap(cap + 16) 73 let olen: *i64 = sys_mmap(16) as *i64 74 let rc: i64 = tr_run1("/volume1/homes/elderwesto/nishihost/nx_debt.elf" as *u8, "list" as *u8, out, cap, olen) 75 let n: i64 = olen[0] 76 if rc == 127 { dv_w(1, "DEBT-VIEW verdict=CAPTURE-FAIL exec-127\n" as *u8); sys_exit(4); return 4 } 77 if rc < 0 { dv_w(1, "DEBT-VIEW verdict=CAPTURE-FAIL harness\n" as *u8); sys_exit(4); return 4 } 78 if n <= 0 { dv_w(1, "DEBT-VIEW verdict=CAPTURE-FAIL empty\n" as *u8); sys_exit(4); return 4 } 79 // index all lines 80 let ls: *i64 = sys_mmap(DV_MAXROWS * 8) as *i64 81 let le: *i64 = sys_mmap(DV_MAXROWS * 8) as *i64 82 var nl: i64 = 0 83 var i: i64 = 0 84 var start: i64 = 0 85 while i <= n { 86 var isend: i64 = 0 87 if i == n { isend = 1 } else { if out[i] == (10 as u8) { isend = 1 } } 88 if isend == 1 { if i > start { if nl < DV_MAXROWS { ls[nl] = start; le[nl] = i; nl = nl + 1 } } start = i + 1 } 89 i = i + 1 90 } 91 let rep: *u8 = sys_mmap(DV_OUTBUF) 92 var p: i64 = 0 93 // verb chars: p=112 s=115 f=102 94 let v0: i64 = verb[0] 95 if v0 == 112 { 96 // page <offset> <count> 97 if argc < 4 { dv_w(2, "usage: page <offset> <count>\n" as *u8); sys_exit(2); return 2 } 98 let off: i64 = dv_atoi(argv[2] as *u8) 99 var cnt: i64 = dv_atoi(argv[3] as *u8) 100 if cnt > 40 { cnt = 40 } 101 p = dv_b(rep, p, "DEBT-VIEW verb=page total_rows=" as *u8); p = dv_bn(rep, p, nl) 102 p = dv_b(rep, p, " offset=" as *u8); p = dv_bn(rep, p, off) 103 p = dv_b(rep, p, " count=" as *u8); p = dv_bn(rep, p, cnt) 104 p = dv_b(rep, p, " (caps: 40 rows/call, 700B/row, capture 512KB; src=fork nx_debt.elf list)\n" as *u8) 105 var k: i64 = off 106 var shown: i64 = 0 107 while shown < cnt { if k >= nl { shown = cnt } else { p = dv_line(rep, p, out, ls[k], le[k]); k = k + 1; shown = shown + 1 } } 108 } else { if v0 == 115 { 109 // sev <minsev> -- OPEN rows with sev >= minsev 110 let minsev: i64 = dv_atoi(argv[2] as *u8) 111 p = dv_b(rep, p, "DEBT-VIEW verb=sev minsev=" as *u8); p = dv_bn(rep, p, minsev) 112 p = dv_b(rep, p, " total_rows=" as *u8); p = dv_bn(rep, p, nl) 113 p = dv_b(rep, p, " open-only (caps: 40 rows shown, 700B/row; sev=first 1-digit TAB field heuristic)\n" as *u8) 114 var k2: i64 = 0 115 var hitc: i64 = 0 116 var shown2: i64 = 0 117 while k2 < nl { 118 if dv_has(out, ls[k2], le[k2], "\topen" as *u8, 5) == 1 { 119 let sv: i64 = dv_sev(out, ls[k2], le[k2]) 120 if sv >= minsev { hitc = hitc + 1; if shown2 < 40 { p = dv_line(rep, p, out, ls[k2], le[k2]); shown2 = shown2 + 1 } } 121 } 122 k2 = k2 + 1 123 } 124 p = dv_b(rep, p, "MATCHED open sev>=" as *u8); p = dv_bn(rep, p, minsev) 125 p = dv_b(rep, p, ": " as *u8); p = dv_bn(rep, p, hitc) 126 p = dv_b(rep, p, " shown=" as *u8); p = dv_bn(rep, p, shown2) 127 p = dv_b(rep, p, "\n" as *u8) 128 } else { if v0 == 102 { 129 // find <substr> -- any status 130 let pat: *u8 = argv[2] as *u8 131 let pl: i64 = dv_slen(pat) 132 p = dv_b(rep, p, "DEBT-VIEW verb=find total_rows=" as *u8); p = dv_bn(rep, p, nl) 133 p = dv_b(rep, p, " (caps: 40 rows shown, 700B/row)\n" as *u8) 134 var k3: i64 = 0 135 var hitc2: i64 = 0 136 var shown3: i64 = 0 137 while k3 < nl { 138 if dv_has(out, ls[k3], le[k3], pat, pl) == 1 { hitc2 = hitc2 + 1; if shown3 < 40 { p = dv_line(rep, p, out, ls[k3], le[k3]); shown3 = shown3 + 1 } } 139 k3 = k3 + 1 140 } 141 p = dv_b(rep, p, "MATCHED: " as *u8); p = dv_bn(rep, p, hitc2) 142 p = dv_b(rep, p, " shown=" as *u8); p = dv_bn(rep, p, shown3) 143 p = dv_b(rep, p, "\n" as *u8) 144 } else { dv_w(2, "usage: nx_debt_view page <offset> <count> | sev <minsev> | find <substr>\n" as *u8); sys_exit(2); return 2 } } } 145 var capture_trunc: i64 = 0 146 if n >= DV_CAPTURE_CAP { capture_trunc = 1 } 147 var rows_capped: i64 = 0 148 if nl >= DV_MAXROWS { rows_capped = 1 } 149 p = dv_b(rep, p, "COVERAGE rows_indexed=" as *u8); p = dv_bn(rep, p, nl) 150 p = dv_b(rep, p, " capture_bytes=" as *u8); p = dv_bn(rep, p, n) 151 p = dv_b(rep, p, " capture_cap=" as *u8); p = dv_bn(rep, p, DV_CAPTURE_CAP) 152 p = dv_b(rep, p, " rows_cap=" as *u8); p = dv_bn(rep, p, DV_MAXROWS) 153 p = dv_b(rep, p, " capture_truncated=" as *u8); p = dv_bn(rep, p, capture_trunc) 154 p = dv_b(rep, p, " rows_capped=" as *u8); p = dv_bn(rep, p, rows_capped) 155 if capture_trunc == 1 { 156 p = dv_b(rep, p, " coverage_complete=0 PARTIAL: the rows above are a TRUNCATED PREFIX of the ledger, not the ledger. Raise DV_CAPTURE_CAP.\n" as *u8) 157 } else { if rows_capped == 1 { 158 p = dv_b(rep, p, " coverage_complete=0 PARTIAL: the line index filled. Raise DV_MAXROWS.\n" as *u8) 159 } else { 160 p = dv_b(rep, p, " coverage_complete=1\n" as *u8) 161 } } 162 sys_write(1, rep, p) 163 let tmpfd: i64 = sys_openat_wr("knowledge/status/debt_view.out.tmp" as *u8, 420) 164 if tmpfd >= 0 { sys_write(tmpfd, rep, p); sys_close(tmpfd); sys_renameat("knowledge/status/debt_view.out.tmp" as *u8, "knowledge/status/debt_view.out" as *u8) } 165 sys_exit(0) 166 return 0 167}