code wiki / _hdl_build / nx_ad_view_gate.nx
nx_ad_view_gate.nx source
↩ module page · 84 lines · 4494 B
1// nx_ad_view_gate.nx -- GATE (runnable) for the honest VIEWPORT-VERIFIED impression rule (nx_ad_view).
2// Proves on baked controls that the MRC rule is enforced and that served-but-unseen is REFUSED:
3// boundary : viewed + dwell==1000ms -> viewable (MRC >=1s); dwell==999ms -> NOT (under-dwell)
4// unseen : viewed==0 with huge dwell -> NOT viewable (served != seen: the liar-kill)
5// video : 2000ms threshold (1500ms video -> NOT, 2000ms -> viewable)
6// tally : mixed corpus -> served=100, viewable=60, stripped_inflation=40 (we refuse the 40
7// served-but-unseen impressions an incumbent serve-count would inflate)
8// where : per-slot viewable (above-fold=60, below-fold=0) -- transparent placement
9// no-false : an all-unseen corpus -> viewable=0 (the rule is not stuck-at-served)
10// Evidence -> knowledge/status/ad_view.log (VIEWGATE ... verdict=GREEN). Aggregate-only, no visitor
11// id by construction. license_tier: ORIGINAL
12import "nx_ad_view.nx"
13import "nx_syscalls.nx"
14
15const VG_LOG: *u8 = "knowledge/status/ad_view.log"
16
17func vg_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 }
18func vg_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 }
19
20func vg_emit(fd: i64, served: i64, viewable: i64, stripped: i64, sa: i64, unseen_vw: i64, ok: i64) -> i64 {
21 vg_w(fd, "VIEWGATE authored=organ rule=MRC-50pct-1s served=" as *u8); vg_wn(fd, served)
22 vg_w(fd, " viewable=" as *u8); vg_wn(fd, viewable)
23 vg_w(fd, " stripped_inflation=" as *u8); vg_wn(fd, stripped)
24 vg_w(fd, " above_fold_viewable=" as *u8); vg_wn(fd, sa)
25 vg_w(fd, " all_unseen_viewable=" as *u8); vg_wn(fd, unseen_vw)
26 if ok == 1 { vg_w(fd, " verdict=GREEN\n" as *u8) }
27 if ok != 1 { vg_w(fd, " verdict=RED\n" as *u8) }
28 return 0
29}
30
31func main() -> i64 {
32 let ovw: *i64 = sys_mmap(8) as *i64
33 let osv: *i64 = sys_mmap(8) as *i64
34
35 // rule boundaries (display 1000ms)
36 let c1: i64 = av_viewable(1, 1000, AV_MIN_DISPLAY) // exactly 1s -> viewable
37 let c2: i64 = av_viewable(1, 999, AV_MIN_DISPLAY) // 999ms -> NOT
38 let c3: i64 = av_viewable(0, 5000, AV_MIN_DISPLAY) // served-but-unseen -> NOT
39 // video threshold (2000ms)
40 let c6: i64 = av_viewable(1, 1500, AV_MIN_VIDEO) // 1.5s video -> NOT
41 let c7: i64 = av_viewable(1, 2000, AV_MIN_VIDEO) // 2s video -> viewable
42
43 // mixed corpus [viewed, slot, dwell_ms, n]
44 let ev: *i64 = sys_mmap(8 * 4 * 3) as *i64
45 ev[0]=1; ev[1]=0; ev[2]=1500; ev[3]=60 // viewed, above-fold, 1.5s -> 60 viewable
46 ev[4]=1; ev[5]=1; ev[6]=500; ev[7]=30 // viewed, below-fold, 0.5s -> under-dwell (30 served)
47 ev[8]=0; ev[9]=2; ev[10]=3000; ev[11]=10 // NOT viewed, in-article -> unseen (10 served)
48 av_tally(ev, 3, AV_MIN_DISPLAY, ovw, osv)
49 let served: i64 = osv[0] // expect 100
50 let viewable: i64 = ovw[0] // expect 60
51 let stripped: i64 = served - viewable // expect 40 inflated impressions refused
52
53 let sa: i64 = av_tally_slot(ev, 3, AV_MIN_DISPLAY, 0) // above-fold viewable -> 60
54 let sb: i64 = av_tally_slot(ev, 3, AV_MIN_DISPLAY, 1) // below-fold viewable -> 0 (under-dwell)
55
56 // anti-false-green: an all-unseen corpus -> ZERO viewable (not stuck-at-served)
57 let un: *i64 = sys_mmap(8 * 4 * 2) as *i64
58 un[0]=0; un[1]=0; un[2]=5000; un[3]=50
59 un[4]=0; un[5]=1; un[6]=5000; un[7]=50
60 av_tally(un, 2, AV_MIN_DISPLAY, ovw, osv)
61 let unseen_vw: i64 = ovw[0] // expect 0
62 let unseen_sv: i64 = osv[0] // expect 100
63
64 var ok: i64 = 1
65 if c1 != 1 { ok = 0 }
66 if c2 != 0 { ok = 0 }
67 if c3 != 0 { ok = 0 }
68 if c6 != 0 { ok = 0 }
69 if c7 != 1 { ok = 0 }
70 if served != 100 { ok = 0 }
71 if viewable != 60 { ok = 0 }
72 if stripped != 40 { ok = 0 }
73 if sa != 60 { ok = 0 }
74 if sb != 0 { ok = 0 }
75 if unseen_vw != 0 { ok = 0 }
76 if unseen_sv != 100 { ok = 0 }
77
78 vg_emit(1, served, viewable, stripped, sa, unseen_vw, ok)
79 let lf: i64 = sys_openat_append(VG_LOG, 420)
80 if lf >= 0 { vg_emit(lf, served, viewable, stripped, sa, unseen_vw, ok); sys_close(lf) }
81
82 if ok == 1 { return 0 }
83 return 1
84}