code wiki / _hdl_build / nx_diff_cmp.nx

nx_diff_cmp.nx source

↩ module page · 102 lines · 3551 B

1// nx_diff_cmp.nx -- R1-T1-002: the DUAL-LANE DIFFERENTIAL HARNESS organ. 2// Runs the first <batch> corpus programs (knowledge/registry/diff_cmp.conf, 3// bounded-N-per-beat per the T1 card) through BOTH toolchains via nx_dc_core 4// and files findings: 5// DIFFCMP rows per program, DIFFBUG + _dgbug<idx>.nx repro per divergence. 6// FINDINGS ARE SUCCESS: exit 0 with disagree>0 is the instrument WORKING 7// (the rows become pm/T2 fuel); exit nonzero ONLY on infra failure. FIRST 8// LIVE PROBE (2026-06-11, pre-organ): _dgp0 diverged rcA=1 rcB=0 -- the 9// corpus caught a real cross-lane divergence on program ZERO. 10// argv[1]=conf override argv[2]=prefix override (default _dgp) 11// Evidence: DIFFCMP-SUM row -> stdout + knowledge/status/diff_cmp.log. 12// license_tier: ORIGINAL 13 14import "nx_dc_core.nx" 15const K_MAGIC_4096: i64 = 4096 16const K_MAGIC_4095: i64 = 4095 17 18// conf key=N reader (dg_conf shape) 19func dcm_conf(buf: *u8, n: i64, key: *u8, kl: i64, dflt: i64) -> i64 { 20 var i: i64 = 0 21 var at: i64 = 0 - 1 22 while i < n { 23 if i + kl <= n { 24 var k: i64 = 0 25 var hit: i64 = 1 26 while k < kl { 27 if buf[i + k] != key[k] { hit = 0; k = kl } else { k = k + 1 } 28 } 29 if hit == 1 { at = i + kl; i = n } 30 } 31 i = i + 1 32 } 33 if at < 0 { return dflt } 34 var v: i64 = 0 35 var any: i64 = 0 36 var go: i64 = 1 37 while go == 1 { 38 if at >= n { go = 0 } else { 39 let ch: i64 = buf[at] as i64 40 if ch >= 48 { 41 if ch <= 57 { v = v * 10 + (ch - 48); any = 1; at = at + 1 } else { go = 0 } 42 } else { go = 0 } 43 } 44 } 45 if any == 0 { return dflt } 46 return v 47} 48 49func main(argc: i64, argv: *i64) -> i64 { 50 var confp: *u8 = "knowledge/registry/diff_cmp.conf" as *u8 51 var prefix: *u8 = "_dgp" as *u8 52 if argc >= 2 { confp = argv[1] as *u8 } 53 if argc >= 3 { prefix = argv[2] as *u8 } 54 55 let cbuf: *u8 = sys_mmap(K_MAGIC_4096) 56 var cn: i64 = 0 57 let cfd: i64 = sys_openat_rd(confp) 58 if cfd >= 0 { 59 var r: i64 = sys_read(cfd, cbuf, K_MAGIC_4095) 60 while r > 0 { cn = cn + r; r = sys_read(cfd, cbuf + cn, K_MAGIC_4095 - cn) } 61 sys_close(cfd) 62 } 63 let batch: i64 = dcm_conf(cbuf, cn, "batch=" as *u8, 6, 12) 64 65 let lfd: i64 = sys_openat_append("knowledge/status/diff_cmp.log" as *u8, 0x1a4) 66 if lfd < 0 { 67 dc_w(1, "DIFFCMP-SUM verdict=RED reason=log-unwritable\n" as *u8) 68 sys_exit(2) 69 } 70 var agree: i64 = 0 71 var disagree: i64 = 0 72 var infra: i64 = 0 73 var i: i64 = 0 74 while i < batch { 75 let r: i64 = dc_one(prefix, i, lfd) 76 if r == 0 { agree = agree + 1 } 77 if r == 1 { disagree = disagree + 1 } 78 if r < 0 { infra = infra + 1 } 79 i = i + 1 80 } 81 var verdict: *u8 = "GREEN" as *u8 82 var rc: i64 = 0 83 if infra > 0 { verdict = "RED" as *u8; rc = 1 } 84 var p: i64 = 0 85 while p < 2 { 86 var fd: i64 = 1 87 if p == 1 { fd = lfd } 88 if fd >= 0 { 89 dc_w(fd, "DIFFCMP-SUM batch=" as *u8); dc_wn(fd, batch) 90 dc_w(fd, " agree=" as *u8); dc_wn(fd, agree) 91 dc_w(fd, " disagree=" as *u8); dc_wn(fd, disagree) 92 dc_w(fd, " infra=" as *u8); dc_wn(fd, infra) 93 dc_w(fd, " epoch=" as *u8); dc_wn(fd, sys_now_realtime_sec()) 94 dc_w(fd, " verdict=" as *u8); dc_w(fd, verdict) 95 dc_w(fd, "\n" as *u8) 96 } 97 p = p + 1 98 } 99 if lfd >= 0 { sys_close(lfd) } 100 sys_exit(rc) 101 return rc 102}