nx_adversarial_sov.nx source
↩ module page · 113 lines · 5077 B
1// nx_adversarial_sov.nx -- get the ADVERSARIAL GATE SUITE off the flat .conf into the SOVEREIGN seg_store
2// (operator 2026-07-17: "we arent supposed to be using .tsv" -- store-law [[feedback-sovereign-store-not-flat-files]]).
3// nx_adversarial_ci ran the deploy-gating suite from knowledge/adversarial_gates.conf (a flat file, one gate
4// module-name per line) -- the policy that fail-closes EVERY selfswap. This migrates those rows into
5// knowledge/store/adversarial (sovereign seg_store) via the PROVEN nx_raci_sov migrate pattern (read -> seed ->
6// byte-verify every row), and serves the suite FROM THE STORE (ag_read_all is byte-compatible with the .conf
7// data lines, so the consumer flips with a one-line swap). The .conf survives only as migrate-source.
8// Sovereign. license_tier: ORIGINAL module: nishi-core.architect.adversarial_sov
9import "nx_seg_store.nx"
10import "nx_syscalls.nx"
11
12const AG_CONF: *u8 = "knowledge/adversarial_gates.conf"
13const AG_STORE: *u8 = "knowledge/store/adversarial"
14
15// key "adv:gate:K" -> out (mirror rsv_key)
16func ag_key(k: i64, out: *u8) -> i64 {
17 var o: i64=0; let p: *u8="adv:gate:" as *u8; var i: i64=0
18 while p[i]!=(0 as u8){ out[o]=p[i]; o=o+1; i=i+1 }
19 if k==0 { out[o]=48 as u8; o=o+1 } else { let t: *u8=sys_mmap(24); var m: i64=k; var n: i64=0; while m>0 { t[n]=(48+(m%10)) as u8; m=m/10; n=n+1 } var j: i64=0; while j<n { out[o]=t[n-1-j]; o=o+1; j=j+1 } }
20 out[o]=0 as u8; return 0
21}
22
23// MIGRATE the gate rows into the store (skip '#' comments + empty, CRLF-safe), then byte-verify each reads back.
24// Re-migrates each call (the .conf is the static migrate-source until retired). Returns verified-row-count via
25// verp[0]; total source rows via totp[0]. GREEN when verp==totp.
26func ag_migrate(totp: *i64, verp: *i64) -> i64 {
27 let szp: *i64 = sys_mmap(16) as *i64
28 let buf: *u8 = ss_readall(AG_CONF, szp)
29 let sz: i64 = szp[0]
30 if sz <= 0 { totp[0]=0; verp[0]=0; return 0 }
31 let lp: *i64 = sys_mmap(8*512) as *i64; let ll: *i64 = sys_mmap(8*512) as *i64
32 var k: i64 = 0; var i: i64 = 0; var ls: i64 = 0
33 while i <= sz {
34 var nl: i64 = 0; if i>=sz { nl=1 } else { if buf[i]==(10 as u8) { nl=1 } }
35 if nl==1 {
36 var len: i64 = i - ls
37 if len>0 { if buf[ls+len-1]==(13 as u8) { len=len-1 } } // CRLF-safe (strip trailing \r)
38 if len>0 { if (buf[ls] as i64) != 35 { if k<512 { lp[k]=(buf as i64)+ls; ll[k]=len; k=k+1 } } } // skip '#'
39 ls = i+1
40 }
41 i=i+1
42 }
43 totp[0]=k
44 // seed every gate row keyed by index, in one commit
45 let w: *i64 = ss_begin()
46 var j: i64 = 0
47 while j<k { let rk: *u8=sys_mmap(64); ag_key(j, rk); ss_add(w, 1, rk, lp[j] as *u8, ll[j]); j=j+1 }
48 ss_commit(AG_STORE, w, sys_now_realtime_sec())
49 // verify each row reads back byte-exact from the store
50 let h: *i64 = ss_open(AG_STORE)
51 let pq: *i64=sys_mmap(16) as *i64; let lq: *i64=sys_mmap(16) as *i64
52 var ver: i64 = 0; var j2: i64 = 0
53 while j2<k {
54 let rk: *u8=sys_mmap(64); ag_key(j2, rk)
55 if ss_hget(h, rk, pq, lq)==1 { if lq[0]==ll[j2] { let a: *u8=pq[0] as *u8; let b: *u8=lp[j2] as *u8; var eq: i64=1; var x: i64=0; while x<lq[0] { if a[x]!=b[x] { eq=0 } x=x+1 } if eq==1 { ver=ver+1 } } }
56 j2=j2+1
57 }
58 verp[0]=ver
59 return ver
60}
61
62// PUBLIC gate accessor: gate k's bytes into out (NUL-terminated, capped), FROM THE STORE. Returns len, or -1
63// when k is past the last row (the iteration sentinel). Mirror raci_row.
64func ag_gate(k: i64, out: *u8, cap: i64) -> i64 {
65 let h: *i64 = ss_open(AG_STORE)
66 if (h as i64)==0 { return 0 - 1 }
67 let pq: *i64=sys_mmap(16) as *i64
68 let lq: *i64=sys_mmap(16) as *i64
69 let rk: *u8=sys_mmap(64)
70 ag_key(k, rk)
71 if ss_hget(h, rk, pq, lq)!=1 { return 0 - 1 }
72 var n: i64 = lq[0]
73 if n > cap - 1 { n = cap - 1 }
74 let src: *u8 = pq[0] as *u8
75 var i: i64=0
76 while i<n { out[i]=src[i]; i=i+1 }
77 out[n]=0 as u8
78 return n
79}
80
81// number of gates in the store (iterate raci-style until a gap)
82func ag_count() -> i64 {
83 let h: *i64 = ss_open(AG_STORE)
84 if (h as i64)==0 { return 0 }
85 let pq: *i64=sys_mmap(16) as *i64; let lq: *i64=sys_mmap(16) as *i64
86 var k: i64=0; var go: i64=1
87 while go==1 {
88 let rk: *u8=sys_mmap(64); ag_key(k, rk)
89 if ss_hget(h, rk, pq, lq)==1 { k=k+1 } else { go=0 }
90 }
91 return k
92}
93
94// FULL-SUITE reader: every gate from the STORE, newline-joined, byte-compatible with the old .conf DATA lines
95// -- so nx_adversarial_ci flips with a ONE-LINE swap of its file-read call. Returns total bytes (0 if empty).
96// Mirror raci_read_all.
97func ag_read_all(out: *u8, cap: i64) -> i64 {
98 var o: i64 = 0
99 var k: i64 = 0
100 var go: i64 = 1
101 while go == 1 {
102 let n: i64 = ag_gate(k, ((out as i64) + o) as *u8, cap - o - 1)
103 if n < 0 { go = 0 } else {
104 o = o + n
105 out[o] = 10 as u8
106 o = o + 1
107 k = k + 1
108 if o >= cap - 2 { go = 0 }
109 }
110 }
111 out[o] = 0 as u8
112 return o
113}