code wiki / _hdl_build / nx_teacher_role_exceed_gate.nx
nx_teacher_role_exceed_gate.nx source
↩ module page · 72 lines · 4226 B
1// nx_teacher_role_exceed_gate.nx -- proves the role grader's sovereignty check has TEETH (it is not a
2// rubber-stamp): a CLEAN organ grades sovereign, a planted forbidden dep grades NOT-sovereign, and a
3// MISSING file grades NOT-sovereign. Without this, "9/9 sovereign" could be a fake green.
4// T1 clean fixture (only nx_ imports) -> sovereign=1
5// T2[neg] fixture with a forbidden dep (python3) -> sovereign=0 (liar-kill)
6// T3[neg] fixture with a shell shebang -> sovereign=0
7// T4[neg] missing file -> sovereign=0 (cannot grade a non-existent organ)
8// GREEN iff all. Sovereign: imports nx_teacher_role_exceed + nx_syscalls. license_tier: ORIGINAL
9import "nx_teacher_role_exceed.nx"
10import "nx_syscalls.nx"
11
12func rg_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != 0 as u8 { n = n + 1 } sys_write(1, s, n); return 0 }
13func rg_putn(v: i64) -> i64 {
14 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
15 var m: i64 = v; let d: *u8 = sys_mmap(24); var k: i64 = 0
16 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
17 var j: i64 = k - 1
18 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 }
19 return 0
20}
21func rg_cat(dst: *u8, off: i64, s: *u8) -> i64 { var i: i64 = 0; while s[i] != 0 as u8 { dst[off + i] = s[i]; i = i + 1 } return off + i }
22func rg_catn(dst: *u8, off: i64, v: i64) -> i64 {
23 var m: i64 = v; var o: i64 = off
24 let t: *u8 = sys_mmap(28); var k: i64 = 0
25 if m == 0 { t[0] = 48 as u8; k = 1 }
26 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
27 var i: i64 = 0; while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 }
28 return o + k
29}
30func rg_join(out: *u8, a: *u8, b: *u8) -> i64 { var o: i64 = rg_cat(out, 0, a); o = rg_cat(out, o, b); out[o] = 0 as u8; return o }
31func rg_write(path: *u8, content: *u8) -> i64 {
32 let fd: i64 = sys_openat_wr(path, 0x1a4); if fd < 0 { return 0 - 1 }
33 var n: i64 = 0; while content[n] != 0 as u8 { n = n + 1 }
34 sys_write(fd, content, n); sys_close(fd); return 0
35}
36func rg_assert(label: *u8, cond: i64) -> i64 {
37 if cond != 0 { rg_puts(" [PASS] "); rg_puts(label); rg_puts("\n"); return 1 }
38 rg_puts(" [FAIL] "); rg_puts(label); rg_puts("\n"); return 0
39}
40
41func main() -> i64 {
42 rg_puts("=== nx_teacher_role_exceed_gate: the sovereignty check has teeth (liar-killed) ===\n")
43 let ep: i64 = sys_now_realtime_sec()
44 let clean: *u8 = sys_mmap(256); var c0: i64 = rg_cat(clean, 0, "/tmp/rge_clean-" as *u8); c0 = rg_catn(clean, c0, ep); c0 = rg_cat(clean, c0, ".nx" as *u8); clean[c0] = 0 as u8
45 let dirty: *u8 = sys_mmap(256); var d0: i64 = rg_cat(dirty, 0, "/tmp/rge_dirty-" as *u8); d0 = rg_catn(dirty, d0, ep); d0 = rg_cat(dirty, d0, ".nx" as *u8); dirty[d0] = 0 as u8
46 let shel: *u8 = sys_mmap(256); var s0: i64 = rg_cat(shel, 0, "/tmp/rge_shell-" as *u8); s0 = rg_catn(shel, s0, ep); s0 = rg_cat(shel, s0, ".nx" as *u8); shel[s0] = 0 as u8
47 let miss: *u8 = sys_mmap(256); var m0: i64 = rg_cat(miss, 0, "/tmp/rge_missing-" as *u8); m0 = rg_catn(miss, m0, ep); m0 = rg_cat(miss, m0, ".nx" as *u8); miss[m0] = 0 as u8
48
49 rg_write(clean, "import \"nx_syscalls.nx\"\nfunc main() -> i64 { return 0 }\n\x00" as *u8)
50 rg_write(dirty, "// drives python3 to do the work\nfunc main() -> i64 { return 0 }\n\x00" as *u8)
51 rg_write(shel, "#!/bin/sh\necho hi\n\x00" as *u8)
52
53 var pass: i64 = 0
54 var total: i64 = 0
55 var c: i64 = 0
56
57 c = 0; if re_sovereign(clean) == 1 { c = 1 }
58 total = total + 1; pass = pass + rg_assert("T1 clean organ -> sovereign=1", c)
59
60 c = 0; if re_sovereign(dirty) == 0 { c = 1 }
61 total = total + 1; pass = pass + rg_assert("T2[neg] forbidden dep (python3) -> sovereign=0", c)
62
63 c = 0; if re_sovereign(shel) == 0 { c = 1 }
64 total = total + 1; pass = pass + rg_assert("T3[neg] shell shebang -> sovereign=0", c)
65
66 c = 0; if re_sovereign(miss) == 0 { c = 1 }
67 total = total + 1; pass = pass + rg_assert("T4[neg] missing file -> sovereign=0", c)
68
69 rg_puts("\n---- nx_teacher_role_exceed gate: passed "); rg_putn(pass); rg_puts(" / "); rg_putn(total); rg_puts(" ----\n")
70 if pass == total { rg_puts("verdict=GREEN\n"); sys_exit(0); return 0 }
71 rg_puts("verdict=RED\n"); sys_exit(1); return 1
72}