code wiki / _hdl_build / nx_a11y_breadth_gate.nx
nx_a11y_breadth_gate.nx source
↩ module page · 54 lines · 3654 B
1// nx_a11y_breadth_gate.nx -- the broad a11y checker passes our built pages by construction + discriminates a bad
2// page, and the ENFORCED-a11y-breadth exceed is refereed (vs proprietary builders a11y≈0 / axe audit-only). The
3// raw breadth-vs-axe-50+ residual is acknowledged, NOT claimed. 100% sovereign. expect_exit: 0
4import "nx_syscalls.nx"
5import "nx_sitegate_emit_lib.nx"
6import "nx_a11y_breadth.nx"
7import "nx_cms_exceed.nx"
8import "nx_brand_tokens.nx"
9
10
11func ib(v: i64, lo: i64, hi: i64) -> i64 { if v < lo { return 0 } if v > hi { return 0 } return 1 }
12func axis_ahead(name: *u8, our: i64, inc: i64, n: i64, tot: *i64) -> i64 {
13 let v: i64 = xcd_verdict(our, inc); let ok: i64 = xcd_referee_ok(v, our, n)
14 var pass: i64 = 0; if v == XCD_AHEAD { if ok == 1 { pass = 1 } }
15 if pass == 1 { gw(" PASS " as *u8); tot[0]=tot[0]+1 } else { gw(" FAIL " as *u8); tot[1]=tot[1]+1 }
16 gw(name); gw(" -> " as *u8); gw(xcd_vname(v)); gw(" (ours=" as *u8); gn(our); gw("/" as *u8); gn(n); gw(" vs documented=" as *u8); gn(inc); gw("/" as *u8); gn(n); gw(")\n" as *u8)
17 return pass
18}
19
20func main() -> i64 {
21 let tot: *i64 = sys_mmap(32) as *i64
22 tot[0]=0; tot[1]=0
23 let lp: *i64 = sys_mmap(16) as *i64
24 gw("=== nx_a11y_breadth_gate -- broad WCAG-2.2 checker (3->12 criteria) + enforced-a11y exceed ===\n" as *u8)
25
26 let page: *u8 = sys_read_file("web_assets/andelin_branded.html" as *u8, lp)
27 let pn: i64 = lp[0]
28 var sc: i64 = 0
29 if (page as i64) != 0 { sc = ab_score(page, pn) }
30 gw(" andelin_branded.html criteria passed: lang=" as *u8); gn(ab_lang(page,pn)); gw(" title=" as *u8); gn(ab_title(page,pn))
31 gw(" reflow=" as *u8); gn(ab_reflow(page,pn)); gw(" img-alt=" as *u8); gn(ab_img_alt(page,pn)); gw(" landmarks=" as *u8); gn(ab_landmarks(page,pn))
32 gw(" focus=" as *u8); gn(ab_focus(page,pn)); gw(" motion=" as *u8); gn(ab_motion(page,pn)); gw(" target=" as *u8); gn(ab_target(page,pn))
33 gw(" links=" as *u8); gn(ab_links(page,pn)); gw(" name=" as *u8); gn(ab_name(page,pn)); gw(" keyboard=" as *u8); gn(ab_keyboard(page,pn)); gw(" contrast=" as *u8); gn(ab_contrast(page,pn)); gw("\n" as *u8)
34 gw(" total = " as *u8); gn(sc); gw(" / 12\n" as *u8)
35 t_row("A1 our built page passes the broad WCAG set by construction (>=11/12)" as *u8, ib(sc, 11, 12), tot)
36
37 let bad: *u8 = "<!doctype html><html><body><img src=\"x\"><a href=\"#\">click here</a><p style=\"font-size:12px\">x</p><script>z</script></body></html>" as *u8
38 var bn: i64 = 0; while bad[bn] != (0 as u8) { bn = bn + 1 }
39 let scb: i64 = ab_score(bad, bn)
40 gw(" inaccessible page total = " as *u8); gn(scb); gw(" / 12\n" as *u8)
41 t_row("A2 an inaccessible page scores LOW (<=2/12) -- the checker discriminates" as *u8, ib(scb, 0, 2), tot)
42
43 // ENFORCED a11y breadth: ours auto-checks+ENFORCES 12 criteria by construction; proprietary builders (a11y≈0,
44 // June-2026 research) cover ~2; axe/Lighthouse AUDIT-not-enforce. Honest residual: axe's raw breadth (50+) > ours.
45 axis_ahead("A3 ENFORCED WCAG breadth: 12 criteria enforced-by-construction vs proprietary ~2 (axe audits-not-enforces)" as *u8, sc, 2, 12, tot)
46
47 var st1: i64 = 0; if xcd_referee_ok(XCD_AHEAD, 11, 12) == 0 { st1 = 1 }
48 t_row("A4 self-test: referee rejects overclaim (AHEAD with <full coverage)" as *u8, st1, tot)
49
50 gw("\nrows pass=" as *u8); gn(tot[0]); gw(" fail=" as *u8); gn(tot[1]); gw("\n" as *u8)
51 if tot[1] == 0 { gw("VERDICT=GREEN -- a11y widened 3->12, enforced-by-construction + sovereign. (Raw breadth vs axe 50+ = acknowledged residual.)\n" as *u8); return 0 }
52 gw("VERDICT=RED\n" as *u8)
53 return 1
54}