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}