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}