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}