code wiki / _hdl_build / nx_site_requirements_gate.nx
nx_site_requirements_gate.nx source
↩ module page · 79 lines · 4986 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"
10
11func gr_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
12func gr_has(hay: *u8, hn: i64, needle: *u8) -> i64 {
13 if (hay as i64)==0 { return 0 }
14 let nl: i64 = gr_slen(needle)
15 if nl==0 { return 1 }
16 var i: i64=0
17 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 }
18 return 0
19}
20func 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 }
21
22func main() -> i64 {
23 // corpus from the seed templates
24 let counts: *i64 = sys_mmap(64) as *i64
25 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_req/" as *u8, 5000, 67108864, counts)
26 // (1) baseline compose, NO brief
27 sa_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_req/" as *u8, "/tmp/factory_req1" as *u8, "nishifamily.com" as *u8)
28 let szp: *i64 = sys_mmap(16) as *i64
29 let e1: *u8 = sys_read_file("/tmp/factory_req1/ecommerce.html" as *u8, szp); let e1n: i64 = szp[0]
30 // (2) load the brief, compose again
31 let rl: i64 = sa_req_load("web_assets/_tpl_seed/test.req" as *u8)
32 sa_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_req/" as *u8, "/tmp/factory_req2" as *u8, "nishifamily.com" as *u8)
33 let e2: *u8 = sys_read_file("/tmp/factory_req2/ecommerce.html" as *u8, szp); let e2n: i64 = szp[0]
34 let r2: *u8 = sys_read_file("/tmp/factory_req2/resume.html" as *u8, szp); let r2n: i64 = szp[0]
35
36 let PH: *u8 = "swap in real content" as *u8
37 // N1 (baseline NEG CONTROL): without a brief the placeholder IS present -- the compiler does the work
38 var n1: i64=0; if gr_has(e1, e1n, PH)==1 { n1=1 }
39 // T2: brief copy LANDS verbatim (item title + body + lede override)
40 var t2: i64=0
41 if gr_has(e2, e2n, "Hand-thrown stoneware mug" as *u8)==1 {
42 if gr_has(e2, e2n, "waxed duck canvas and copper rivets" as *u8)==1 {
43 if gr_has(e2, e2n, "requirements-driven copy landed here" as *u8)==1 { t2=1 } } }
44 // T3: the req'd grid has NO leftover placeholder in its first two cards region... (whole-page check is too
45 // strong: items 3-6 have no brief rows and default honestly). So: page still HAS defaults for 3..6 AND the
46 // brief items replaced 1..2 -- checked by T2 + T4 below; here assert the SPECIFIC replaced default is gone:
47 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 } } }
48 // T4: non-req'd archetype (resume) keeps its defaults (fallback intact)
49 var t4: i64=0; if gr_has(r2, r2n, "Selected work" as *u8)==1 { if gr_has(r2, r2n, PH)==1 { t4=1 } }
50 // T5: ADA shell by construction survives the req path
51 var t5: i64=0
52 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 } } }
53 // T6: loader reported real lines
54 var t6: i64=0; if rl >= 5 { t6=1 }
55
56 var passes: i64=0
57 if n1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 }
58 if t4==1 { passes=passes+1 } if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 }
59 var green: i64=0; if passes==6 { green=1 }
60
61 gw("=== nx_site_requirements_gate -- R5b requirements -> content compiler ===\n" as *u8)
62 gr_row("N1-baseline-placeholder(neg) " as *u8, n1)
63 gr_row("T2-brief-copy-lands-verbatim " as *u8, t2)
64 gr_row("T3-replaced-defaults-gone " as *u8, t3)
65 gr_row("T4-fallback-defaults-intact " as *u8, t4)
66 gr_row("T5-ada-shell-survives " as *u8, t5)
67 gr_row("T6-loader-line-count " as *u8, t6)
68 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) }
69 gw(" passes=" as *u8); gn(passes); gw("/6 req_lines=" as *u8); gn(rl); gw("\n" as *u8)
70
71 let lg: i64 = sys_openat_append("knowledge/status/site_requirements.log" as *u8, 0x1a4)
72 if lg >= 0 {
73 if green==1 { let m: *u8 = "SITE-REQ rows=6 pass=6 verdict=GREEN\n" as *u8; sys_write(lg, m, 37) }
74 else { let m2: *u8 = "SITE-REQ verdict=RED\n" as *u8; sys_write(lg, m2, 21) }
75 sys_close(lg)
76 }
77 if green==1 { return 0 }
78 return 1
79}