code wiki / _hdl_build / nx_debt_view.nx

nx_debt_view.nx source

↩ module page · 174 lines · 10337 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 19// 2026-08-06: RAISED 4194304 -> 33554432, the FOURTH hand-copy of this cap (nx_debt DB_CAP, nx_debtlive 20// DL_CAP, nx_debtcluster IC_CAP, and this). The plane crossed 4 MiB at 4,217,666B / 3,326 rows. 21// ***THIS ORGAN IS THE ONE THAT BEHAVED WELL*** -- it already sets capture_trunc and prints 22// coverage_complete=0 PARTIAL naming the constant to raise, which is why the truncation was DIAGNOSABLE at 23// all; nx_debt page/show print a total with NO coverage claim and that is what made a filed row look lost. 24// ⇒ THE DECLARATION, NOT THE CAP, IS THE FEATURE: copy this pattern into the other three rather than only 25// copying the number. A reader that cannot see the whole ledger must SAY SO, never print a bare total. 26const DV_CAPTURE_CAP: i64 = 33554432 27const DV_MAXROWS: i64 = 16384 28const DV_OUTBUF: i64 = 65536 29 30func 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 } 31func 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 } 32func 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 } 33func 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 } 34func dv_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 35func dv_has(buf: *u8, s: i64, e: i64, pat: *u8, pl: i64) -> i64 { 36 if pl == 0 { return 0 } 37 var i: i64 = s 38 var hit: i64 = 0 39 while i + pl <= e { 40 var k: i64 = 0 41 var m: i64 = 1 42 while k < pl { if buf[i + k] != pat[k] { m = 0; k = pl } else { k = k + 1 } } 43 if m == 1 { hit = 1; i = e } else { i = i + 1 } 44 } 45 return hit 46} 47// sev of line [s,e): first TAB-delimited field that is exactly one digit 1-9; 0 if none 48func dv_sev(buf: *u8, s: i64, e: i64) -> i64 { 49 var fs2: i64 = s 50 var i: i64 = s 51 var sev: i64 = 0 52 while i <= e { 53 var isend: i64 = 0 54 if i == e { isend = 1 } else { if buf[i] == (9 as u8) { isend = 1 } } 55 if isend == 1 { 56 if i - fs2 == 1 { let c: i64 = buf[fs2]; if c >= 49 { if c <= 57 { if sev == 0 { sev = c - 48 } } } } 57 fs2 = i + 1 58 } 59 i = i + 1 60 } 61 return sev 62} 63// emit line [s,e) truncated at 700 bytes with marker 64func dv_line(rep: *u8, pos: i64, buf: *u8, s: i64, e: i64) -> i64 { 65 var p: i64 = pos 66 var n: i64 = e - s 67 var trunc: i64 = 0 68 if n > 700 { n = 700; trunc = 1 } 69 var i: i64 = 0 70 while i < n { if p < DV_OUTMAX { rep[p] = buf[s + i]; p = p + 1 } i = i + 1 } 71 if trunc == 1 { p = dv_b(rep, p, "...[ROW-TRUNC-700]" as *u8) } 72 p = dv_b(rep, p, "\n" as *u8) 73 return p 74} 75func main(argc: i64, argv: *i64) -> i64 { 76 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 } 77 let verb: *u8 = argv[1] as *u8 78 let cap: i64 = DV_CAPTURE_CAP 79 let out: *u8 = sys_mmap(cap + 16) 80 let olen: *i64 = sys_mmap(16) as *i64 81 let rc: i64 = tr_run1("/volume1/homes/elderwesto/nishihost/nx_debt.elf" as *u8, "list" as *u8, out, cap, olen) 82 let n: i64 = olen[0] 83 if rc == 127 { dv_w(1, "DEBT-VIEW verdict=CAPTURE-FAIL exec-127\n" as *u8); sys_exit(4); return 4 } 84 if rc < 0 { dv_w(1, "DEBT-VIEW verdict=CAPTURE-FAIL harness\n" as *u8); sys_exit(4); return 4 } 85 if n <= 0 { dv_w(1, "DEBT-VIEW verdict=CAPTURE-FAIL empty\n" as *u8); sys_exit(4); return 4 } 86 // index all lines 87 let ls: *i64 = sys_mmap(DV_MAXROWS * 8) as *i64 88 let le: *i64 = sys_mmap(DV_MAXROWS * 8) as *i64 89 var nl: i64 = 0 90 var i: i64 = 0 91 var start: i64 = 0 92 while i <= n { 93 var isend: i64 = 0 94 if i == n { isend = 1 } else { if out[i] == (10 as u8) { isend = 1 } } 95 if isend == 1 { if i > start { if nl < DV_MAXROWS { ls[nl] = start; le[nl] = i; nl = nl + 1 } } start = i + 1 } 96 i = i + 1 97 } 98 let rep: *u8 = sys_mmap(DV_OUTBUF) 99 var p: i64 = 0 100 // verb chars: p=112 s=115 f=102 101 let v0: i64 = verb[0] 102 if v0 == 112 { 103 // page <offset> <count> 104 if argc < 4 { dv_w(2, "usage: page <offset> <count>\n" as *u8); sys_exit(2); return 2 } 105 let off: i64 = dv_atoi(argv[2] as *u8) 106 var cnt: i64 = dv_atoi(argv[3] as *u8) 107 if cnt > 40 { cnt = 40 } 108 p = dv_b(rep, p, "DEBT-VIEW verb=page total_rows=" as *u8); p = dv_bn(rep, p, nl) 109 p = dv_b(rep, p, " offset=" as *u8); p = dv_bn(rep, p, off) 110 p = dv_b(rep, p, " count=" as *u8); p = dv_bn(rep, p, cnt) 111 p = dv_b(rep, p, " (caps: 40 rows/call, 700B/row, capture 512KB; src=fork nx_debt.elf list)\n" as *u8) 112 var k: i64 = off 113 var shown: i64 = 0 114 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 } } 115 } else { if v0 == 115 { 116 // sev <minsev> -- OPEN rows with sev >= minsev 117 let minsev: i64 = dv_atoi(argv[2] as *u8) 118 p = dv_b(rep, p, "DEBT-VIEW verb=sev minsev=" as *u8); p = dv_bn(rep, p, minsev) 119 p = dv_b(rep, p, " total_rows=" as *u8); p = dv_bn(rep, p, nl) 120 p = dv_b(rep, p, " open-only (caps: 40 rows shown, 700B/row; sev=first 1-digit TAB field heuristic)\n" as *u8) 121 var k2: i64 = 0 122 var hitc: i64 = 0 123 var shown2: i64 = 0 124 while k2 < nl { 125 if dv_has(out, ls[k2], le[k2], "\topen" as *u8, 5) == 1 { 126 let sv: i64 = dv_sev(out, ls[k2], le[k2]) 127 if sv >= minsev { hitc = hitc + 1; if shown2 < 40 { p = dv_line(rep, p, out, ls[k2], le[k2]); shown2 = shown2 + 1 } } 128 } 129 k2 = k2 + 1 130 } 131 p = dv_b(rep, p, "MATCHED open sev>=" as *u8); p = dv_bn(rep, p, minsev) 132 p = dv_b(rep, p, ": " as *u8); p = dv_bn(rep, p, hitc) 133 p = dv_b(rep, p, " shown=" as *u8); p = dv_bn(rep, p, shown2) 134 p = dv_b(rep, p, "\n" as *u8) 135 } else { if v0 == 102 { 136 // find <substr> -- any status 137 let pat: *u8 = argv[2] as *u8 138 let pl: i64 = dv_slen(pat) 139 p = dv_b(rep, p, "DEBT-VIEW verb=find total_rows=" as *u8); p = dv_bn(rep, p, nl) 140 p = dv_b(rep, p, " (caps: 40 rows shown, 700B/row)\n" as *u8) 141 var k3: i64 = 0 142 var hitc2: i64 = 0 143 var shown3: i64 = 0 144 while k3 < nl { 145 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 } } 146 k3 = k3 + 1 147 } 148 p = dv_b(rep, p, "MATCHED: " as *u8); p = dv_bn(rep, p, hitc2) 149 p = dv_b(rep, p, " shown=" as *u8); p = dv_bn(rep, p, shown3) 150 p = dv_b(rep, p, "\n" as *u8) 151 } else { dv_w(2, "usage: nx_debt_view page <offset> <count> | sev <minsev> | find <substr>\n" as *u8); sys_exit(2); return 2 } } } 152 var capture_trunc: i64 = 0 153 if n >= DV_CAPTURE_CAP { capture_trunc = 1 } 154 var rows_capped: i64 = 0 155 if nl >= DV_MAXROWS { rows_capped = 1 } 156 p = dv_b(rep, p, "COVERAGE rows_indexed=" as *u8); p = dv_bn(rep, p, nl) 157 p = dv_b(rep, p, " capture_bytes=" as *u8); p = dv_bn(rep, p, n) 158 p = dv_b(rep, p, " capture_cap=" as *u8); p = dv_bn(rep, p, DV_CAPTURE_CAP) 159 p = dv_b(rep, p, " rows_cap=" as *u8); p = dv_bn(rep, p, DV_MAXROWS) 160 p = dv_b(rep, p, " capture_truncated=" as *u8); p = dv_bn(rep, p, capture_trunc) 161 p = dv_b(rep, p, " rows_capped=" as *u8); p = dv_bn(rep, p, rows_capped) 162 if capture_trunc == 1 { 163 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) 164 } else { if rows_capped == 1 { 165 p = dv_b(rep, p, " coverage_complete=0 PARTIAL: the line index filled. Raise DV_MAXROWS.\n" as *u8) 166 } else { 167 p = dv_b(rep, p, " coverage_complete=1\n" as *u8) 168 } } 169 sys_write(1, rep, p) 170 let tmpfd: i64 = sys_openat_wr("knowledge/status/debt_view.out.tmp" as *u8, 420) 171 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) } 172 sys_exit(0) 173 return 0 174}