code wiki / _hdl_build / nx_meet_emit_gate.nx
nx_meet_emit_gate.nx source
↩ module page · 109 lines · 8238 B
1import "nx_gate_gn.nx"
2// nx_meet_emit_gate.nx -- liar-kill gate for R1 (+P1 nav, +R1b escaping). Sovereign fork/exec: two swapped-side
3// fixtures -> emit each to web_assets/site_<slug>/index.html, then assert: sovereignty floor, token-driven +
4// responsive, a real HEADER NAV (Home/Jobs/Apply/Hire/About -> clean URLs), the two-sided structure, DATA-DRIVEN
5// + HTML-ESCAPED content (brand/side '&' -> '&' present, raw ABSENT), and REUSABLE-VENN-WITH-TEETH (the
6// contractors/clients page shows those sides and does NOT leak Candidates/Recruiters). expect_exit: 0
7import "nx_syscalls.nx"
8
9func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
10func gslen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
11func gfind(hay: *u8, hl: i64, needle: *u8) -> i64 {
12 let nl: i64 = gslen(needle); if nl == 0 { return 0-1 }
13 var i: i64 = 0
14 while i + nl <= hl { var k: i64=0; var hit: i64=1; while k<nl { if hay[i+k]!=needle[k]{hit=0;k=nl}else{k=k+1} } if hit==1 {return i} i=i+1 }
15 return 0-1
16}
17func ghas(hay: *u8, hl: i64, needle: *u8) -> i64 { if gfind(hay, hl, needle) >= 0 { return 1 } return 0 }
18func gwrite(path: *u8, s: *u8) -> i64 {
19 let fd: i64 = sys_openat_wr(path, 0x1a4)
20 if fd < 0 { return 0 - 1 }
21 var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 }
22 sys_write(fd, s, n); sys_close(fd); return n
23}
24func spawn(path: *u8, a0: *u8, a1: *u8, redir: *u8) -> i64 {
25 let pid: i64 = sys_fork()
26 if pid == 0 {
27 let fd: i64 = sys_openat_wr(redir, 420)
28 if fd >= 0 { sys_dup3(fd, 1, 0); sys_dup3(fd, 2, 0) }
29 let argv: *i64 = sys_mmap(64) as *i64
30 var n: i64 = 0
31 argv[0] = path as i64; n = 1
32 if (a0 as i64) != 0 { argv[n] = a0 as i64; n = n + 1 }
33 if (a1 as i64) != 0 { argv[n] = a1 as i64; n = n + 1 }
34 argv[n] = 0
35 let envp: *i64 = sys_mmap(16) as *i64
36 envp[0] = "PATH=/usr/bin:/bin\x00" as *u8 as i64; envp[1] = 0
37 sys_execve(path, argv, envp)
38 sys_exit(127)
39 }
40 let st: *i64 = sys_mmap(16) as *i64
41 sys_wait4(pid, st, 0)
42 return (st[0] >> 8) & 0xff
43}
44
45func main() -> i64 {
46 gp("=== nx_meet_emit_gate: R1 home -- sovereign + nav + escaped + reusable venn ===\n" as *u8)
47 let RUNNER: *u8 = "_offc/nx_sov_build_run.elf\x00" as *u8
48 let EMIT: *u8 = "/tmp/nx_meet_emit.sov.elf\x00" as *u8
49 let SCRATCH: *u8 = "knowledge/status/meet_emit_gate_scratch.log\x00" as *u8
50
51 spawn(RUNNER, "nx_meet_emit\x00" as *u8, 0 as *u8, SCRATCH)
52 gwrite("web_assets/meet_gatedemo.meet\x00" as *u8, "meet|brand|Community Meet -- McKinney & DFW\nmeet|region|McKinney & the Dallas metro\nmeet|zip|75071\nmeet|sideA|Candidates\nmeet|sideB|Recruiters & Employers\nmeet|sideA_body|Get seen by real recruiters.\nmeet|sideB_body|Meet pre-verified local candidates.\nmeet|hero_headline|Quality meets quality.\nmeet|cta_label|Request an invite\n" as *u8)
53 gwrite("web_assets/meet_gatevenn.meet\x00" as *u8, "meet|brand|Trade Meet -- North Texas\nmeet|region|North Texas\nmeet|zip|75071\nmeet|sideA|Contractors\nmeet|sideB|Clients\nmeet|sideA_body|Get hired by real clients.\nmeet|sideB_body|Meet vetted local contractors.\nmeet|hero_headline|Quality meets quality.\nmeet|cta_label|Request an invite\n" as *u8)
54
55 spawn(EMIT, "gatedemo\x00" as *u8, 0 as *u8, SCRATCH)
56 spawn(EMIT, "gatevenn\x00" as *u8, 0 as *u8, SCRATCH)
57
58 let lp: *i64 = sys_mmap(16) as *i64; lp[0] = 0
59 let h: *u8 = sys_read_file("web_assets/site_gatedemo/index.html\x00" as *u8, lp)
60 if (h as i64) == 0 { gp("MEET-EMIT-GATE verdict=RED reason=demo-output-missing\n" as *u8); sys_exit(1); return 1 }
61 let n: i64 = lp[0]
62 let lp2: *i64 = sys_mmap(16) as *i64; lp2[0] = 0
63 let v: *u8 = sys_read_file("web_assets/site_gatevenn/index.html\x00" as *u8, lp2)
64 if (v as i64) == 0 { gp("MEET-EMIT-GATE verdict=RED reason=venn-output-missing\n" as *u8); sys_exit(1); return 1 }
65 let vn: i64 = lp2[0]
66 gp(" demo bytes=" as *u8); gn(n); gp(" venn bytes=" as *u8); gn(vn); gp("\n" as *u8)
67
68 var pass: i64 = 0; var fail: i64 = 0
69 // sovereignty floor
70 if gfind(h, n, "<script" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL has-script\n" as *u8) }
71 if gfind(h, n, "eval(" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL has-eval\n" as *u8) }
72 if gfind(h, n, "javascript:" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL has-jsurl\n" as *u8) }
73 if gfind(h, n, "onclick" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL has-inline-handler\n" as *u8) }
74 if gfind(h, n, "src=" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL has-external-src\n" as *u8) }
75 // token-driven + responsive
76 if ghas(h, n, ":root{" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-root-tokens\n" as *u8) }
77 if ghas(h, n, "var(--nx-color-primary)" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL not-token-driven\n" as *u8) }
78 if ghas(h, n, "width=device-width" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL not-responsive\n" as *u8) }
79 // P1: real header nav -> clean URLs
80 if ghas(h, n, "class=\"nav\"" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-nav\n" as *u8) }
81 if ghas(h, n, ">Home<" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-nav-home\n" as *u8) }
82 if ghas(h, n, ">Jobs<" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-nav-jobs\n" as *u8) }
83 if ghas(h, n, ">Apply<" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-nav-apply\n" as *u8) }
84 if ghas(h, n, ">Hire<" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-nav-hire\n" as *u8) }
85 if ghas(h, n, ">About<" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-nav-about\n" as *u8) }
86 if ghas(h, n, "href=\"jobs.html\"" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-clean-jobs-href\n" as *u8) }
87 if ghas(h, n, "href=\"apply.html\"" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-clean-apply-href\n" as *u8) }
88 // two-sided structure
89 if ghas(h, n, "<header" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-header\n" as *u8) }
90 if ghas(h, n, "class=\"hero\"" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-hero\n" as *u8) }
91 if ghas(h, n, "Step 1" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-steps\n" as *u8) }
92 if ghas(h, n, "class=\"trust\"" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL no-trust\n" as *u8) }
93 // DATA-DRIVEN + ESCAPED (R1b)
94 if ghas(h, n, "Community Meet -- McKinney & DFW" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL brand-not-escaped\n" as *u8) }
95 if gfind(h, n, "McKinney & DFW" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL raw-amp-leaked\n" as *u8) }
96 if ghas(h, n, "For Candidates" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL demo-sideA-missing\n" as *u8) }
97 if ghas(h, n, "For Recruiters & Employers" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL sideB-not-escaped\n" as *u8) }
98 if gfind(h, n, "Recruiters & Employers" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL raw-sideB-leaked\n" as *u8) }
99 if ghas(h, n, "Quality meets quality." as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL demo-hero-missing\n" as *u8) }
100 // REUSABLE VENN + teeth
101 if ghas(v, vn, "For Contractors" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL venn-sideA-missing\n" as *u8) }
102 if ghas(v, vn, "For Clients" as *u8) == 1 { pass=pass+1 } else { fail=fail+1; gp(" FAIL venn-sideB-missing\n" as *u8) }
103 if gfind(v, vn, "Candidates" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL venn-leaks-candidates\n" as *u8) }
104 if gfind(v, vn, "Recruiters" as *u8) < 0 { pass=pass+1 } else { fail=fail+1; gp(" FAIL venn-leaks-recruiters\n" as *u8) }
105
106 gp("MEET-EMIT-GATE pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail)
107 if fail == 0 { gp(" verdict=GREEN (sovereign 0-JS home; nav + clean URLs + escaped data + reusable venn)\n" as *u8); sys_exit(0); return 0 }
108 gp(" verdict=RED\n" as *u8); sys_exit(1); return 1
109}