code wiki / _hdl_build / nx_compare_registry_assemble.nx
nx_compare_registry_assemble.nx source
↩ module page · 187 lines · 11834 B
1// nx_compare_registry_assemble.nx -- SOTA durability: the /compare registry SELF-ASSEMBLES from ground truth so
2// the multi-session-contention staleness bug (a stale local subset regenerates a hub that DROPS other sessions'
3// cards) CANNOT recur (operator 2026-07-10: "do sota"). Reconciles against the LIVE hub (fetched over sovereign
4// TLS = the real 41-card ground truth), extracting every card back into a registry line (title|kind|href|radar|
5// stat), then UNIONs any local *.matrix domain not already present. The result can only GROW. LIAR-KILL: the
6// assembled registry MUST carry >= the live hub's card count (a regression aborts, never writes). Writes
7// knowledge/compare/registry_full (candidate SSOT). Downstream: regen hub FROM it, verify >= live, publish w/
8// rollback. license_tier: ORIGINAL expect_exit: 0
9import "nx_syscalls.nx"
10import "nx_x509_trust_store.nx"
11import "nx_trust_store_load_from_certdata.nx"
12import "nx_https_fetch_follow.nx"
13const K_MAGIC_4194304: i64 = 4194304
14const K_MAGIC_262144: i64 = 262144
15const K_MAGIC_4096: i64 = 4096
16const K_MAGIC_8192: i64 = 8192
17const K_MAGIC_16384: i64 = 16384
18
19func 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 }
20func wn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(fd,"-" as *u8,1)} 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{bb[i]=t[k-1-i];i=i+1} sys_write(fd,bb,k); return 0 }
21func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
22// find needle in hay[from..n); return absolute index or -1
23func findf(hay: *u8, from: i64, n: i64, needle: *u8) -> i64 {
24 let m: i64 = slen(needle); if m==0 { return 0-1 }
25 var i: i64 = from
26 while i + m <= n { var j: i64=0; var ok: i64=1; while j<m { if hay[i+j]!=needle[j]{ok=0;j=m}else{j=j+1} } if ok==1{return i} i=i+1 }
27 return 0-1
28}
29func count_in(hay: *u8, n: i64, needle: *u8) -> i64 { var c: i64=0; var p: i64=0; var q: i64=findf(hay,p,n,needle); while q>=0 { c=c+1; q=findf(hay,q+1,n,needle) } return c }
30// append raw bytes [s,s+len) of src to dst at off; return new off
31func app(dst: *u8, off: i64, src: *u8, s: i64, len: i64) -> i64 { var i: i64=0; while i<len { dst[off+i]=src[s+i]; i=i+1 } return off+len }
32func apstr(dst: *u8, off: i64, str: *u8) -> i64 { var i: i64=0; while str[i]!=(0 as u8){dst[off+i]=str[i];i=i+1} return off+i }
33func write_file(path: *u8, buf: *u8, n: i64) -> i64 { let fd: i64=sys_openat_wr(path,420); if fd<0{return 0-1} sys_write(fd,buf,n); sys_close(fd); return n }
34func read_file(path: *u8, buf: *u8, cap: i64) -> i64 { let fd: i64=sys_openat_rd(path); if fd<0{return 0-1} var tot: i64=0; while tot<cap { let r: i64=sys_read(fd,(buf as i64+tot) as *u8,cap-tot); if r<=0{break} tot=tot+r } sys_close(fd); return tot }
35
36func main() -> i64 {
37 let r: i64 = nx_trust_store_load_from_certdata("data/mozilla_certdata.txt" as *u8, 512, K_MAGIC_4194304)
38 if r <= 0 { w(1, "ASSEMBLE: certdata load failed\n" as *u8); return 1 }
39 let store: *TrustStore = r as *TrustStore
40 let cap: i64 = K_MAGIC_4194304
41 let hub: *u8 = sys_mmap(cap)
42 let status: *i64 = sys_mmap(8) as *i64
43 w(1, "=== nx_compare_registry_assemble -- reconcile registry against the LIVE hub (self-assembling SSOT) ===\n")
44 let n: i64 = nx_https_fetch_follow("https://nishifamily.com/compare" as *u8, store, hub, cap, 6, status)
45 w(1, " live hub status="); wn(1, status[0]); w(1, " bytes="); wn(1, n); w(1, "\n")
46 let livecards: i64 = count_in(hub, n, "class='card'" as *u8)
47 w(1, " live cards="); wn(1, livecards); w(1, "\n")
48 if livecards < 8 { w(1, "ASSEMBLE: RED live hub < 8 cards -- refusing\n" as *u8); return 1 }
49
50 let reg: *u8 = sys_mmap(K_MAGIC_262144)
51 var ro: i64 = 0
52 ro = apstr(reg, ro, "# Nishi Compare registry -- SELF-ASSEMBLED from the live hub (ground truth) + local *.matrix union.\n" as *u8)
53 ro = apstr(reg, ro, "# Regenerated by nx_compare_registry_assemble (2026-07-10) to kill multi-session staleness. title|kind|href|radar|stat\n" as *u8)
54
55 // extract each card: <a class='card' href='HREF'><h2>TITLE <span class='pill KIND'>KIND</span></h2><div class='stat'>STAT</div></a>
56 // then an optional following <p class='frl'><a href='RADAR'>
57 let hrefbuf: *u8 = sys_mmap(K_MAGIC_4096) // to dedupe hrefs (store null-joined)
58 var hn: i64 = 0
59 var emitted: i64 = 0
60 var pos: i64 = 0
61 var going: i64 = 1
62 while going == 1 {
63 let c0: i64 = findf(hub, pos, n, "<a class='card' href='" as *u8)
64 if c0 < 0 { going = 0 } else {
65 let hs: i64 = c0 + 22
66 let he: i64 = findf(hub, hs, n, "'" as *u8)
67 // title between <h2> and " <span"
68 let h2: i64 = findf(hub, he, n, "<h2>" as *u8)
69 let ts: i64 = h2 + 4
70 var te: i64 = findf(hub, ts, n, " <span" as *u8)
71 let span: i64 = findf(hub, ts, n, "<span" as *u8)
72 // kind between the pill '>' and </span>
73 let pg: i64 = findf(hub, span, n, ">" as *u8)
74 let ks: i64 = pg + 1
75 let ke: i64 = findf(hub, ks, n, "</span>" as *u8)
76 // stat between <div class='stat'> and </div>
77 let ds: i64 = findf(hub, ke, n, "class='stat'>" as *u8)
78 let sts: i64 = ds + 13
79 let ste: i64 = findf(hub, sts, n, "</div>" as *u8)
80 // card end
81 let ae: i64 = findf(hub, ste, n, "</a>" as *u8)
82 // optional radar in the frl block before the NEXT card
83 let nextc: i64 = findf(hub, ae, n, "<a class='card'" as *u8)
84 var rs: i64 = 0 - 1
85 var re: i64 = 0 - 1
86 let frl: i64 = findf(hub, ae, n, "class='frl'" as *u8)
87 if frl >= 0 { if nextc < 0 { if frl >= 0 { rs = 0 } } }
88 if frl >= 0 { var frlok: i64 = 1; if nextc >= 0 { if frl > nextc { frlok = 0 } } if frlok == 1 {
89 let ra: i64 = findf(hub, frl, n, "href='" as *u8)
90 rs = ra + 6
91 re = findf(hub, rs, n, "'" as *u8)
92 } }
93 if he > hs { if te > ts { if ke > ks { if ste > sts { if ae > 0 {
94 // dedupe by href
95 var dup: i64 = 0
96 var hp: i64 = 0
97 while hp < hn { var mm: i64=1; var q: i64=0; while q < (he - hs) { if hrefbuf[hp+q] != hub[hs+q] { mm=0; q=he-hs } else { q=q+1 } } if mm==1 { if hrefbuf[hp+(he-hs)]==(0 as u8) { dup=1 } } hp=hp+1 }
98 if dup == 0 {
99 // record href
100 hp = app(hrefbuf, hn, hub, hs, he-hs); hrefbuf[hp]=0 as u8; hn = hp+1
101 // emit: title|kind|href|radar-or-dash|stat
102 ro = app(reg, ro, hub, ts, te-ts); ro = apstr(reg, ro, "|" as *u8)
103 ro = app(reg, ro, hub, ks, ke-ks); ro = apstr(reg, ro, "|" as *u8)
104 ro = app(reg, ro, hub, hs, he-hs); ro = apstr(reg, ro, "|" as *u8)
105 if re > rs { ro = app(reg, ro, hub, rs, re-rs) } else { ro = apstr(reg, ro, "-" as *u8) }
106 ro = apstr(reg, ro, "|" as *u8)
107 ro = app(reg, ro, hub, sts, ste-sts)
108 ro = apstr(reg, ro, "\n" as *u8)
109 emitted = emitted + 1
110 }
111 } } } } }
112 pos = c0 + 22
113 }
114 }
115 w(1, " extracted registry lines from live hub="); wn(1, emitted); w(1, "\n")
116
117 // ---- UNION: local rendered domains (knowledge/compare/regen.list) not yet in the live hub. A NEW
118 // .sota/.matrix domain enters the registry on its FIRST publish WITHOUT a hand-bootstrap -> kills the
119 // hub lost-update race class (debt seq68): assemble is now complete-by-construction, can only grow.
120 let rl: *u8 = sys_mmap(K_MAGIC_8192)
121 let rln: i64 = read_file("knowledge/compare/regen.list" as *u8, rl, K_MAGIC_8192)
122 let uhp: *u8 = sys_mmap(256)
123 let usp: *u8 = sys_mmap(256)
124 let utb: *u8 = sys_mmap(K_MAGIC_16384)
125 let uqp: *u8 = sys_mmap(256)
126 var unioned: i64 = 0
127 if rln > 0 {
128 var rp: i64 = 0
129 while rp < rln {
130 var re2: i64 = rp
131 while re2 < rln { if rl[re2] == (10 as u8) { break } re2 = re2 + 1 }
132 if re2 > rp { if rl[rp] != (35 as u8) {
133 let sl: i64 = re2 - rp
134 var ho: i64 = apstr(uhp, 0, "/compare/" as *u8)
135 ho = app(uhp, ho, rl, rp, sl)
136 uhp[ho] = 124 as u8; ho = ho + 1; uhp[ho] = 0 as u8
137 if findf(reg, 0, ro, uhp) < 0 {
138 var so: i64 = apstr(usp, 0, "knowledge/compare/" as *u8)
139 so = app(usp, so, rl, rp, sl); so = apstr(usp, so, ".sota" as *u8); usp[so] = 0 as u8
140 var tn: i64 = read_file(usp, utb, K_MAGIC_16384)
141 if tn <= 0 {
142 so = apstr(usp, 0, "knowledge/compare/" as *u8)
143 so = app(usp, so, rl, rp, sl); so = apstr(usp, so, ".matrix" as *u8); usp[so] = 0 as u8
144 tn = read_file(usp, utb, K_MAGIC_16384)
145 }
146 var qo: i64 = apstr(uqp, 0, "knowledge/compare/" as *u8)
147 qo = app(uqp, qo, rl, rp, sl); qo = apstr(uqp, qo, ".q" as *u8); uqp[qo] = 0 as u8
148 let qfd: i64 = sys_openat_rd(uqp)
149 var hasq: i64 = 0
150 if qfd >= 0 { hasq = 1; sys_close(qfd) }
151 var ta: i64 = 0 - 1
152 var te: i64 = 0
153 if tn > 0 {
154 let ti: i64 = findf(utb, 0, tn, "@title " as *u8)
155 if ti >= 0 { ta = ti + 7; te = ta; while te < tn { if utb[te] == (10 as u8) { break } te = te + 1 } }
156 }
157 // only union a RENDERABLE domain (has a real .sota/.matrix) -- skips stale regen.list
158 // stubs (e.g. a bare name with no page) so we never emit a card that 404s.
159 if tn > 0 {
160 if ta >= 0 { ro = app(reg, ro, utb, ta, te - ta) } else { ro = app(reg, ro, rl, rp, sl) }
161 ro = apstr(reg, ro, "|live|/compare/" as *u8)
162 ro = app(reg, ro, rl, rp, sl)
163 ro = apstr(reg, ro, "|" as *u8)
164 if hasq == 1 { ro = apstr(reg, ro, "/compare/" as *u8); ro = app(reg, ro, rl, rp, sl); ro = apstr(reg, ro, "/frontier" as *u8) } else { ro = apstr(reg, ro, "-" as *u8) }
165 ro = apstr(reg, ro, "|auto-unioned from regen.list (not yet in live hub)\n" as *u8)
166 unioned = unioned + 1
167 emitted = emitted + 1
168 }
169 }
170 } }
171 rp = re2 + 1
172 }
173 }
174 w(1, " unioned local regen.list domains not in live hub="); wn(1, unioned); w(1, "\n")
175
176 // LIAR-KILL: must not regress below live card count
177 if emitted < livecards { w(1, "ASSEMBLE: RED extracted "); wn(1, emitted); w(1, " < live "); wn(1, livecards); w(1, " -- extraction lossy, refusing to write\n" as *u8); return 1 }
178
179 write_file("knowledge/compare/registry_full" as *u8, reg, ro)
180 w(1, " wrote knowledge/compare/registry_full ("); wn(1, ro); w(1, " bytes, "); wn(1, emitted); w(1, " domains)\n" as *u8)
181 // sanity: instrument present
182 let hasinst: i64 = count_in(reg, ro, "/compare/instrument" as *u8)
183 w(1, " instrument in assembled registry="); wn(1, hasinst); w(1, "\n")
184 if hasinst < 1 { w(1, "ASSEMBLE: RED instrument missing from assembled registry\n" as *u8); return 1 }
185 w(1, "ASSEMBLE: GREEN -- registry_full = "); wn(1, emitted); w(1, " domains (>= live "); wn(1, livecards); w(1, "), instrument present, can only grow\n" as *u8)
186 return 0
187}