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}