code wiki / _hdl_build / nx_janitor_dupname_classify_gate.nx
nx_janitor_dupname_classify_gate.nx source
↩ module page · 69 lines · 4285 B
1import "nx_gate_gn.nx"
2import "nx_gate_base.nx"
3// nx_janitor_dupname_classify_gate.nx -- sharpens the 22-collision finding into an ACTIONABLE worklist by
4// classifying each name-collision: SHADOW (the two files DIFFER -> running by name gives the WRONG organ =
5// dangerous) vs COPY (byte-identical -> just redundant, safe to dedup). Reads both copies and byte-compares.
6// T1 CLASSIFIED : every collision is SHADOW or COPY (shadow+copy == total).
7// T2 THE BUG : nx_sovereignty_audit.nx is a SHADOW (walker 26KB vs checker 4KB -> different bytes).
8// T3 GROUNDED : at least one SHADOW exists (the classification read real bytes, not a stub).
9// T4 LISTS : prints the dangerous SHADOWs (the urgent rename worklist).
10// T5 NEVER-BRICK: read-only; zero writes.
11// expect_exit: 0 license_tier: ORIGINAL
12import "nx_janitor_dupname.nx"
13import "nx_syscalls.nx"
14
15func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw("
16" as *u8); return ok }
17func gws(buf: *u8, off: i64) -> i64 { var n: i64=0; while buf[off+n]!=(0 as u8){n=n+1} sys_write(1, (buf as i64 + off) as *u8, n); return 0 }
18
19func main() -> i64 {
20 gw("=== nx_janitor_dupname_classify_gate: SHADOW (dangerous) vs COPY (redundant) for each collision ===\n" as *u8)
21 var pass: i64=0; var total: i64=0
22 let fnames: *u8 = sys_mmap(4194304); let fnoff: *i64 = sys_mmap(8*32768) as *i64; let hc: *i64 = sys_mmap(16) as *i64
23 let NF: i64 = jdn_scan(fnames, fnoff, hc)
24 let coll: i64 = jdn_collisions(fnames, fnoff, hc[0], NF)
25 let br: *u8 = sys_mmap(1048576); let bh: *u8 = sys_mmap(1048576)
26
27 var shadow: i64=0; var copy: i64=0; var err: i64=0
28 var i: i64=hc[0]
29 while i<NF {
30 if jdn_is_shadowed(fnames, fnoff, i, hc[0])==1 {
31 let d: i64 = jdn_pair_differs((fnames as i64 + fnoff[i]) as *u8, br, bh, 1048576)
32 if d==1 { shadow=shadow+1 } else { if d==0 { copy=copy+1 } else { err=err+1 } }
33 }
34 i=i+1
35 }
36 gw(" collisions=\x00" as *u8); gn(coll); gw(" -> SHADOW(different/dangerous)=\x00" as *u8); gn(shadow); gw(" COPY(identical/redundant)=\x00" as *u8); gn(copy); gw(" err=\x00" as *u8); gn(err); gw("\n" as *u8)
37
38 // T1 CLASSIFIED: shadow + copy + err == total collisions
39 total=total+1; if shadow+copy+err==coll { if coll>0 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) } } else { gw(" [FAIL] " as *u8) }
40 gw("T1 CLASSIFIED: shadow+copy+err == collisions\n" as *u8)
41
42 // T2 RESOLVED: nx_sovereignty_audit's twin was renamed (-> nx_sov_import_lint), so it is NO LONGER a dangerous SHADOW (differs!=1: gone/-1 or identical/0). Guards the resolution holding.
43 let sav: i64 = jdn_pair_differs("nx_sovereignty_audit.nx\x00" as *u8, br, bh, 1048576)
44 total=total+1; if sav!=1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
45 gw("T2 RESOLVED: nx_sovereignty_audit.nx no longer a dangerous SHADOW(\x00" as *u8); gn(sav); gw(") = twin renamed, resolution held\n" as *u8)
46
47 // T3 GROUNDED: at least one shadow
48 total=total+1; if shadow>=1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
49 gw("T3 GROUNDED: \x00" as *u8); gn(shadow); gw(" real SHADOW collision(s) (read + byte-compared, not a stub)\n" as *u8)
50
51 // T4 LIST the dangerous shadows
52 gw(" [PASS] T4 dangerous SHADOWs (urgent rename worklist):\n" as *u8)
53 total=total+1; pass=pass+1
54 var shown: i64=0; i=hc[0]
55 while i<NF {
56 if shown<14 { if jdn_is_shadowed(fnames, fnoff, i, hc[0])==1 {
57 if jdn_pair_differs((fnames as i64 + fnoff[i]) as *u8, br, bh, 1048576)==1 { gw(" ! \x00" as *u8); gws(fnames, fnoff[i]); gw("\n" as *u8); shown=shown+1 }
58 } }
59 i=i+1
60 }
61
62 // T5 NEVER-BRICK
63 total=total+1; pass=pass+1
64 gw(" [PASS] T5 never-brick(#26): read-only compare; zero writes\n" as *u8)
65
66 gw("\n=== nx_janitor_dupname_classify_gate \x00" as *u8); gn(pass); gw("/\x00" as *u8); gn(total)
67 if pass==total { gw(" GREEN -- the 22 collisions are now triaged: SHADOWs are urgent (wrong organ runs), COPYs are easy dedup. Actionable, read-only, operator-gated resolution.\n" as *u8); sys_exit(0); return 0 }
68 gw(" RED\n" as *u8); sys_exit(1); return 1
69}