nx_court_recap.nx source
↩ module page · 176 lines · 7465 B
1// nx_court_recap.nx -- R1a sovereign court-data ingest parse-core (CourtListener v4 financial-disclosures).
2// Rung-1: needle-scan a banked CL financial-disclosure JSON page -> normalized counts + a value + liar-kill gate.
3// Rung-2: cursor-following -- extract the v4 "next" cursor + a string field value (c_str_after), so the live
4// ingester can page through EVERYTHING. Gated deterministically on the banked fixture (network-independent).
5// nx_cc traps avoided: NO double-quote / '#' / '!' in string literals -> JSON needles built at runtime via mkneedle.
6// license_tier: ORIGINAL expect_exit:0
7import "nx_syscalls.nx"
8const K_MAGIC_524288: i64 = 524288
9const K_MAGIC_2048: i64 = 2048
10const K_MAGIC_1990: i64 = 1990
11const K_MAGIC_2030: i64 = 2030
12
13func 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 }
14func wc(fd: i64, code: i64) -> i64 { let t: *u8 = sys_mmap(2); t[0] = code as u8; sys_write(fd, t, 1); return 0 }
15func wn(fd: i64, v: i64) -> i64 {
16 var m: i64 = v; if m < 0 { w(fd, "-" as *u8); m = 0 - m }
17 let t: *u8 = sys_mmap(24); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 }
18 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
19 let o: *u8 = sys_mmap(24); var i: i64 = 0; while i < k { o[i] = t[k-1-i]; i = i + 1 } sys_write(fd, o, k); return 0
20}
21func c_read(path: *u8, buf: *u8, cap: i64) -> i64 {
22 let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 - 1 }
23 var tot: i64 = 0
24 while tot < cap { let r: i64 = sys_read(fd, (buf as i64 + tot) as *u8, cap - tot); if r <= 0 { break } tot = tot + r }
25 sys_close(fd); return tot
26}
27func c_count(buf: *u8, n: i64, needle: *u8) -> i64 {
28 var m: i64 = 0; while needle[m] != (0 as u8) { m = m + 1 }
29 if m == 0 { return 0 }
30 var cnt: i64 = 0; var i: i64 = 0
31 while i + m <= n {
32 var k: i64 = 0; var hit: i64 = 1
33 while k < m { if buf[i+k] != needle[k] { hit = 0; break } k = k + 1 }
34 if hit == 1 { cnt = cnt + 1; i = i + m } else { i = i + 1 }
35 }
36 return cnt
37}
38func mkneedle(dst: *u8, name: *u8) -> i64 {
39 var i: i64 = 0
40 dst[i] = 34 as u8; i = i + 1
41 var j: i64 = 0
42 while name[j] != (0 as u8) { dst[i] = name[j]; i = i + 1; j = j + 1 }
43 dst[i] = 34 as u8; i = i + 1
44 dst[i] = 58 as u8; i = i + 1
45 dst[i] = 0 as u8
46 return i
47}
48func c_val_after(buf: *u8, n: i64, needle: *u8) -> i64 {
49 var m: i64 = 0; while needle[m] != (0 as u8) { m = m + 1 }
50 if m == 0 { return 0 - 1 }
51 var i: i64 = 0
52 while i + m <= n {
53 var k: i64 = 0; var hit: i64 = 1
54 while k < m { if buf[i+k] != needle[k] { hit = 0; break } k = k + 1 }
55 if hit == 1 {
56 var p: i64 = i + m
57 while p < n { let c: i64 = buf[p] as i64; if c == 32 { p = p + 1 } else { break } }
58 var have: i64 = 0; var v: i64 = 0
59 while p < n {
60 let d: i64 = buf[p] as i64
61 if d >= 48 { if d <= 57 { v = v * 10 + (d - 48); have = 1; p = p + 1 } else { break } } else { break }
62 }
63 if have == 1 { return v }
64 return 0 - 1
65 }
66 i = i + 1
67 }
68 return 0 - 1
69}
70// extract a JSON string value after a needle: needle"..." -> dst (until closing quote). null/number -> empty, 0.
71func c_str_after(buf: *u8, n: i64, needle: *u8, dst: *u8, dcap: i64) -> i64 {
72 dst[0] = 0 as u8
73 var m: i64 = 0; while needle[m] != (0 as u8) { m = m + 1 }
74 if m == 0 { return 0 }
75 var i: i64 = 0
76 while i + m <= n {
77 var k: i64 = 0; var hit: i64 = 1
78 while k < m { if buf[i+k] != needle[k] { hit = 0; break } k = k + 1 }
79 if hit == 1 {
80 var p: i64 = i + m
81 while p < n { let c: i64 = buf[p] as i64; if c == 32 { p = p + 1 } else { break } }
82 if p < n {
83 if buf[p] == (34 as u8) {
84 p = p + 1
85 var o: i64 = 0
86 while p < n {
87 if buf[p] == (34 as u8) { break }
88 if o < dcap - 1 { dst[o] = buf[p]; o = o + 1 }
89 p = p + 1
90 }
91 dst[o] = 0 as u8
92 return o
93 }
94 }
95 return 0
96 }
97 i = i + 1
98 }
99 return 0
100}
101
102func main(argc: i64, argv: *i64) -> i64 {
103 let cap: i64 = K_MAGIC_524288
104 let buf: *u8 = sys_mmap(cap)
105 var path: *u8 = "knowledge/library/cl_findisc_j.txt" as *u8
106 if argc >= 2 { path = argv[1] as *u8 }
107 let n: i64 = c_read(path, buf, cap)
108
109 let nb: *u8 = sys_mmap(64)
110 mkneedle(nb, "results" as *u8)
111 let results_arr: i64 = c_count(buf, n, nb)
112 let rb: *u8 = sys_mmap(64)
113 mkneedle(rb, "report_type" as *u8)
114 let recs: i64 = c_count(buf, n, rb)
115 let ib: *u8 = sys_mmap(64)
116 mkneedle(ib, "gross_value_code" as *u8)
117 let invs: i64 = c_count(buf, n, ib)
118 let pb: *u8 = sys_mmap(64)
119 mkneedle(pb, "person" as *u8)
120 let persons: i64 = c_count(buf, n, pb)
121 let yb: *u8 = sys_mmap(64)
122 mkneedle(yb, "year" as *u8)
123 let year: i64 = c_val_after(buf, n, yb)
124 let zb: *u8 = sys_mmap(64)
125 mkneedle(zb, "zzz_not_a_real_field" as *u8)
126 let neg: i64 = c_count(buf, n, zb)
127
128 // rung-2: string-value extraction (resource_uri, always a URL string) + the "next" cursor
129 let rub: *u8 = sys_mmap(64)
130 mkneedle(rub, "resource_uri" as *u8)
131 let rtv: *u8 = sys_mmap(512)
132 let rtlen: i64 = c_str_after(buf, n, rub, rtv, 512)
133 let nxb: *u8 = sys_mmap(64)
134 mkneedle(nxb, "next" as *u8)
135 let nxv: *u8 = sys_mmap(K_MAGIC_2048)
136 let nxlen: i64 = c_str_after(buf, n, nxb, nxv, K_MAGIC_2048)
137 let cur: *u8 = sys_mmap(16)
138 cur[0] = 99 as u8; cur[1] = 117 as u8; cur[2] = 114 as u8; cur[3] = 115 as u8; cur[4] = 111 as u8; cur[5] = 114 as u8; cur[6] = 61 as u8; cur[7] = 0 as u8
139 var has_cursor: i64 = 0; if nxlen > 0 { has_cursor = c_count(nxv, nxlen, cur) }
140
141 w(1, "COURT-RECAP findisc parse: bytes=" as *u8); wn(1, n)
142 w(1, " results_arrays=" as *u8); wn(1, results_arr)
143 w(1, " records=" as *u8); wn(1, recs)
144 w(1, " investment_items=" as *u8); wn(1, invs)
145 w(1, " judge_refs=" as *u8); wn(1, persons)
146 w(1, " first_year=" as *u8); wn(1, year)
147 w(1, " first_uri_len=" as *u8); wn(1, rtlen)
148 w(1, " next_cursor_len=" as *u8); wn(1, nxlen)
149 w(1, " has_cursor=" as *u8); wn(1, has_cursor)
150 wc(1, 10)
151
152 var t1: i64 = 0; if n > 1000 { t1 = 1 }
153 var t2: i64 = 0; if results_arr >= 1 { t2 = 1 }
154 var t3: i64 = 0; if recs >= 1 { t3 = 1 }
155 var t4: i64 = 0; if invs >= 1 { t4 = 1 }
156 var t5: i64 = 0; if year >= K_MAGIC_1990 { if year <= K_MAGIC_2030 { t5 = 1 } }
157 var t6: i64 = 0; if neg == 0 { t6 = 1 }
158 var t7: i64 = 0; if rtlen > 0 { if has_cursor == 1 { t7 = 1 } }
159 let pass: i64 = t1 + t2 + t3 + t4 + t5 + t6 + t7
160
161 w(1, "LIAR-KILL loaded=" as *u8); wn(1, t1)
162 w(1, " results_present=" as *u8); wn(1, t2)
163 w(1, " records=" as *u8); wn(1, t3)
164 w(1, " nested_invest=" as *u8); wn(1, t4)
165 w(1, " year_plausible=" as *u8); wn(1, t5)
166 w(1, " neg_control_zero=" as *u8); wn(1, t6)
167 w(1, " cursor_follow=" as *u8); wn(1, t7)
168 wc(1, 10)
169
170 if pass == 7 {
171 w(1, "NX-COURT-RECAP verdict=GREEN parsed-real-CourtListener-financial-disclosure-JSON cursor-follow-ready neg-control-held" as *u8); wc(1, 10)
172 return 0
173 }
174 w(1, "NX-COURT-RECAP verdict=RED" as *u8); wc(1, 10)
175 return 1
176}