code wiki / _hdl_build / nx_ad_feedback.nx
nx_ad_feedback.nx
buildroot/runtime/_hdl_build/nx_ad_feedback.nx
about
nx_ad_feedback.nx -- LIB: the GREAT/OK/BAD audience feedback for the performance ad engine
(ADS-013, CALLOUT-004). Completes the honest-aggregate-measurement trio: impressions (ADS-019),
conversions (ADS-018), and now SENTIMENT -- all aggregate, k-anon-floored, never per-visitor.
Extends the ADS-004 placement: a polite ONE-TAP poll (no popup wall, once per visit) whose only
server-side residue is an AGGREGATE rollup.
THE PRIVACY PROMISE, MADE LOAD-BEARING (spec sec5): a visitor's tap may arrive with a transient
session token, but the ONLY thing persisted is counts (great/ok/bad/n). `af_persist_record` has
no parameter for an identifier -- the persisted record CANNOT carry one by construction. The gate
proves it on the real on-disk bytes: identifiable input in, scrubbed aggregate record out.
Reuses nx_ad_serve (clean first-party emit, HTML-escape, zero-third-party-JS) + nx_kanon (the
k-anon release floor) -- DRY (rule 15). license_tier: ORIGINAL
dependencies 3 imports · 1 importers
imports: nx_ad_serve.nxnx_kanon.nxnx_syscalls.nx
imported by: nx_ad_feedback_gate.nx
structs
| none |
consts
| none |
functions
| 19 | func af_num(dst: *u8, off: i64, v: i64) -> i64 |
| 36 | func af_emit_poll(campaign: *u8, clen: i64, out: *u8) -> i64 |
| 47 | func af_tally(ev: *i64, m: i64, og: *i64, oo: *i64, ob: *i64) -> i64 called by 1: main |
| 68 | func af_persist_record(great: i64, ok: i64, bad: i64, out: *u8) -> i64 |
| 80 | func af_release(total: i64, k: i64) -> i64 |