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}