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}