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}