code wiki / _hdl_build / nx_aid_gate.nx
nx_aid_gate.nx source
↩ module page · 126 lines · 7897 B
1// nx_aid_gate.nx -- GATE: charity anti-scam R-AID. T1 a genuinely NEEDY household trips no flags (risk 0) and is
2// served. T2 a DOUBLE-DIPPER (claims across many orgs) is flagged for REVIEW (not denied). T3 a RESELLER (units
3// far beyond household use) is flagged HIGH (not denied). T4 THE FAIL-OPEN GUARANTEE: ad_auto_deny == 0 for
4// EVERYONE incl the reseller -- the system never auto-denies. T5 ADDITIVE ledger + privacy (claims accumulate,
5// history intact, recipient is a token w/ no PII). T6 the review queue renders (flagged only, reasons, privacy
6// note) + ships. license_tier: ORIGINAL
7import "nx_aid.nx"
8import "nx_publisher.nx"
9import "nx_seg_store.nx"
10import "nx_syscalls.nx"
11
12const AG_STORE: *u8 = "knowledge/store/aid-"
13const AG_STAGE_FILE: *u8 = "knowledge/staging/aid/review.html"
14const AG_LIVE_FILE: *u8 = "knowledge/publish/aid-live/review.html"
15const NOW: i64 = 110
16
17func g_p(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
18func g_i(v: i64) -> i64 {
19 let bb: *u8 = sys_mmap(28); var m: i64 = v
20 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
21 let t: *u8 = sys_mmap(28); var k: i64 = 0
22 if m == 0 { t[0] = 48 as u8; k = 1 }
23 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
24 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0
25}
26func g_exists(path: *u8) -> i64 { let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 } sys_close(fd); return 1 }
27
28func main() -> i64 {
29 g_p("=== nx_aid_gate (R-AID: charity anti-scam, fail-open + privacy-first) ===\n" as *u8)
30 ad_seed_policy(AG_STORE)
31
32 // a genuinely needy family of four, one normal claim
33 ad_add_recipient(AG_STORE, "needy01" as *u8, 4, 1, 50, "intake" as *u8)
34 ad_record_claim(AG_STORE, "needy01" as *u8, "foodbankA" as *u8, 108, 4000, 12, "monthly box" as *u8)
35
36 // a double-dipper: claiming from three different orgs inside the period
37 ad_add_recipient(AG_STORE, "dipper02" as *u8, 2, 1, 60, "intake" as *u8)
38 ad_record_claim(AG_STORE, "dipper02" as *u8, "foodbankA" as *u8, 105, 3000, 10, "-" as *u8)
39 ad_record_claim(AG_STORE, "dipper02" as *u8, "foodbankB" as *u8, 107, 3000, 10, "-" as *u8)
40 ad_record_claim(AG_STORE, "dipper02" as *u8, "foodbankC" as *u8, 109, 3000, 10, "-" as *u8)
41
42 // a reseller: huge units, same org twice
43 ad_add_recipient(AG_STORE, "reseller03" as *u8, 2, 1, 40, "intake" as *u8)
44 ad_record_claim(AG_STORE, "reseller03" as *u8, "foodbankA" as *u8, 100, 20000, 120, "-" as *u8)
45 ad_record_claim(AG_STORE, "reseller03" as *u8, "foodbankA" as *u8, 108, 20000, 120, "-" as *u8)
46
47 var pass: i64 = 0
48 var tot: i64 = 0
49
50 // T1 needy NOT flagged
51 let rn: i64 = ad_risk(AG_STORE, "needy01" as *u8, NOW)
52 g_p("needy risk=" as *u8); g_i(rn); g_p(" review=" as *u8); g_i(ad_needs_review(AG_STORE, "needy01" as *u8, NOW)); g_p("\n" as *u8)
53 tot = tot + 1
54 if rn == 0 { if ad_needs_review(AG_STORE, "needy01" as *u8, NOW) == 0 { pass = pass + 1; g_p("PASS T1 needy household trips no flags (risk 0) -- served, not bothered\n" as *u8) } else { g_p("FAIL T1 review\n" as *u8) } } else { g_p("FAIL T1 risk=" as *u8); g_i(rn); g_p("\n" as *u8) }
55
56 // T2 double-dipper -> review
57 let rd: i64 = ad_risk(AG_STORE, "dipper02" as *u8, NOW)
58 let dorgs: i64 = ad_distinct_orgs(AG_STORE, "dipper02" as *u8, NOW)
59 g_p("dipper risk=" as *u8); g_i(rd); g_p(" distinct-orgs=" as *u8); g_i(dorgs); g_p(" dup=" as *u8); g_i(ad_dup_flag(AG_STORE, "dipper02" as *u8, NOW)); g_p("\n" as *u8)
60 tot = tot + 1
61 var ok2: i64 = 1
62 if ad_dup_flag(AG_STORE, "dipper02" as *u8, NOW) != 1 { ok2 = 0 }
63 if rd != 1 { ok2 = 0 }
64 if dorgs != 3 { ok2 = 0 }
65 if ok2 == 1 { pass = pass + 1; g_p("PASS T2 double-dipper flagged for REVIEW (3 orgs in period), not denied\n" as *u8) } else { g_p("FAIL T2\n" as *u8) }
66
67 // T3 reseller -> high
68 let rr: i64 = ad_risk(AG_STORE, "reseller03" as *u8, NOW)
69 let runits: i64 = ad_units_in_period(AG_STORE, "reseller03" as *u8, NOW)
70 g_p("reseller risk=" as *u8); g_i(rr); g_p(" units=" as *u8); g_i(runits); g_p(" reseller-flag=" as *u8); g_i(ad_reseller_flag(AG_STORE, "reseller03" as *u8, NOW)); g_p("\n" as *u8)
71 tot = tot + 1
72 var ok3: i64 = 1
73 if ad_reseller_flag(AG_STORE, "reseller03" as *u8, NOW) != 1 { ok3 = 0 }
74 if rr != 2 { ok3 = 0 }
75 if runits != 240 { ok3 = 0 }
76 if ok3 == 1 { pass = pass + 1; g_p("PASS T3 reseller flagged HIGH (240 units, household 2), not denied\n" as *u8) } else { g_p("FAIL T3\n" as *u8) }
77
78 // T4 FAIL-OPEN: nobody is ever auto-denied
79 tot = tot + 1
80 var ok4: i64 = 1
81 if ad_auto_deny(AG_STORE, "needy01" as *u8, NOW) != 0 { ok4 = 0 }
82 if ad_auto_deny(AG_STORE, "dipper02" as *u8, NOW) != 0 { ok4 = 0 }
83 if ad_auto_deny(AG_STORE, "reseller03" as *u8, NOW) != 0 { ok4 = 0 }
84 if ok4 == 1 { pass = pass + 1; g_p("PASS T4 FAIL-OPEN guarantee: ad_auto_deny==0 for EVERYONE (needy, dipper, reseller) -- system never auto-denies\n" as *u8) } else { g_p("FAIL T4 a denial path exists!\n" as *u8) }
85
86 // T5 additive ledger + privacy
87 let nc: i64 = ad_claimn(AG_STORE, "reseller03" as *u8)
88 let firstv: i64 = ad_claim_int(AG_STORE, "reseller03" as *u8, 0, 2) // first claim value still intact
89 // privacy: the recipient record holds household/tier/day/cite only -- no name field; field 0 is an integer.
90 let hh: i64 = ad_recip_int(AG_STORE, "needy01" as *u8, 0)
91 g_p("reseller claims=" as *u8); g_i(nc); g_p(" first-claim-value=" as *u8); g_i(firstv); g_p(" needy household=" as *u8); g_i(hh); g_p("\n" as *u8)
92 tot = tot + 1
93 var ok5: i64 = 1
94 if nc != 2 { ok5 = 0 }
95 if firstv != 20000 { ok5 = 0 } // additive: the earlier claim survived the later one
96 if hh != 4 { ok5 = 0 }
97 if ok5 == 1 { pass = pass + 1; g_p("PASS T5 additive ledger (2 claims, history intact) + recipient is a token (no PII)\n" as *u8) } else { g_p("FAIL T5\n" as *u8) }
98
99 // T6 review queue renders + ships
100 let page: *u8 = sys_mmap(65536)
101 let np: i64 = ad_render_review(AG_STORE, NOW, page)
102 g_p("review page = " as *u8); g_i(np); g_p(" bytes\n" as *u8)
103 tot = tot + 1
104 var ok6: i64 = 1
105 if as_has_thirdparty_js(page, np) != 0 { ok6 = 0 }
106 if as_contains(page, np, "dipper02" as *u8) != 1 { ok6 = 0 }
107 if as_contains(page, np, "reseller03" as *u8) != 1 { ok6 = 0 }
108 if as_contains(page, np, "needy01" as *u8) != 0 { ok6 = 0 } // the needy are NOT in the queue
109 if as_contains(page, np, "resale signature" as *u8) != 1 { ok6 = 0 }
110 if as_contains(page, np, "never denies aid" as *u8) != 1 { ok6 = 0 } // fail-open stated
111 sys_mkdir("knowledge/staging" as *u8, 0x1ed)
112 sys_mkdir("knowledge/staging/aid" as *u8, 0x1ed)
113 let sfd: i64 = sys_openat_wr(AG_STAGE_FILE, 420); if sfd >= 0 { sys_write(sfd, page, np); sys_close(sfd) }
114 pub_init()
115 sys_mkdir("knowledge/publish/aid-stage" as *u8, 0x1ed)
116 sys_mkdir("knowledge/publish/aid-live" as *u8, 0x1ed)
117 pub_submit_to("knowledge/publish/aid-queue.tsv" as *u8, AG_STAGE_FILE, "review.html" as *u8, "nishifoodfamily" as *u8, "nishi-aid" as *u8, "internal" as *u8)
118 pub_run_full("knowledge/publish/aid-queue.tsv" as *u8, "knowledge/publish/aid-ledger.tsv" as *u8, "knowledge/publish/aid-stage" as *u8, "knowledge/publish/aid-live" as *u8, "publish:aid" as *u8)
119 if g_exists(AG_LIVE_FILE) != 1 { ok6 = 0 }
120 if ok6 == 1 { pass = pass + 1; g_p("PASS T6 review queue: flagged-only + reasons + privacy note, sovereign, shipped\n" as *u8) } else { g_p("FAIL T6\n" as *u8) }
121
122 g_p("nx_aid_gate pass=" as *u8); g_i(pass); g_p("/" as *u8); g_i(tot)
123 if pass == tot { g_p(" verdict=GREEN (people in need get the food; exploiters get flagged for review; nobody auto-denied)\n" as *u8); return 0 }
124 g_p(" verdict=RED\n" as *u8)
125 return 1
126}