code wiki / _hdl_build / nx_site_handoff_gate.nx

nx_site_handoff_gate.nx source

↩ module page · 81 lines · 4661 B

1// nx_site_handoff_gate.nx -- referee for R-HANDOFF (nx_site_handoff). Reads the artifacts the wrapper produced: 2// (1) the emitted .site blueprint (from the factory .req, ecommerce archetype), (2) the docroot nx_site_build 3// REBUILT from that blueprint (proving the PRODUCTION editor stack -- siteedit/save/preview/publish -- can own 4// and customize the factory's output), (3) negative-control exit codes (unknown archetype refused, missing brief 5// refused). GREEN iff 6/6. license_tier: ORIGINAL expect_exit: 0 6import "nx_gate.nx" 7 8func hg_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 9func hg_has(hay: *u8, hn: i64, needle: *u8) -> i64 { 10 if (hay as i64)==0 { return 0 } 11 let nl: i64 = hg_slen(needle) 12 if nl==0 { return 1 } 13 var i: i64=0 14 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 } 15 return 0 16} 17func hg_count(hay: *u8, hn: i64, needle: *u8) -> i64 { 18 if (hay as i64)==0 { return 0 } 19 let nl: i64 = hg_slen(needle) 20 if nl==0 { return 0 } 21 var c: i64=0 22 var i: i64=0 23 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 { c=c+1; i=i+nl } else { i=i+1 } } 24 return c 25} 26func hg_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 } 27 28func main() -> i64 { 29 let szp: *i64 = sys_mmap(16) as *i64 30 let site: *u8 = sys_read_file("/tmp/handoff_ecom.site" as *u8, szp); let sn: i64 = szp[0] 31 let idx: *u8 = sys_read_file("/tmp/handoff_docroot/index.html" as *u8, szp); let iln: i64 = szp[0] 32 let sm: *u8 = sys_read_file("/tmp/handoff_docroot/sitemap.xml" as *u8, szp); let sml: i64 = szp[0] 33 let rc1: *u8 = sys_read_file("/tmp/handoff_rc_badarch" as *u8, szp) 34 let rc2: *u8 = sys_read_file("/tmp/handoff_rc_noreq" as *u8, szp) 35 36 // T1: the blueprint speaks the FULL .site grammar the prod editor validates 37 var t1: i64=0 38 if hg_has(site, sn, "title|" as *u8)==1 { if hg_has(site, sn, "header|Nishi|" as *u8)==1 { 39 if hg_has(site, sn, "hero|" as *u8)==1 { if hg_count(site, sn, "card|" as *u8)>=6 { 40 if hg_count(site, sn, "step|" as *u8)>=3 { if hg_count(site, sn, "sig|" as *u8)>=3 { 41 if hg_has(site, sn, "footer|" as *u8)==1 { t1=1 } } } } } } } 42 // T2: the .req brief's REAL copy landed in the blueprint (data-layer handoff, not defaults) 43 var t2: i64=0 44 if hg_has(site, sn, "Hand-thrown stoneware mug" as *u8)==1 { if hg_has(site, sn, "Linen throw blanket" as *u8)==1 { t2=1 } } 45 // T3: nx_site_build REBUILT a whole site from the handoff blueprint (the andelinwest customize loop) 46 var t3: i64=0 47 if (idx as i64)!=0 { if hg_has(idx, iln, "class=\"skip-link\"" as *u8)==1 { if hg_has(idx, iln, "<nav class=\"top\">" as *u8)==1 { if hg_has(idx, iln, "Hand-thrown stoneware mug" as *u8)==1 { t3=1 } } } } 48 // T4: the rebuilt site self-emitted a sitemap listing home + one page per card 49 var t4: i64=0 50 if hg_count(sm, sml, "<loc>" as *u8) >= 7 { t4=1 } 51 // T5 (NEG): unknown archetype refused (exit 2) 52 var t5: i64=0 53 if (rc1 as i64)!=0 { if (rc1[0] as i64)==50 { t5=1 } } 54 // T6 (NEG): missing brief refused (exit 3) 55 var t6: i64=0 56 if (rc2 as i64)!=0 { if (rc2[0] as i64)==51 { t6=1 } } 57 58 var passes: i64=0 59 if t1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 } 60 if t4==1 { passes=passes+1 } if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 } 61 var green: i64=0; if passes==6 { green=1 } 62 63 gw("=== nx_site_handoff_gate -- R-HANDOFF factory -> prod-customizable .site ===\n" as *u8) 64 hg_row("T1-blueprint-full-grammar " as *u8, t1) 65 hg_row("T2-req-copy-landed " as *u8, t2) 66 hg_row("T3-prod-emitter-rebuilds-site " as *u8, t3) 67 hg_row("T4-sitemap-lists-pages " as *u8, t4) 68 hg_row("T5-unknown-arch-refused(neg) " as *u8, t5) 69 hg_row("T6-missing-brief-refused(neg) " as *u8, t6) 70 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) } 71 gw(" passes=" as *u8); gn(passes); gw("/6\n" as *u8) 72 73 let lg: i64 = sys_openat_append("knowledge/status/site_handoff.log" as *u8, 0x1a4) 74 if lg >= 0 { 75 if green==1 { let m: *u8 = "SITE-HANDOFF rows=6 pass=6 verdict=GREEN\n" as *u8; sys_write(lg, m, 41) } 76 else { let m2: *u8 = "SITE-HANDOFF verdict=RED\n" as *u8; sys_write(lg, m2, 25) } 77 sys_close(lg) 78 } 79 if green==1 { return 0 } 80 return 1 81}