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}