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}