code wiki / _hdl_build / nx_ecomat_put_gate.nx

nx_ecomat_put_gate.nx source

↩ module page · 78 lines · 4687 B

1// nx_ecomat_put_gate.nx -- gate for acl F771. PROVES the store-native domain add is APPEND (preserves 2// existing domains) on a THROWAWAY store, before nx_ecomat_put ever touches the live maturity store. 3// T1 seed 3 domains -> add a 4th via _offc/nx_ecomat_put.elf -> all 4 present (add-preserves-others) 4// T2 the added id3 carries the right domain string 5// T3 id4 absent (no over-add) -- NEGATIVE CONTROL 6// Unique per-run prefix (epoch) so the append-only /tmp store stays deterministic. license_tier: ORIGINAL 7import "nx_ecomat_lib.nx" 8import "nx_seg_store.nx" 9import "nx_tool_run.nx" 10import "nx_gate_verdict.nx" 11 12func g_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 13func g_wn(fd: i64, v: i64) -> i64 { var m: i64 = v; if m < 0 { g_w(fd, "-" as *u8); m = 0 - m } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } let o: *u8 = sys_mmap(28); var i: i64 = 0; while i < k { o[i] = t[k-1-i]; i = i + 1 } sys_write(fd, o, k); return 0 } 14func g_catn(buf: *u8, off: i64, v: i64) -> i64 { var m: i64 = v; if m < 0 { m = 0 } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var o: i64 = off; var i: i64 = 0; while i < k { buf[o] = t[k-1-i]; o = o + 1; i = i + 1 } return o } 15func main() -> i64 { 16 // unique throwaway prefix per run: /tmp/ecp<epoch>- 17 let pfx: *u8 = sys_mmap(64) 18 var o: i64 = 0 19 let base: *u8 = "/tmp/ecp" as *u8 20 var bi: i64 = 0 21 while base[bi] != (0 as u8) { pfx[o] = base[bi]; o = o + 1; bi = bi + 1 } 22 o = g_catn(pfx, o, sys_now_realtime_sec()) 23 pfx[o] = 45 as u8; o = o + 1 24 pfx[o] = 0 as u8 25 26 // seed 3 domains (ids 0,1,2) 27 let w: *i64 = ss_begin() 28 ec_seed_one(w, 0, 0, 1, 3, 5, 7, 1, "alpha" as *u8, "b0" as *u8, "n0" as *u8) 29 ec_seed_one(w, 1, 1, 1, 2, 5, 6, 1, "bravo" as *u8, "b1" as *u8, "n1" as *u8) 30 ec_seed_one(w, 2, 2, 1, 2, 5, 6, 1, "charlie" as *u8, "b2" as *u8, "n2" as *u8) 31 ss_commit(pfx, w, sys_now_realtime_sec()) 32 33 // add a 4th via the organ: addauto axis=1 layer=1 cur=2 bar=5 weight=7 domain=delta ... prefix=pfx 34 let av: *i64 = sys_mmap(128) as *i64 35 av[0] = "_offc/nx_ecomat_put.elf" as i64 36 av[1] = "addauto" as i64 37 av[2] = "1" as i64; av[3] = "1" as i64; av[4] = "2" as i64; av[5] = "5" as i64; av[6] = "7" as i64 38 av[7] = "delta" as i64; av[8] = "bd" as i64; av[9] = "nd" as i64 39 av[10] = "" as i64; av[11] = "" as i64; av[12] = pfx as i64; av[13] = 0 40 let ocap: i64 = 4096 41 let out: *u8 = sys_mmap(ocap) 42 let ol: *i64 = sys_mmap(16) as *i64 43 tr_run_capture("_offc/nx_ecomat_put.elf" as *u8, av, out, ocap, ol) 44 45 // verify against the throwaway store 46 let h: *i64 = ss_open(pfx) 47 let pq: *i64 = sys_mmap(16) as *i64 48 let lq: *i64 = sys_mmap(16) as *i64 49 var present: i64 = 0 50 var id: i64 = 0 51 while id < 4 { 52 let key: *u8 = sys_mmap(64); ec_key(id, key) 53 if ss_hget(h, key, pq, lq) == 1 { present = present + 1 } 54 id = id + 1 55 } 56 var dom3ok: i64 = 0 57 let k3: *u8 = sys_mmap(64); ec_key(3, k3) 58 if ss_hget(h, k3, pq, lq) == 1 { let dom: *u8 = sys_mmap(ECOMAT_DOM_CAP); ec_str(pq[0] as *u8, 0, dom, ECOMAT_DOM_CAP); if el_streq(dom, "delta" as *u8) == 1 { dom3ok = 1 } } 59 var id4absent: i64 = 1 60 let k4: *u8 = sys_mmap(64); ec_key(4, k4) 61 if ss_hget(h, k4, pq, lq) == 1 { id4absent = 0 } 62 63 var pass: i64 = 0 64 let tot: i64 = 3 65 if present == 4 { pass = pass + 1; g_w(1, "T1 add-preserves-others 4/4 present PASS\n" as *u8) } else { g_w(1, "T1 FAIL present=" as *u8); g_wn(1, present); g_w(1, "\n" as *u8) } 66 if dom3ok == 1 { pass = pass + 1; g_w(1, "T2 added id3 domain=delta PASS\n" as *u8) } else { g_w(1, "T2 FAIL\n" as *u8) } 67 if id4absent == 1 { pass = pass + 1; g_w(1, "T3 id4 absent no-over-add PASS (neg-control)\n" as *u8) } else { g_w(1, "T3 FAIL\n" as *u8) } 68 g_w(1, "ECOMAT-PUT-GATE pass=" as *u8); g_wn(1, pass); g_w(1, "/" as *u8); g_wn(1, tot) 69 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 70 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 71 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 72 let ctr__dry: *i64 = gv_ctr() 73 ctr__dry[0] = pass 74 ctr__dry[1] = tot 75 let rc__dry: i64 = gv_verdict("ECOMAT-PUT-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 76 sys_exit(rc__dry) 77 return rc__dry 78}