code wiki / _hdl_build / nx_dedupe_source.nx
nx_dedupe_source.nx source
↩ module page · 73 lines · 4064 B
1// nx_dedupe_source.nx -- CLI: resolve a seq207/seq169 dual-copy source divergence the sovereign way.
2// The RESOLUTION half of the mgmt build guard's DETECTION (ma_build_dup_divergent). Reusable ecosystem-wide.
3// usage: nx_dedupe_source --kat (self-test: reconcile/no-op/refuse/idempotent oracle)
4// nx_dedupe_source <target> [canonical_dir] [shadow_dir]
5// nx_dedupe_source check <target> [canonical_dir] [shadow_dir]
6// The directory pair is OPTIONAL and defaults to the historical _hdl_build <- runtime pair, so every
7// existing caller is unchanged. It exists because the DETECTOR (nx_dup_source_check) discovers ~13
8// source trees while this reconciler knew only two -- hazards in bin/, _retired/ or a nested
9// runtime/runtime/ reported dual_copy:0 and could never be cleared, leaving the board permanently RED.
10// license_tier: ORIGINAL expect_exit: 0 genealogy: seq207 dual-copy class
11import "nx_dedupe_source_lib.nx"
12
13func main(argc: i64, argv: *i64) -> i64 {
14 if argc>=2 {
15 let a1: *u8 = argv[1] as *u8
16 if a1[0]==(45 as u8) {
17 ds_w("=== nx_dedupe_source --kat (dual-copy reconcile: soft-delete the stale twin) ===\
18" as *u8)
19 let f: i64 = ds_selftest()
20 ds_w("checks failed=" as *u8); ds_w_num(f); ds_w(" (reconcile+gone+backup, no-op benign, refuse-no-canonical, idempotent)\
21" as *u8)
22 if f==0 { ds_w("VERDICT=GREEN\
23" as *u8); sys_exit(0); return 0 }
24 ds_w("VERDICT=RED\
25" as *u8); sys_exit(1); return 1
26 }
27 // `check <target>` = report only (no mutation)
28 var vl: i64=0; while a1[vl]!=(0 as u8){vl=vl+1}
29 if vl==5 { if a1[0]==(99 as u8) { if a1[1]==(104 as u8) {
30 if argc<3 { ds_w("usage: nx_dedupe_source check <target>\
31" as *u8); sys_exit(2); return 2 }
32 let nm2: *u8 = sys_mmap(128)
33 if ds_sanitize(argv[2] as *u8, nm2, 120)<0 { ds_w("{\"error\":\"bad target name\"}\
34" as *u8); sys_exit(2); return 2 }
35 // optional explicit tree pair: check <target> [canonical_dir] [shadow_dir]
36 let canon: *u8 = sys_mmap(512)
37 var c: i64 = 0
38 if argc >= 4 { c = ds_cat(canon, 0, argv[3] as *u8) } else { c = ds_cat(canon, 0, "buildroot/runtime/_hdl_build/" as *u8) }
39 c = ds_cat(canon, c, nm2); c = ds_cat(canon, c, ".nx" as *u8)
40 let shadow: *u8 = sys_mmap(512)
41 var s: i64 = 0
42 if argc >= 5 { s = ds_cat(shadow, 0, argv[4] as *u8) } else { s = ds_cat(shadow, 0, "buildroot/runtime/" as *u8) }
43 s = ds_cat(shadow, s, nm2); s = ds_cat(shadow, s, ".nx" as *u8)
44 let both: i64 = ds_exists(canon)*ds_exists(shadow)
45 let o: *u8 = sys_mmap(512)
46 var p: i64 = ds_cat(o, 0, "{\"organ\":\"nx_dedupe_source\",\"verb\":\"check\",\"target\":\"" as *u8)
47 p = ds_cat(o, p, nm2); p = ds_cat(o, p, "\",\"dual_copy\":" as *u8); p = ds_catn(o, p, both)
48 p = ds_cat(o, p, ",\"canonical_bytes\":" as *u8); p = ds_catn(o, p, ds_filesize(canon))
49 p = ds_cat(o, p, ",\"shadow_bytes\":" as *u8); p = ds_catn(o, p, ds_filesize(shadow))
50 p = ds_cat(o, p, "}\
51" as *u8)
52 sys_write(1, o, p)
53 sys_exit(0); return 0
54 } } }
55 // default: resolve the named target
56 let nm: *u8 = sys_mmap(128)
57 if ds_sanitize(a1, nm, 120)<0 { ds_w("{\"error\":\"bad target name (only [a-zA-Z0-9_])\"}\
58" as *u8); sys_exit(2); return 2 }
59 // optional explicit tree pair: <target> [canonical_dir] [shadow_dir]
60 var cdir: *u8 = 0 as *u8
61 var sdir: *u8 = 0 as *u8
62 if argc >= 3 { cdir = argv[2] as *u8 }
63 if argc >= 4 { sdir = argv[3] as *u8 }
64 let code: i64 = ds_resolve_pair(nm, cdir, sdir, 1)
65 if code==2 { sys_exit(2); return 2 }
66 if code==3 { sys_exit(3); return 3 }
67 if code==4 { sys_exit(4); return 4 }
68 sys_exit(0); return 0
69 }
70 ds_w("usage: nx_dedupe_source --kat | <target> | check <target>\
71" as *u8)
72 sys_exit(2); return 2
73}