code wiki / _hdl_build / nx_uigen_l1_gate.nx

nx_uigen_l1_gate.nx source

↩ module page · 89 lines · 5081 B

1import "nx_gate_gn.nx" 2// nx_uigen_l1_gate.nx -- MEASURES roadmap rung L1 (parameterized generation). Generates 6 pages from 6 specs 3// (seed hue + layout variant) and proves, mechanically: (1) DIVERSITY -- 6 distinct generated palettes; 4// (2) ACCESSIBLE BY CONSTRUCTION -- in BOTH themes the ink/bg lightness gap is huge (light: ink dark+bg light; 5// dark: ink light+bg dark); (3) CRAFT -- every generated page carries the S-class markers (tokens, skip-link, 6// @media, clamp, focus-visible, reduced-motion) because it composes the kit. Writes one sample to web_assets 7// for the INDEPENDENT nx_ui_judge to confirm >=800. GREEN only if all three hold. expect_exit: 0 license_tier: ORIGINAL 8import "nx_syscalls.nx" 9import "nx_uigen_l1.nx" 10import "nx_gate_verdict.nx" 11 12func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 13// substring search in buf[0..len). 14func contains(buf: *u8, len: i64, lit: *u8) -> i64 { 15 var ll: i64=0; while lit[ll]!=(0 as u8){ll=ll+1} 16 if ll==0 { return 1 } 17 var i: i64=0 18 while i+ll<=len { 19 var j: i64=0; var ok: i64=1 20 while j<ll { if buf[i+j]!=lit[j] { ok=0; j=ll } else { j=j+1 } } 21 if ok==1 { return 1 } 22 i=i+1 23 } 24 return 0 25} 26func csum(p: i64) -> i64 { return (p/65536) + ((p/256)%256) + (p%256) } 27 28func main() -> i64 { 29 let cap: i64 = 262144; let buf: *u8 = sys_mmap(cap) 30 let hues: *i64 = sys_mmap(64) as *i64 31 hues[0]=18; hues[1]=82; hues[2]=148; hues[3]=208; hues[4]=272; hues[5]=334 32 let prims: *i64 = sys_mmap(64) as *i64 33 var allmark: i64=1 34 var allaccess: i64=1 35 36 gp("=== NX-UIGEN-L1 GATE -- parameterized generation: 6 specs -> 6 pages (the SYSTEM makes the design choices) ===\n" as *u8) 37 var i: i64=0 38 while i<6 { 39 let hue: i64=hues[i] 40 let variant: i64=i%3 41 let off: i64 = l1_page(buf, 0, hue, variant, "Generated UI" as *u8, "Nishi" as *u8, "A UI generated from a spec" as *u8, "seed" as *u8) 42 let prim: i64 = l1_hsl_pack(hue,62,46); prims[i]=prim 43 // accessibility by construction, BOTH themes 44 let li: i64 = csum(l1_hsl_pack(hue,25,12)) // light ink -> dark (small) 45 let lb: i64 = csum(l1_hsl_pack(hue,22,97)) // light bg -> light (large) 46 let di: i64 = csum(l1_hsl_pack(hue,15,92)) // dark ink -> light (large) 47 let db: i64 = csum(l1_hsl_pack(hue,24,9)) // dark bg -> dark (small) 48 var acc: i64=0 49 if li<230 { if lb>660 { if di>640 { if db<190 { acc=1 } } } } 50 if acc==0 { allaccess=0 } 51 // craft markers (present because it composes the kit) 52 var mk: i64=1 53 if contains(buf,off,"var(--nx-" as *u8)==0 { mk=0 } 54 if contains(buf,off,"skip-link" as *u8)==0 { mk=0 } 55 if contains(buf,off,"@media" as *u8)==0 { mk=0 } 56 if contains(buf,off,"clamp(" as *u8)==0 { mk=0 } 57 if contains(buf,off,"focus-visible" as *u8)==0 { mk=0 } 58 if contains(buf,off,"prefers-reduced-motion" as *u8)==0 { mk=0 } 59 if mk==0 { allmark=0 } 60 gp(" spec hue=" as *u8); gn(hue); gp(" layout=" as *u8); gn(variant); gp(" primary=rgb(" as *u8); gn(prim/65536); gp("," as *u8); gn((prim/256)%256); gp("," as *u8); gn(prim%256); gp(")" as *u8) 61 gp(" light[ink=" as *u8); gn(li); gp(",bg=" as *u8); gn(lb); gp("] dark[ink=" as *u8); gn(di); gp(",bg=" as *u8); gn(db); gp("]" as *u8) 62 gp(" bytes=" as *u8); gn(off); gp(" craft=" as *u8); gn(mk); gp(" a11y=" as *u8); gn(acc); gp("\n" as *u8) 63 i=i+1 64 } 65 // diversity: count distinct primaries 66 var distinct: i64=0; var a: i64=0 67 while a<6 { var seen: i64=0; var b: i64=0; while b<a { if prims[b]==prims[a] { seen=1 } b=b+1 } if seen==0 { distinct=distinct+1 } a=a+1 } 68 // write one sample for the INDEPENDENT judge 69 let soff: i64 = l1_page(buf, 0, 208, 1, "Generated UI sample" as *u8, "Nishi" as *u8, "Generated from one seed hue" as *u8, "seed" as *u8) 70 let fd: i64 = sys_openat_wr("web_assets/uigen_l1_sample.html" as *u8, 420) 71 if fd>=0 { sys_write(fd, buf, soff); sys_close(fd) } 72 73 gp("\n-- L1 MEASUREMENT: specs=6 distinct_palettes=" as *u8); gn(distinct); gp("/6 craft_all=" as *u8); gn(allmark); gp(" accessible_all=" as *u8); gn(allaccess); gp("\n" as *u8) 74 gp("-- sample written: web_assets/uigen_l1_sample.html (" as *u8); gn(soff); gp(" bytes) -> nx_ui_judge confirms >=800 independently\n" as *u8) 75 76 var ok: i64=1 77 if distinct<6 { ok=0 } 78 if allmark==0 { ok=0 } 79 if allaccess==0 { ok=0 } 80 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 81 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 82 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 83 let ctr__dry: *i64 = gv_ctr() 84 ctr__dry[0] = ok 85 ctr__dry[1] = 1 86 let rc__dry: i64 = gv_verdict("UIGEN-L1-GATE" as *u8, ctr__dry, ": the SYSTEM generated 6 distinct, both-theme-accessible, S-class pages from 6" as *u8) 87 sys_exit(rc__dry) 88 return rc__dry 89}