code wiki / (root) / nx_continuity_gate.nx

nx_continuity_gate.nx source

↩ module page · 82 lines · 3810 B

1// nx_continuity_gate.nx -- REFEREE for CROSS-SCENE continuity: cf_detect_owned run 2// over a WHOLE multi-scene story for a PERSISTENT attribute (eye color). A 3// persistent attribute must not change across the story for the SAME character; 4// a transient one (facing) legitimately can, which is why this is a separate 5// whole-story pass from the per-scene conflict pass. 6// [T1] same character, eyes blue (scene1) then green (scene2) -> 1 continuity conflict 7// [T2] different characters (Mira blue, Dev green) -> 0 8// [T3] consistent (Mira blue, Mira blue) -> 0 9// Sovereign x86_64. Exit 0/1. -> knowledge/status/continuity_gate.log 10import "nx_syscalls_x86_64.nx" 11import "nx_conflict.nx" 12 13func gp(logfd: i64, s: *u8) -> i64 { 14 var n: i64 = 0 15 while s[n] != (0 as u8) { n = n + 1 } 16 sys_write(1, s, n) 17 if logfd > 0 { sys_write(logfd, s, n) } 18 return 0 19} 20func gn(logfd: i64, v: i64) -> i64 { 21 var m: i64 = v 22 if m < 0 { sys_write(1, "-\x00" as *u8, 1); if logfd > 0 { sys_write(logfd, "-\x00" as *u8, 1) } m = 0 - m } 23 let bb: *u8 = sys_mmap(32) 24 let t: *u8 = sys_mmap(32) 25 var k: i64 = 0 26 if m == 0 { t[0] = 48 as u8; k = 1 } 27 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 28 var i: i64 = 0 29 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 30 sys_write(1, bb, k) 31 if logfd > 0 { sys_write(logfd, bb, k) } 32 return 0 33} 34func slen(s: *u8) -> i64 { 35 var n: i64 = 0 36 while s[n] != (0 as u8) { n = n + 1 } 37 return n 38} 39func pr_kv(logfd: i64, label: *u8, got: i64, exp: i64) -> i64 { 40 gp(logfd, label); gp(logfd, " got=\x00" as *u8); gn(logfd, got); gp(logfd, " exp=\x00" as *u8); gn(logfd, exp) 41 if got == exp { gp(logfd, " OK\n\x00" as *u8); return 1 } 42 gp(logfd, " FAIL\n\x00" as *u8); return 0 43} 44 45func main() -> i64 { 46 let logfd: i64 = sys_openat_append("knowledge/status/continuity_gate.log\x00" as *u8, 0x1a4) 47 gp(logfd, "CONTINUITY-GATE (whole-story persistent attribute, per character)\n\x00" as *u8) 48 49 let roster: *u8 = "mira\x00dev\x00" as *u8 50 let pterms: *u8 = "blue\x00green\x00brown\x00" as *u8 51 let paxes: *i64 = sys_mmap(64) as *i64 52 paxes[0] = 0; paxes[1] = 0; paxes[2] = 0 // axis 0 = eye color 53 let out: *i64 = sys_mmap(256) as *i64 54 var ok: i64 = 1 55 56 gp(logfd, " [T1] \"Mira had blue eyes.\\n\\nLater, Mira had green eyes.\"\n\x00" as *u8) 57 let t1: *u8 = "Mira had blue eyes.\n\nLater, Mira had green eyes.\x00" as *u8 58 let c1: i64 = cf_detect_owned(t1, 0, slen(t1), roster, 2, pterms, paxes, 3, 1, out) 59 if pr_kv(logfd, " nconflicts\x00" as *u8, c1, 1) == 0 { ok = 0 } 60 if pr_kv(logfd, " char(0=mira)\x00" as *u8, out[0], 0) == 0 { ok = 0 } 61 if pr_kv(logfd, " val_i(blue)\x00" as *u8, out[2], 0) == 0 { ok = 0 } 62 if pr_kv(logfd, " val_j(green)\x00" as *u8, out[3], 1) == 0 { ok = 0 } 63 64 gp(logfd, " [T2] \"Mira had blue eyes.\\n\\nDev had green eyes.\" (diff char)\n\x00" as *u8) 65 let t2: *u8 = "Mira had blue eyes.\n\nDev had green eyes.\x00" as *u8 66 if pr_kv(logfd, " nconflicts\x00" as *u8, cf_detect_owned(t2, 0, slen(t2), roster, 2, pterms, paxes, 3, 1, out), 0) == 0 { ok = 0 } 67 68 gp(logfd, " [T3] \"Mira had blue eyes.\\n\\nMira's blue eyes shone.\" (consistent)\n\x00" as *u8) 69 let t3: *u8 = "Mira had blue eyes.\n\nMira's blue eyes shone.\x00" as *u8 70 if pr_kv(logfd, " nconflicts\x00" as *u8, cf_detect_owned(t3, 0, slen(t3), roster, 2, pterms, paxes, 3, 1, out), 0) == 0 { ok = 0 } 71 72 if ok == 1 { 73 gp(logfd, "CONTINUITY-GATE result=ALL-PASS verdict=GREEN\n\x00" as *u8) 74 if logfd > 0 { sys_close(logfd) } 75 sys_exit(0) 76 return 0 77 } 78 gp(logfd, "CONTINUITY-GATE result=FAIL verdict=RED\n\x00" as *u8) 79 if logfd > 0 { sys_close(logfd) } 80 sys_exit(1) 81 return 1 82}