code wiki / _hdl_build / nx_teacher_mastery_gate.nx

nx_teacher_mastery_gate.nx source

↩ module page · 106 lines · 5640 B

1// nx_teacher_mastery_gate.nx -- proves the honest MASTERY measure: a drill is mastered ONLY on a correct 2// recall, and mastery cannot be faked. Hermetic /tmp store. Discriminating + liar-killed: 3// T1 zero-mastery before any attempt 4// T2 CORRECT recall (answer contains the rule) -> mastered=1 5// T3 mastery rate rises to 1 6// T4[neg] WRONG answer -> mastered=0 (cannot fake capability with a wrong recall) 7// T5 rate stays 1 after the wrong attempt 8// T6 a later CORRECT recall of I2 -> mastered; rate=2 9// T7[neg] unknown id -> not mastered (no fabricated mastery for a non-existent insight) 10// GREEN iff all. Sovereign: imports nx_teacher_mastery + nx_syscalls. license_tier: ORIGINAL 11import "nx_teacher_mastery.nx" 12import "nx_syscalls.nx" 13import "nx_gate_verdict.nx" 14 15func gm_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != 0 as u8 { n = n + 1 } sys_write(1, s, n); return 0 } 16func gm_putn(v: i64) -> i64 { 17 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 18 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 19 let d: *u8 = sys_mmap(24); var k: i64 = 0 20 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 21 var j: i64 = k - 1 22 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 } 23 return 0 24} 25func gm_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 } 26func gm_catn(dst: *u8, off: i64, v: i64) -> i64 { 27 var m: i64 = v; var o: i64 = off 28 let t: *u8 = sys_mmap(28); var k: i64 = 0 29 if m == 0 { t[0] = 48 as u8; k = 1 } 30 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 31 var i: i64 = 0; while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 } 32 return o + k 33} 34func gm_join(out: *u8, a: *u8, b: *u8) -> i64 { var o: i64 = gm_cat(out, 0, a); o = gm_cat(out, o, b); out[o] = 0 as u8; return o } 35func gm_mkdir(path: *u8) -> i64 { return sys_mkdir(path, 0x1ed) } 36func gm_assert(label: *u8, cond: i64) -> i64 { 37 if cond != 0 { gm_puts(" [PASS] "); gm_puts(label); gm_puts("\n"); return 1 } 38 gm_puts(" [FAIL] "); gm_puts(label); gm_puts("\n"); return 0 39} 40// seed a /tmp capability store with 3 insights {id, rule} (one ncfg commit). 41func gm_row(w: *i64, idx: i64, id: *u8, rule: *u8) -> i64 { 42 let kb: *i64 = sys_mmap(8 * 8) as *i64 43 let vb: *i64 = sys_mmap(8 * 8) as *i64 44 kb[0] = ("id\x00") as i64; vb[0] = (id as i64) 45 kb[1] = ("rule\x00") as i64; vb[1] = (rule as i64) 46 return ncfg_add_row(w, "insight\x00" as *u8, idx, kb, vb, 2) 47} 48func gm_seed(cap: *u8) -> i64 { 49 let w: *i64 = ncfg_begin() 50 gm_row(w, 0, "I1\x00" as *u8, "alpha rule one\x00" as *u8) 51 gm_row(w, 1, "I2\x00" as *u8, "beta rule two\x00" as *u8) 52 gm_row(w, 2, "I3\x00" as *u8, "gamma rule three\x00" as *u8) 53 ncfg_set_count(w, "insight\x00" as *u8, 3) 54 return ncfg_commit(cap, w) 55} 56 57func main() -> i64 { 58 gm_puts("=== nx_teacher_mastery_gate: drill recall mastery (correct->mastered, wrong->NOT; liar-killed) ===\n") 59 let epoch: i64 = sys_now_realtime_sec() 60 let root: *u8 = sys_mmap(512) 61 var ro: i64 = gm_cat(root, 0, "/tmp/mstg-" as *u8); ro = gm_catn(root, ro, epoch); root[ro] = 0 as u8 62 gm_mkdir(root) 63 let cap: *u8 = sys_mmap(512); gm_join(cap, root, "/cap-\x00" as *u8) 64 let mst: *u8 = sys_mmap(512); gm_join(mst, root, "/mastery-\x00" as *u8) 65 gm_seed(cap) 66 67 var pass: i64 = 0 68 var total: i64 = 0 69 var c: i64 = 0 70 71 c = 0; if mst_rate(cap, mst) == 0 { c = 1 } 72 total = total + 1; pass = pass + gm_assert("T1 zero mastery before any attempt", c) 73 74 let a1: i64 = mst_attempt(cap, mst, "I1\x00" as *u8, "alpha rule one\x00" as *u8) 75 c = 0; if a1 == 1 { if mst_mastered(mst, "I1\x00" as *u8) == 1 { c = 1 } } 76 total = total + 1; pass = pass + gm_assert("T2 CORRECT recall -> mastered=1", c) 77 78 c = 0; if mst_rate(cap, mst) == 1 { c = 1 } 79 total = total + 1; pass = pass + gm_assert("T3 mastery rate rises to 1", c) 80 81 let a2: i64 = mst_attempt(cap, mst, "I2\x00" as *u8, "totally unrelated guess\x00" as *u8) 82 c = 0; if a2 == 0 { if mst_mastered(mst, "I2\x00" as *u8) == 0 { c = 1 } } 83 total = total + 1; pass = pass + gm_assert("T4[neg] WRONG answer -> mastered=0 (cannot fake)", c) 84 85 c = 0; if mst_rate(cap, mst) == 1 { c = 1 } 86 total = total + 1; pass = pass + gm_assert("T5 rate stays 1 after the wrong attempt", c) 87 88 let a3: i64 = mst_attempt(cap, mst, "I2\x00" as *u8, "ah yes -- beta rule two -- recalled\x00" as *u8) 89 c = 0; if a3 == 1 { if mst_rate(cap, mst) == 2 { c = 1 } } 90 total = total + 1; pass = pass + gm_assert("T6 later CORRECT recall of I2 -> mastered; rate=2", c) 91 92 let a4: i64 = mst_attempt(cap, mst, "ZZ\x00" as *u8, "alpha rule one\x00" as *u8) 93 c = 0; if a4 == 0 { if mst_mastered(mst, "ZZ\x00" as *u8) == 0 { c = 1 } } 94 total = total + 1; pass = pass + gm_assert("T7[neg] unknown id -> not mastered (no fabricated mastery)", c) 95 96 gm_puts("\n---- nx_teacher_mastery gate: passed "); gm_putn(pass); gm_puts(" / "); gm_putn(total); gm_puts(" ----\n") 97 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 98 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 99 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 100 let ctr__dry: *i64 = gv_ctr() 101 ctr__dry[0] = pass 102 ctr__dry[1] = total 103 let rc__dry: i64 = gv_verdict("TEACHER-MASTERY-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 104 sys_exit(rc__dry) 105 return rc__dry 106}