code wiki / _hdl_build / nx_site_requirements_gate.nx

nx_site_requirements_gate.nx source

↩ module page · 87 lines · 5531 B

1// nx_site_requirements_gate.nx -- referee for R5b (nx_site_requirements / the .req content compiler). 2// Composes the SAME corpus-derived showcase twice in one process: (1) WITHOUT a brief -> the grid placeholder 3// marker is PRESENT (N1 baseline, proves the mechanism does the work); (2) WITH the test.req brief loaded -> 4// the brief's copy LANDS verbatim, the placeholder is GONE from the req'd section, non-req'd archetypes keep 5// their defaults (fallback intact), and the ADA shell survives. GREEN iff 6/6. 6// Wrapper pre-cleans /tmp/tplcorpus_req /tmp/factory_req1 /tmp/factory_req2. 7// license_tier: ORIGINAL expect_exit: 0 8import "nx_gate.nx" 9import "nx_site_archetype.nx" 10import "nx_gate_verdict.nx" 11 12func gr_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 13func gr_has(hay: *u8, hn: i64, needle: *u8) -> i64 { 14 if (hay as i64)==0 { return 0 } 15 let nl: i64 = gr_slen(needle) 16 if nl==0 { return 1 } 17 var i: i64=0 18 while i+nl<=hn { var j: i64=0; var ok: i64=1; while j<nl { if (hay[i+j] as i64)!=(needle[j] as i64) { ok=0; j=nl } else { j=j+1 } } if ok==1 { return 1 } i=i+1 } 19 return 0 20} 21func gr_row(name: *u8, ok: i64) -> i64 { gw(" " as *u8); gw(name); if ok==1 { gw(" PASS\n" as *u8) } else { gw(" FAIL\n" as *u8) } return 0 } 22 23func main() -> i64 { 24 // corpus from the seed templates 25 let counts: *i64 = sys_mmap(64) as *i64 26 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_req/" as *u8, 5000, 67108864, counts) 27 // (1) baseline compose, NO brief 28 sa_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_req/" as *u8, "/tmp/factory_req1" as *u8, "nishifamily.com" as *u8) 29 let szp: *i64 = sys_mmap(16) as *i64 30 let e1: *u8 = sys_read_file("/tmp/factory_req1/ecommerce.html" as *u8, szp); let e1n: i64 = szp[0] 31 // (2) load the brief, compose again 32 let rl: i64 = sa_req_load("web_assets/_tpl_seed/test.req" as *u8) 33 sa_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_req/" as *u8, "/tmp/factory_req2" as *u8, "nishifamily.com" as *u8) 34 let e2: *u8 = sys_read_file("/tmp/factory_req2/ecommerce.html" as *u8, szp); let e2n: i64 = szp[0] 35 let r2: *u8 = sys_read_file("/tmp/factory_req2/resume.html" as *u8, szp); let r2n: i64 = szp[0] 36 37 let PH: *u8 = "swap in real content" as *u8 38 // N1 (baseline NEG CONTROL): without a brief the placeholder IS present -- the compiler does the work 39 var n1: i64=0; if gr_has(e1, e1n, PH)==1 { n1=1 } 40 // T2: brief copy LANDS verbatim (item title + body + lede override) 41 var t2: i64=0 42 if gr_has(e2, e2n, "Hand-thrown stoneware mug" as *u8)==1 { 43 if gr_has(e2, e2n, "waxed duck canvas and copper rivets" as *u8)==1 { 44 if gr_has(e2, e2n, "requirements-driven copy landed here" as *u8)==1 { t2=1 } } } 45 // T3: the req'd grid has NO leftover placeholder in its first two cards region... (whole-page check is too 46 // strong: items 3-6 have no brief rows and default honestly). So: page still HAS defaults for 3..6 AND the 47 // brief items replaced 1..2 -- checked by T2 + T4 below; here assert the SPECIFIC replaced default is gone: 48 var t3: i64=0; if gr_has(e2, e2n, "Product 1" as *u8)==0 { if gr_has(e2, e2n, "Product 2" as *u8)==0 { if gr_has(e2, e2n, "Product 3" as *u8)==1 { t3=1 } } } 49 // T4: non-req'd archetype (resume) keeps its defaults (fallback intact) 50 var t4: i64=0; if gr_has(r2, r2n, "Selected work" as *u8)==1 { if gr_has(r2, r2n, PH)==1 { t4=1 } } 51 // T5: ADA shell by construction survives the req path 52 var t5: i64=0 53 if gr_has(e2, e2n, "class=\"skip-link\"" as *u8)==1 { if gr_has(e2, e2n, "<main id=\"main\"" as *u8)==1 { if gr_has(e2, e2n, "--nx-color" as *u8)==1 { t5=1 } } } 54 // T6: loader reported real lines 55 var t6: i64=0; if rl >= 5 { t6=1 } 56 57 var passes: i64=0 58 if n1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 } 59 if t4==1 { passes=passes+1 } if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 } 60 var green: i64=0; if passes==6 { green=1 } 61 62 gw("=== nx_site_requirements_gate -- R5b requirements -> content compiler ===\n" as *u8) 63 gr_row("N1-baseline-placeholder(neg) " as *u8, n1) 64 gr_row("T2-brief-copy-lands-verbatim " as *u8, t2) 65 gr_row("T3-replaced-defaults-gone " as *u8, t3) 66 gr_row("T4-fallback-defaults-intact " as *u8, t4) 67 gr_row("T5-ada-shell-survives " as *u8, t5) 68 gr_row("T6-loader-line-count " as *u8, t6) 69 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) } 70 gw(" passes=" as *u8); gn(passes); gw("/6 req_lines=" as *u8); gn(rl); gw("\n" as *u8) 71 72 let lg: i64 = sys_openat_append("knowledge/status/site_requirements.log" as *u8, 0x1a4) 73 if lg >= 0 { 74 if green==1 { let m: *u8 = "SITE-REQ rows=6 pass=6 verdict=GREEN\n" as *u8; sys_write(lg, m, 37) } 75 else { let m2: *u8 = "SITE-REQ verdict=RED\n" as *u8; sys_write(lg, m2, 21) } 76 sys_close(lg) 77 } 78 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 79 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 80 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 81 let ctr__dry: *i64 = gv_ctr() 82 ctr__dry[0] = green 83 ctr__dry[1] = 1 84 let rc__dry: i64 = gv_verdict("SITE-REQUIREMENTS-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 85 sys_exit(rc__dry) 86 return rc__dry 87}