code wiki / _hdl_build / nx_ad_store_seed.nx
nx_ad_store_seed.nx source
↩ module page · 108 lines · 5770 B
1// nx_ad_store_seed.nx -- GATE + SEEDER: authors the ad engine's config + registry into the
2// SOVEREIGN STORE (knowledge/store/ad-*), the pure-Nishi replacement for the ad_botrules.tsv /
3// ad_kanon.conf flat files (operator: "get away from tsv to pure nishi ecosystem"). IDEMPOTENT
4// (rule 10): each record is written only if absent-or-changed (additive versions otherwise), then
5// EVERY record is read back and byte-verified -- the gate is GREEN only when the store holds exactly
6// what we intended. Also seeds the ADS-006 pick-a-goal MENU (structural; TARGET numbers marked
7// PENDING-CENSUS, pricing figures marked PENDING-COSPEC -- NOT fabricated, they are sponsor co-spec
8// per ADS-005). Evidence -> knowledge/status/ad_store.log. license_tier: ORIGINAL
9import "nx_ad_store.nx"
10import "nx_seg_store.nx"
11import "nx_syscalls.nx"
12
13const ASD_LOG: *u8 = "knowledge/status/ad_store.log"
14
15func sd_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 }
16func sd_wn(fd: i64, v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=(48+(m%10)) as u8; m=m/10; k=k+1}; var i: i64=0; while i<k {bb[i]=t[k-1-i]; i=i+1}; sys_write(fd, bb, k); return 0 }
17func sd_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
18
19// 1 if the store's current value for `key` byte-equals `val` (NUL-terminated). Used for both the
20// idempotent skip-if-unchanged write AND the post-commit verification.
21func sd_streq_store(key: *u8, val: *u8) -> i64 {
22 let pq: *i64 = sys_mmap(16) as *i64
23 let lq: *i64 = sys_mmap(16) as *i64
24 if ads_get(key, pq, lq) != 1 { return 0 }
25 let b: *u8 = pq[0] as *u8
26 let n: i64 = lq[0]
27 let vl: i64 = sd_len(val)
28 if n != vl { return 0 }
29 var i: i64 = 0
30 while i < n { if b[i] != val[i] { return 0 } i = i + 1 }
31 return 1
32}
33
34func sd_emit(fd: i64, nrec: i64, written: i64, verified: i64, ok: i64) -> i64 {
35 sd_w(fd, "ADSTORE authored=organ store=knowledge/store/ad- records=" as *u8); sd_wn(fd, nrec)
36 sd_w(fd, " written=" as *u8); sd_wn(fd, written)
37 sd_w(fd, " verified=" as *u8); sd_wn(fd, verified)
38 if ok == 1 { sd_w(fd, " verdict=GREEN\n" as *u8) } else { sd_w(fd, " verdict=RED\n" as *u8) }
39 return 0
40}
41
42func main() -> i64 {
43 let keys: *i64 = sys_mmap(8 * 16) as *i64
44 let vals: *i64 = sys_mmap(8 * 16) as *i64
45 // ADS-019 invalid-traffic rules (field<tab>bad<tab>rule_id; trailing fields are documentation).
46 keys[0] = "adcfg:botrules" as *u8 as i64
47 vals[0] = "0\t1\tBR-UA-BOT\n1\t1\tBR-SRC-DC\n2\t0\tBR-JS-RAW\n" as *u8 as i64
48 // ADS-018 k-anonymity floor.
49 keys[1] = "adcfg:kanon_k" as *u8 as i64
50 vals[1] = "5" as *u8 as i64
51 // ADS-006 pick-a-goal MENU (goal<tab>metric<tab>target<tab>period<tab>provenance). Operator
52 // 2026-06-13 "set the figures -> go live": DEFAULT-STAGING targets seeded so the engine bills
53 // end-to-end. These are DATA (re-seed to change), explicitly provisional -> replace with the
54 // ADS-001 census benchmarks. (Safe: PRIVATE-STAGING, no real money moves until vetted+deployed.)
55 keys[2] = "adgoal:reach" as *u8 as i64
56 vals[2] = "reach\timpressions\t10000\tmonthly\tdefault-staging" as *u8 as i64
57 keys[3] = "adgoal:leads" as *u8 as i64
58 vals[3] = "leads\tconversions\t50\tmonthly\tdefault-staging" as *u8 as i64
59 keys[4] = "adgoal:sales" as *u8 as i64
60 vals[4] = "sales\tconversions\t25\tmonthly\tdefault-staging" as *u8 as i64
61 // ADS-006 pricing (goal<tab>perform_fee<tab>exceed_mult<tab>exceed_bonus<tab>currency<tab>prov).
62 // DEFAULT-STAGING flat fees + capped bonuses (ceiling = fee+bonus): reach 50/+25=75, leads
63 // 150/+75=225, sales 250/+125=375 USD, exceed at 2x target. Modest, budgetable, relationship-
64 // first. DATA (rule 11) -> replace per sponsor co-spec (ADS-005). EXCEED bonus is FLAT + CAPPED.
65 keys[5] = "adpricing:reach" as *u8 as i64
66 vals[5] = "reach\t50\t2\t25\tUSD\tdefault-staging" as *u8 as i64
67 keys[6] = "adpricing:leads" as *u8 as i64
68 vals[6] = "leads\t150\t2\t75\tUSD\tdefault-staging" as *u8 as i64
69 keys[7] = "adpricing:sales" as *u8 as i64
70 vals[7] = "sales\t250\t2\t125\tUSD\tdefault-staging" as *u8 as i64
71 // provenance breadcrumb so the staging-vs-final status is machine-visible in the store itself.
72 keys[8] = "adcfg:figures_provenance" as *u8 as i64
73 vals[8] = "default-staging 2026-06-13 operator-go-live; REPLACE fees per sponsor co-spec ADS-005 + targets per census ADS-001" as *u8 as i64
74 let nrec: i64 = 9
75
76 // write only the records that are absent or changed (idempotent / additive).
77 let w: *i64 = ss_begin()
78 var towrite: i64 = 0
79 var i: i64 = 0
80 while i < nrec {
81 let key: *u8 = keys[i] as *u8
82 let val: *u8 = vals[i] as *u8
83 if sd_streq_store(key, val) == 0 { ss_add(w, 1, key, val, sd_len(val)); towrite = towrite + 1 }
84 i = i + 1
85 }
86 var committed: i64 = 0
87 if towrite > 0 {
88 let segid: i64 = ads_seg_next()
89 let rc: i64 = ss_commit(ADS_PREFIX, w, segid)
90 if rc == 0 { committed = 1 }
91 }
92
93 // verify EVERY record now reads back exactly (the gate).
94 var verified: i64 = 0
95 i = 0
96 while i < nrec { if sd_streq_store(keys[i] as *u8, vals[i] as *u8) == 1 { verified = verified + 1 } i = i + 1 }
97
98 var ok: i64 = 1
99 if verified != nrec { ok = 0 }
100 if towrite > 0 { if committed == 0 { ok = 0 } }
101
102 sd_emit(1, nrec, towrite, verified, ok)
103 let lf: i64 = sys_openat_append(ASD_LOG, 420)
104 if lf >= 0 { sd_emit(lf, nrec, towrite, verified, ok); sys_close(lf) }
105
106 if ok == 1 { return 0 }
107 return 1
108}