code wiki / _hdl_build / _diff_gen_gate_authored.nx

_diff_gen_gate_authored.nx source

↩ module page · 190 lines · 7080 B

1// _diff_gen_gate_authored.nx -- gate for R1-T1-001 (the diff-corpus 2// generator). No mocks: runs the REAL organ elf and builds REAL corpus 3// programs through the REAL durable lane. 4// 1. LIVE-200: organ on the real conf -> DIFFGEN n=200 wrote=200 GREEN 5// 2. DET-SAME: same scratch conf twice (prefix _dga) -> hash files byte-eq 6// 3. DET-DIFF: different seed (prefix _dgb) -> hash differs 7// 4. SAMPLE-8: _dgp0.._dgp7 build+run through _offc/nx_sov_build_run.elf; 8// every rc must be in {0,1} (the corpus exit convention) -- 3/4 = lane 9// fail, >128 = crash, anything else = loud RED 10// Markers: DGG-*; final DGGATE row -> knowledge/status/diff_gen.log 11// license_tier: ORIGINAL 12 13import "nx_syscalls.nx" 14 15func dgg_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 16func dgg_f(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 } 17func dgg_n(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;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 } 18 19func dgg_chk(label: *u8, ok: i64, bad: *i64) -> i64 { 20 dgg_p("DGG-" as *u8) 21 dgg_p(label) 22 if ok == 1 { dgg_p(" ok\n" as *u8) } else { dgg_p(" BAD\n" as *u8); bad[0] = bad[0] + 1 } 23 return 0 24} 25 26// spawn elf w/ up to 3 args, stdout -> outpath (append), return exit/sig code 27func dgg_spawn(elf: *u8, a1: *u8, a2: *u8, a3: *u8, outpath: *u8) -> i64 { 28 let pid: i64 = sys_fork() 29 if pid == 0 { 30 let ofd: i64 = sys_openat_append(outpath, 0x1a4) 31 if ofd >= 0 { sys_dup3(ofd, 1, 0); sys_dup3(ofd, 2, 0) } 32 let argv: *i64 = sys_mmap(48) as *i64 33 argv[0] = elf as i64 34 argv[1] = a1 as i64 35 argv[2] = a2 as i64 36 argv[3] = a3 as i64 37 argv[4] = 0 38 if a1 == (0 as *u8) { argv[1] = 0 } 39 let envp: *i64 = sys_mmap(16) as *i64 40 envp[0] = 0 41 sys_execve(elf, argv, envp) 42 sys_exit(127) 43 } 44 let st: *i64 = sys_mmap(16) as *i64 45 sys_wait4(pid, st, 0) 46 let sig: i64 = st[0] & 0x7f 47 if sig != 0 { return 128 + sig } 48 return (st[0] >> 8) & 0xff 49} 50 51func dgg_write(path: *u8, s: *u8) -> i64 { 52 let fd: i64 = sys_openat_wr(path, 0x1a4) 53 if fd < 0 { return 0 } 54 dgg_f(fd, s) 55 sys_close(fd) 56 return 1 57} 58 59func dgg_has(path: *u8, pat: *u8) -> i64 { 60 let buf: *u8 = sys_mmap(262144) 61 let fd: i64 = sys_openat_rd(path) 62 if fd < 0 { return 0 } 63 var n: i64 = 0 64 var r: i64 = sys_read(fd, buf, 262143) 65 while r > 0 { n = n + r; r = sys_read(fd, buf + n, 262143 - n) } 66 sys_close(fd) 67 var pl: i64 = 0 68 while pat[pl] != (0 as u8) { pl = pl + 1 } 69 var i: i64 = 0 70 while i + pl <= n { 71 var k: i64 = 0 72 var hit: i64 = 1 73 while k < pl { 74 if buf[i + k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } 75 } 76 if hit == 1 { return 1 } 77 i = i + 1 78 } 79 return 0 80} 81 82func dgg_fileeq(pa: *u8, pb: *u8) -> i64 { 83 let ba: *u8 = sys_mmap(4096) 84 let bb: *u8 = sys_mmap(4096) 85 let fa: i64 = sys_openat_rd(pa) 86 if fa < 0 { return 0 - 1 } 87 let na: i64 = sys_read(fa, ba, 4095) 88 sys_close(fa) 89 let fb: i64 = sys_openat_rd(pb) 90 if fb < 0 { return 0 - 1 } 91 let nb: i64 = sys_read(fb, bb, 4095) 92 sys_close(fb) 93 if na != nb { return 0 } 94 var i: i64 = 0 95 while i < na { 96 if ba[i] != bb[i] { return 0 } 97 i = i + 1 98 } 99 return 1 100} 101 102func main() -> i64 { 103 let badv: *i64 = sys_mmap(16) as *i64 104 badv[0] = 0 105 dgg_p("=== diff-gen gate (R1-T1-001) ===\n" as *u8) 106 let organ: *u8 = "/tmp/nx_diff_gen.sov.elf" as *u8 107 let probe: i64 = sys_openat_rd(organ) 108 if probe < 0 { 109 dgg_p("DGGATE verdict=RED reason=organ-elf-absent (build nx_diff_gen in this invocation first)\n" as *u8) 110 sys_exit(9) 111 } 112 sys_close(probe) 113 114 // 1. live conf -> 200 programs 115 let rc1: i64 = dgg_spawn(organ, 0 as *u8, 0 as *u8, 0 as *u8, "/tmp/_dgg_live.txt" as *u8) 116 var c: i64 = 0 117 if rc1 == 0 { if dgg_has("/tmp/_dgg_live.txt" as *u8, "DIFFGEN n=200 wrote=200" as *u8) == 1 { c = 1 } } 118 dgg_chk("LIVE-200" as *u8, c, badv) 119 120 // 2. determinism: same scratch conf twice -> identical corpus hash 121 dgg_write("/tmp/_dg_confA.conf" as *u8, "n=12\nseed=777\nmax_stmts=10\n" as *u8) 122 dgg_write("/tmp/_dg_confB.conf" as *u8, "n=12\nseed=778\nmax_stmts=10\n" as *u8) 123 dgg_spawn(organ, "/tmp/_dg_confA.conf" as *u8, "_dga" as *u8, "/tmp/_dg_hA1.txt" as *u8, "/tmp/_dgg_scratch.txt" as *u8) 124 dgg_spawn(organ, "/tmp/_dg_confA.conf" as *u8, "_dga" as *u8, "/tmp/_dg_hA2.txt" as *u8, "/tmp/_dgg_scratch.txt" as *u8) 125 dgg_spawn(organ, "/tmp/_dg_confB.conf" as *u8, "_dgb" as *u8, "/tmp/_dg_hB.txt" as *u8, "/tmp/_dgg_scratch.txt" as *u8) 126 c = 0 127 if dgg_fileeq("/tmp/_dg_hA1.txt" as *u8, "/tmp/_dg_hA2.txt" as *u8) == 1 { c = 1 } 128 dgg_chk("DET-SAME" as *u8, c, badv) 129 c = 0 130 if dgg_fileeq("/tmp/_dg_hA1.txt" as *u8, "/tmp/_dg_hB.txt" as *u8) == 0 { c = 1 } 131 dgg_chk("DET-DIFF" as *u8, c, badv) 132 133 // 4. sample 8 from the live corpus through the DURABLE lane; rc in {0,1} 134 let lane: *u8 = "_offc/nx_sov_build_run.elf" as *u8 135 let nm: *u8 = sys_mmap(64) 136 var built: i64 = 0 137 var i: i64 = 0 138 while i < 8 { 139 var o: i64 = 0 140 nm[0] = 95 as u8 141 nm[1] = 100 as u8 142 nm[2] = 103 as u8 143 nm[3] = 112 as u8 144 o = 4 145 if i == 0 { nm[o] = 48 as u8 } 146 if i == 1 { nm[o] = 49 as u8 } 147 if i == 2 { nm[o] = 50 as u8 } 148 if i == 3 { nm[o] = 51 as u8 } 149 if i == 4 { nm[o] = 52 as u8 } 150 if i == 5 { nm[o] = 53 as u8 } 151 if i == 6 { nm[o] = 54 as u8 } 152 if i == 7 { nm[o] = 55 as u8 } 153 nm[o + 1] = 0 as u8 154 let rc: i64 = dgg_spawn(lane, nm, 0 as *u8, 0 as *u8, "/tmp/_dgg_lane.txt" as *u8) 155 var okrc: i64 = 0 156 if rc == 0 { okrc = 1 } 157 if rc == 1 { okrc = 1 } 158 if okrc == 1 { built = built + 1 } else { 159 dgg_p("DGG-SAMPLE-FAIL idx=" as *u8) 160 dgg_n(1, i) 161 dgg_p(" rc=" as *u8) 162 dgg_n(1, rc) 163 dgg_p("\n" as *u8) 164 } 165 i = i + 1 166 } 167 c = 0 168 if built == 8 { c = 1 } 169 dgg_chk("SAMPLE-8" as *u8, c, badv) 170 171 let lg: i64 = sys_openat_append("knowledge/status/diff_gen.log" as *u8, 0x1a4) 172 var rcg: i64 = 0 173 if badv[0] == 0 { 174 dgg_p("DGGATE checks=4/4 sample=8/8 verdict=GREEN\n" as *u8) 175 if lg >= 0 { 176 dgg_f(lg, "DGGATE checks=4/4 sample=8/8 verdict=GREEN epoch=" as *u8) 177 dgg_n(lg, sys_now_realtime_sec()) 178 dgg_f(lg, "\n" as *u8) 179 } 180 } else { 181 dgg_p("DGGATE verdict=RED bad=" as *u8) 182 dgg_n(1, badv[0]) 183 dgg_p("\n" as *u8) 184 if lg >= 0 { dgg_f(lg, "DGGATE verdict=RED\n" as *u8) } 185 rcg = badv[0] 186 } 187 if lg >= 0 { sys_close(lg) } 188 sys_exit(rcg) 189 return rcg 190}