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}