code wiki / _hdl_build / nx_ad_intake_gate.nx
nx_ad_intake_gate.nx source
↩ module page · 113 lines · 5929 B
1// nx_ad_intake_gate.nx -- GATE (runnable) for advertiser self-serve signup (nx_ad_intake). Proves:
2// create : a valid campaign returns IN_OK and reads back with business + goal + fee + status
3// liar-kill: every invalid intake is REFUSED with the right code AND not persisted --
4// unknown goal (-1, absent in store), negative fee (-2), over-ceiling fee (-2),
5// empty business (-3)
6// privacy : the persisted record carries NO site-visitor identity (scan for a visitor token = 0),
7// and the scanner FIRES on a planted token (anti-false-green) -- the LAW made load-bearing
8// Evidence -> knowledge/status/ad_intake.log (INTAKEGATE ... verdict=GREEN). license_tier: ORIGINAL
9import "nx_ad_intake.nx"
10import "nx_ad_store.nx"
11import "nx_syscalls.nx"
12import "nx_gate_verdict.nx"
13
14const IG_LOG: *u8 = "knowledge/status/ad_intake.log"
15
16func ig_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 }
17func ig_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 }
18
19// 1 if the campaign record at `key` contains `needle`.
20func ig_record_has(key: *u8, needle: *u8) -> i64 {
21 let pq: *i64 = sys_mmap(16) as *i64
22 let lq: *i64 = sys_mmap(16) as *i64
23 if ads_get(key, pq, lq) != 1 { return 0 }
24 return as_contains(pq[0] as *u8, lq[0], needle)
25}
26
27// 1 if the store currently has a live record for `key`.
28func ig_present(key: *u8) -> i64 {
29 let pq: *i64 = sys_mmap(16) as *i64
30 let lq: *i64 = sys_mmap(16) as *i64
31 if ads_get(key, pq, lq) == 1 { return 1 }
32 return 0
33}
34
35func main() -> i64 {
36 var ok: i64 = 1
37
38 // happy path: a valid campaign is created
39 let rc1: i64 = in_create_campaign("gate-coffee" as *u8, "Acme Coffee" as *u8, "reach" as *u8, 50, "Locally roasted, neighbor-owned." as *u8)
40 if rc1 != 0 { ok = 0 }
41
42 // read-back: the record holds the advertiser data
43 let key1: *u8 = sys_mmap(256)
44 in_campaign_key("gate-coffee" as *u8, key1)
45 let has_biz: i64 = ig_record_has(key1, "Acme Coffee" as *u8)
46 let has_goal: i64 = ig_record_has(key1, "reach" as *u8)
47 let has_status: i64 = ig_record_has(key1, "staging" as *u8)
48 if has_biz != 1 { ok = 0 }
49 if has_goal != 1 { ok = 0 }
50 if has_status != 1 { ok = 0 }
51
52 // privacy LAW: NO visitor identity in the persisted record (we never passed one), AND the scanner
53 // is not stuck-at-0 (it FIRES on a planted token).
54 let leaked: i64 = ig_record_has(key1, "vtok-" as *u8) // expect 0
55 let probe: *u8 = "advertiser data vtok-AAA111 would-be-leak" as *u8
56 let snoop_fires: i64 = as_contains(probe, as_len(probe), "vtok-" as *u8) // expect 1
57 if leaked != 0 { ok = 0 }
58 if snoop_fires != 1 { ok = 0 }
59
60 // LIAR-KILL: invalid intake refused with the right code + not persisted
61 let rc_badgoal: i64 = in_create_campaign("gate-badgoal" as *u8, "Acme" as *u8, "banana" as *u8, 50, "x" as *u8)
62 let keyb: *u8 = sys_mmap(256)
63 in_campaign_key("gate-badgoal" as *u8, keyb)
64 let badgoal_present: i64 = ig_present(keyb) // expect 0 (never persisted)
65 let rc_negfee: i64 = in_create_campaign("gate-negfee" as *u8, "Acme" as *u8, "reach" as *u8, 0 - 5, "x" as *u8)
66 let rc_bigfee: i64 = in_create_campaign("gate-bigfee" as *u8, "Acme" as *u8, "reach" as *u8, 999999999, "x" as *u8)
67 let empty_biz: *u8 = sys_mmap(8)
68 empty_biz[0] = 0 as u8
69 let rc_noname: i64 = in_create_campaign("gate-noname" as *u8, empty_biz, "reach" as *u8, 50, "x" as *u8)
70
71 if rc_badgoal != (0 - 1) { ok = 0 }
72 if badgoal_present != 0 { ok = 0 }
73 if rc_negfee != (0 - 2) { ok = 0 }
74 if rc_bigfee != (0 - 2) { ok = 0 }
75 if rc_noname != (0 - 3) { ok = 0 }
76
77 ig_w(1, "INTAKEGATE authored=organ create=" as *u8); ig_wn(1, rc1)
78 ig_w(1, " has_business=" as *u8); ig_wn(1, has_biz)
79 ig_w(1, " has_goal=" as *u8); ig_wn(1, has_goal)
80 ig_w(1, " badgoal_rc=" as *u8); ig_wn(1, rc_badgoal)
81 ig_w(1, " badgoal_persisted=" as *u8); ig_wn(1, badgoal_present)
82 ig_w(1, " negfee_rc=" as *u8); ig_wn(1, rc_negfee)
83 ig_w(1, " bigfee_rc=" as *u8); ig_wn(1, rc_bigfee)
84 ig_w(1, " noname_rc=" as *u8); ig_wn(1, rc_noname)
85 ig_w(1, " visitor_token_leaked=" as *u8); ig_wn(1, leaked)
86 ig_w(1, " snoop_detector_fired=" as *u8); ig_wn(1, snoop_fires)
87 if ok == 1 { ig_w(1, " verdict=GREEN\n" as *u8) }
88 if ok != 1 { ig_w(1, " verdict=RED\n" as *u8) }
89
90 let lf: i64 = sys_openat_append(IG_LOG, 420)
91 if lf >= 0 {
92 ig_w(lf, "INTAKEGATE authored=organ create=" as *u8); ig_wn(lf, rc1)
93 ig_w(lf, " badgoal_rc=" as *u8); ig_wn(lf, rc_badgoal)
94 ig_w(lf, " badgoal_persisted=" as *u8); ig_wn(lf, badgoal_present)
95 ig_w(lf, " negfee_rc=" as *u8); ig_wn(lf, rc_negfee)
96 ig_w(lf, " bigfee_rc=" as *u8); ig_wn(lf, rc_bigfee)
97 ig_w(lf, " noname_rc=" as *u8); ig_wn(lf, rc_noname)
98 ig_w(lf, " visitor_token_leaked=" as *u8); ig_wn(lf, leaked)
99 if ok == 1 { ig_w(lf, " verdict=GREEN\n" as *u8) }
100 if ok != 1 { ig_w(lf, " verdict=RED\n" as *u8) }
101 sys_close(lf)
102 }
103
104 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
105 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
106 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
107 let ctr__dry: *i64 = gv_ctr()
108 ctr__dry[0] = ok
109 ctr__dry[1] = 1
110 let rc__dry: i64 = gv_verdict("AD-INTAKE-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8)
111 sys_exit(rc__dry)
112 return rc__dry
113}