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 '&' -> '&amp;' 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 &amp; 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 &amp; 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}