code wiki / _hdl_build / nx_aid_gate.nx

nx_aid_gate.nx source

↩ module page · 133 lines · 8289 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" 11import "nx_gate_verdict.nx" 12 13const AG_STORE: *u8 = "knowledge/store/aid-" 14const AG_STAGE_FILE: *u8 = "knowledge/staging/aid/review.html" 15const AG_LIVE_FILE: *u8 = "knowledge/publish/aid-live/review.html" 16const NOW: i64 = 110 17 18func 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 } 19func g_i(v: i64) -> i64 { 20 let bb: *u8 = sys_mmap(28); var m: i64 = v 21 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 22 let t: *u8 = sys_mmap(28); var k: i64 = 0 23 if m == 0 { t[0] = 48 as u8; k = 1 } 24 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 25 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 26} 27func g_exists(path: *u8) -> i64 { let fd: i64 = sys_openat_rd(path); if fd < 0 { return 0 } sys_close(fd); return 1 } 28 29func main() -> i64 { 30 g_p("=== nx_aid_gate (R-AID: charity anti-scam, fail-open + privacy-first) ===\n" as *u8) 31 ad_seed_policy(AG_STORE) 32 33 // a genuinely needy family of four, one normal claim 34 ad_add_recipient(AG_STORE, "needy01" as *u8, 4, 1, 50, "intake" as *u8) 35 ad_record_claim(AG_STORE, "needy01" as *u8, "foodbankA" as *u8, 108, 4000, 12, "monthly box" as *u8) 36 37 // a double-dipper: claiming from three different orgs inside the period 38 ad_add_recipient(AG_STORE, "dipper02" as *u8, 2, 1, 60, "intake" as *u8) 39 ad_record_claim(AG_STORE, "dipper02" as *u8, "foodbankA" as *u8, 105, 3000, 10, "-" as *u8) 40 ad_record_claim(AG_STORE, "dipper02" as *u8, "foodbankB" as *u8, 107, 3000, 10, "-" as *u8) 41 ad_record_claim(AG_STORE, "dipper02" as *u8, "foodbankC" as *u8, 109, 3000, 10, "-" as *u8) 42 43 // a reseller: huge units, same org twice 44 ad_add_recipient(AG_STORE, "reseller03" as *u8, 2, 1, 40, "intake" as *u8) 45 ad_record_claim(AG_STORE, "reseller03" as *u8, "foodbankA" as *u8, 100, 20000, 120, "-" as *u8) 46 ad_record_claim(AG_STORE, "reseller03" as *u8, "foodbankA" as *u8, 108, 20000, 120, "-" as *u8) 47 48 var pass: i64 = 0 49 var tot: i64 = 0 50 51 // T1 needy NOT flagged 52 let rn: i64 = ad_risk(AG_STORE, "needy01" as *u8, NOW) 53 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) 54 tot = tot + 1 55 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) } 56 57 // T2 double-dipper -> review 58 let rd: i64 = ad_risk(AG_STORE, "dipper02" as *u8, NOW) 59 let dorgs: i64 = ad_distinct_orgs(AG_STORE, "dipper02" as *u8, NOW) 60 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) 61 tot = tot + 1 62 var ok2: i64 = 1 63 if ad_dup_flag(AG_STORE, "dipper02" as *u8, NOW) != 1 { ok2 = 0 } 64 if rd != 1 { ok2 = 0 } 65 if dorgs != 3 { ok2 = 0 } 66 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) } 67 68 // T3 reseller -> high 69 let rr: i64 = ad_risk(AG_STORE, "reseller03" as *u8, NOW) 70 let runits: i64 = ad_units_in_period(AG_STORE, "reseller03" as *u8, NOW) 71 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) 72 tot = tot + 1 73 var ok3: i64 = 1 74 if ad_reseller_flag(AG_STORE, "reseller03" as *u8, NOW) != 1 { ok3 = 0 } 75 if rr != 2 { ok3 = 0 } 76 if runits != 240 { ok3 = 0 } 77 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) } 78 79 // T4 FAIL-OPEN: nobody is ever auto-denied 80 tot = tot + 1 81 var ok4: i64 = 1 82 if ad_auto_deny(AG_STORE, "needy01" as *u8, NOW) != 0 { ok4 = 0 } 83 if ad_auto_deny(AG_STORE, "dipper02" as *u8, NOW) != 0 { ok4 = 0 } 84 if ad_auto_deny(AG_STORE, "reseller03" as *u8, NOW) != 0 { ok4 = 0 } 85 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) } 86 87 // T5 additive ledger + privacy 88 let nc: i64 = ad_claimn(AG_STORE, "reseller03" as *u8) 89 let firstv: i64 = ad_claim_int(AG_STORE, "reseller03" as *u8, 0, 2) // first claim value still intact 90 // privacy: the recipient record holds household/tier/day/cite only -- no name field; field 0 is an integer. 91 let hh: i64 = ad_recip_int(AG_STORE, "needy01" as *u8, 0) 92 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) 93 tot = tot + 1 94 var ok5: i64 = 1 95 if nc != 2 { ok5 = 0 } 96 if firstv != 20000 { ok5 = 0 } // additive: the earlier claim survived the later one 97 if hh != 4 { ok5 = 0 } 98 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) } 99 100 // T6 review queue renders + ships 101 let page: *u8 = sys_mmap(65536) 102 let np: i64 = ad_render_review(AG_STORE, NOW, page) 103 g_p("review page = " as *u8); g_i(np); g_p(" bytes\n" as *u8) 104 tot = tot + 1 105 var ok6: i64 = 1 106 if as_has_thirdparty_js(page, np) != 0 { ok6 = 0 } 107 if as_contains(page, np, "dipper02" as *u8) != 1 { ok6 = 0 } 108 if as_contains(page, np, "reseller03" as *u8) != 1 { ok6 = 0 } 109 if as_contains(page, np, "needy01" as *u8) != 0 { ok6 = 0 } // the needy are NOT in the queue 110 if as_contains(page, np, "resale signature" as *u8) != 1 { ok6 = 0 } 111 if as_contains(page, np, "never denies aid" as *u8) != 1 { ok6 = 0 } // fail-open stated 112 sys_mkdir("knowledge/staging" as *u8, 0x1ed) 113 sys_mkdir("knowledge/staging/aid" as *u8, 0x1ed) 114 let sfd: i64 = sys_openat_wr(AG_STAGE_FILE, 420); if sfd >= 0 { sys_write(sfd, page, np); sys_close(sfd) } 115 pub_init() 116 sys_mkdir("knowledge/publish/aid-stage" as *u8, 0x1ed) 117 sys_mkdir("knowledge/publish/aid-live" as *u8, 0x1ed) 118 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) 119 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) 120 if g_exists(AG_LIVE_FILE) != 1 { ok6 = 0 } 121 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) } 122 123 g_p("nx_aid_gate pass=" as *u8); g_i(pass); g_p("/" as *u8); g_i(tot) 124 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 125 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 126 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 127 let ctr__dry: *i64 = gv_ctr() 128 ctr__dry[0] = pass 129 ctr__dry[1] = tot 130 let rc__dry: i64 = gv_verdict("AID-GATE" as *u8, ctr__dry, "people in need get the food; exploiters get flagged for review; nobody auto-denied)" as *u8) 131 sys_exit(rc__dry) 132 return rc__dry 133}