code wiki / _hdl_build / nx_codata_gate.nx

nx_codata_gate.nx source

↩ module page · 151 lines · 8125 B

1// nx_codata_gate.nx -- R2+R3 of the NIST CODATA external-reference loop: the VERIFY + LIAR-KILL gate that 2// closes it. Reads our registry (sci_constants.tsv) and, for the NIST reference, the SOVEREIGN content- 3// addressed store (nx_seg_store, populated by nx_codata_ingest) -- NOT a TSV. Asserts EVERY constant agrees 4// with NIST. The grade is COMPUTED here, never self-asserted. 5// 6// Reference read: ss_get("knowledge/store/codata-", "codata:<sym>") -> canonical record bytes -> canon_decode 7// -> {value, trunc}. Comparison (robust): split each value into significand + exponent at 'e'. Exponents must 8// match exactly. Significands: if NIST truncated (trunc=1, e.g. reduced Planck / molar gas), our value must 9// START WITH NIST's shown digits; else it must EQUAL them. Honest scope -- parity on the numbers: matching 10// NIST IS the achievement; we never claim to beat the reference. EXCEED is only on the sovereign meta-axes. 11// 12// LIAR-KILL: a baked neg-control proves the comparator can tell a wrong value from a right one BEFORE any 13// verdict. Writes knowledge/status/codata_gate.log. license_tier: ORIGINAL 14import "nx_syscalls.nx" 15import "nx_seg_store.nx" 16import "nx_uxf_decode.nx" 17 18const G_OURS: *u8 = "knowledge/registry/sci_constants.tsv" 19const G_STORE: *u8 = "knowledge/store/codata-" 20const G_LOG: *u8 = "knowledge/status/codata_gate.log" 21 22func gt_read(path: *u8, buf: *u8, cap: i64) -> i64 { 23 let fd: i64 = sys_openat_rd(path) 24 if fd < 0 { return 0 } 25 var n: i64 = 0 26 var r: i64 = sys_read(fd, buf, cap - 1) 27 while r > 0 { n = n + r; if n >= cap - 1 { r = 0 } else { r = sys_read(fd, buf + n, cap - 1 - n) } } 28 sys_close(fd); buf[n] = 0 as u8 29 return n 30} 31func gt_streq(a: *u8, b: *u8) -> i64 { var i: i64=0; while a[i]!=(0 as u8){ if a[i]!=b[i]{return 0} i=i+1 } if b[i]!=(0 as u8){return 0} return 1 } 32func gt_startswith(a: *u8, b: *u8) -> i64 { var i: i64=0; while b[i]!=(0 as u8){ if a[i]!=b[i]{return 0} i=i+1 } return 1 } 33 34func gt_field(buf: *u8, ls: i64, le: i64, col: i64, dst: *u8) -> i64 { 35 var c: i64=0; var p: i64=ls; var k: i64=0 36 while p < le { 37 if buf[p]==(9 as u8) { if c==col { dst[k]=0 as u8; return k } c=c+1; if c==col { k=0 } } 38 else { if c==col { if buf[p]!=(13 as u8) { dst[k]=buf[p]; k=k+1 } } } 39 p = p + 1 40 } 41 dst[k] = 0 as u8 42 return k 43} 44 45func gt_split(v: *u8, sig: *u8, exp: *u8) -> i64 { 46 var i: i64=0; var k: i64=0 47 while v[i]!=(0 as u8){ if v[i]==(101 as u8){break} sig[k]=v[i]; k=k+1; i=i+1 } 48 sig[k]=0 as u8 49 if v[i]==(101 as u8){ i=i+1; var j: i64=0; while v[i]!=(0 as u8){exp[j]=v[i];j=j+1;i=i+1} exp[j]=0 as u8 } else { exp[0]=0 as u8 } 50 return 0 51} 52func gt_cmp(our: *u8, nist: *u8, trunc: i64) -> i64 { 53 let osig: *u8=sys_mmap(128); let oexp: *u8=sys_mmap(64); let nsig: *u8=sys_mmap(128); let nexp: *u8=sys_mmap(64) 54 gt_split(our, osig, oexp); gt_split(nist, nsig, nexp) 55 if gt_streq(oexp, nexp) != 1 { return 0 } 56 if trunc==1 { if gt_startswith(osig, nsig)==1 { return 1 } return 0 } 57 if gt_streq(osig, nsig)==1 { return 1 } 58 return 0 59} 60 61func gt_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 } 62func gt_wn(fd: i64, v: i64) -> i64 { let b: *u8=sys_mmap(16); var m: i64=v; let t: *u8=sys_mmap(16); 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{b[i]=t[k-1-i];i=i+1}; sys_write(fd,b,k); return 0 } 63 64// fetch the NIST reference for sym from the sovereign store -> nistv, trunc. 1 found / 0 absent. 65func gt_ref(sym: *u8, nistv: *u8, trunc_ptr: *i64) -> i64 { 66 let kb: *u8 = sys_mmap(128); var kn: i64=0 67 let kp: *u8 = "codata:" as *u8; var i: i64=0 68 while kp[i]!=(0 as u8){ kb[kn]=kp[i]; kn=kn+1; i=i+1 } 69 i=0; while sym[i]!=(0 as u8){ kb[kn]=sym[i]; kn=kn+1; i=i+1 } kb[kn]=0 as u8 70 let gp: *i64 = sys_mmap(8) as *i64; let gl: *i64 = sys_mmap(8) as *i64 71 if ss_get(G_STORE, kb, gp, gl) != 1 { return 0 } 72 let dk: *i64 = sys_mmap(8*8) as *i64; let dv: *i64 = sys_mmap(8*8) as *i64 73 let nf: i64 = canon_decode(gp[0] as *u8, gl[0], dk, dv, 8) 74 if nf < 0 { return 0 } 75 trunc_ptr[0] = 0 76 var found_v: i64 = 0; var fi: i64=0 77 while fi < nf { 78 if gt_streq(dk[fi] as *u8, "value" as *u8)==1 { var z: i64=0; let vp: *u8=dv[fi] as *u8; while vp[z]!=(0 as u8){nistv[z]=vp[z];z=z+1} nistv[z]=0 as u8; found_v=1 } 79 if gt_streq(dk[fi] as *u8, "trunc" as *u8)==1 { let tp: *u8=dv[fi] as *u8; if tp[0]==(49 as u8){trunc_ptr[0]=1} } 80 fi = fi + 1 81 } 82 return found_v 83} 84 85func main() -> i64 { 86 let cb: *u8 = sys_mmap(131072); let cn: i64 = gt_read(G_OURS, cb, 131072) 87 if cn <= 0 { gt_w(2, "CODATA-GATE verdict=RED reason=no-registry\n" as *u8); sys_exit(11); return 11 } 88 89 // LIAR-KILL neg-control: the comparator MUST distinguish wrong from right before any verdict. 90 var nc: i64 = 1 91 if gt_cmp("299792458" as *u8, "299792458" as *u8, 0) != 1 { nc = 0 } 92 if gt_cmp("9.1093837015e-31" as *u8, "9.1093837139e-31" as *u8, 0) != 0 { nc = 0 } 93 if gt_cmp("8.31446261815324" as *u8, "8.314462618" as *u8, 1) != 1 { nc = 0 } 94 if gt_cmp("1.602176634e-19" as *u8, "1.602176634e-20" as *u8, 0) != 0 { nc = 0 } 95 96 let sym: *u8 = sys_mmap(256); let ourv: *u8 = sys_mmap(128); let nistv: *u8 = sys_mmap(128); let trs: *i64 = sys_mmap(8) as *i64 97 var compared: i64=0; var agree: i64=0; var disagree: i64=0; var missing: i64=0 98 let rep: *u8 = sys_mmap(65536); var rw: i64=0 99 100 var ls: i64=0; var i: i64=0 101 while i <= cn { 102 var eol: i64=0 103 if i==cn { eol=1 } else { if cb[i]==(10 as u8) { eol=1 } } 104 if eol==1 { 105 if i>ls { if cb[ls]!=(35 as u8) { 106 gt_field(cb, ls, i, 0, sym) 107 if sym[0]!=(0 as u8) { 108 gt_field(cb, ls, i, 2, ourv) 109 if gt_ref(sym, nistv, trs) == 1 { 110 compared = compared + 1 111 let ok: i64 = gt_cmp(ourv, nistv, trs[0]) 112 if ok==1 { agree=agree+1 } else { disagree=disagree+1 } 113 var a: i64=0; while sym[a]!=(0 as u8){rep[rw]=sym[a];rw=rw+1;a=a+1} rep[rw]=32 as u8; rw=rw+1 114 if ok==1 { let g: *u8="AGREE "; var b: i64=0; while g[b]!=(0 as u8){rep[rw]=g[b];rw=rw+1;b=b+1} } else { let g: *u8="DISAGREE"; var b: i64=0; while g[b]!=(0 as u8){rep[rw]=g[b];rw=rw+1;b=b+1} } 115 let lo: *u8=" ours="; var c2: i64=0; while lo[c2]!=(0 as u8){rep[rw]=lo[c2];rw=rw+1;c2=c2+1} 116 a=0; while ourv[a]!=(0 as u8){rep[rw]=ourv[a];rw=rw+1;a=a+1} 117 let ln: *u8=" nist="; c2=0; while ln[c2]!=(0 as u8){rep[rw]=ln[c2];rw=rw+1;c2=c2+1} 118 a=0; while nistv[a]!=(0 as u8){rep[rw]=nistv[a];rw=rw+1;a=a+1} 119 let sf: *u8=" (seg_store)"; c2=0; while sf[c2]!=(0 as u8){rep[rw]=sf[c2];rw=rw+1;c2=c2+1} 120 rep[rw]=10 as u8; rw=rw+1 121 } else { missing = missing + 1 } 122 } 123 } } 124 ls = i + 1 125 } 126 i = i + 1 127 } 128 129 var ok_all: i64=0 130 if nc==1 { if missing==0 { if disagree==0 { if agree==12 { ok_all=1 } } } } 131 132 var p2: i64=0 133 while p2 < 2 { 134 var fd: i64=1 135 if p2==1 { fd = sys_openat_append(G_LOG, 0x1a4) } 136 if fd >= 0 { 137 gt_w(fd, "CODATA-GATE compared=" as *u8); gt_wn(fd, compared) 138 gt_w(fd, " agree=" as *u8); gt_wn(fd, agree) 139 gt_w(fd, " disagree=" as *u8); gt_wn(fd, disagree) 140 gt_w(fd, " missing=" as *u8); gt_wn(fd, missing) 141 gt_w(fd, " negctrl=" as *u8); if nc==1 { gt_w(fd, "OK" as *u8) } else { gt_w(fd, "FAIL" as *u8) } 142 gt_w(fd, " ref=NIST-CODATA-2022(sovereign-seg_store) model=sig+exp-trunc-aware" as *u8) 143 if ok_all==1 { gt_w(fd, " verdict=GREEN\n" as *u8) } else { gt_w(fd, " verdict=RED\n" as *u8) } 144 sys_write(fd, rep, rw) 145 if p2==1 { sys_close(fd) } 146 } 147 p2 = p2 + 1 148 } 149 if ok_all==1 { sys_exit(0); return 0 } 150 sys_exit(1); return 1 151}