code wiki / _hdl_build / _queue_cohesion_gate_authored.nx

_queue_cohesion_gate_authored.nx source

↩ module page · 136 lines · 5621 B

1// _queue_cohesion_gate_authored.nx -- gate for X-CONS-003. Drives the REAL 2// organ elf over scratch worlds: 3// CLEAN-GREEN no dups, ledger ids all referenced -> exit 0, all zeros 4// SEEDED-DUP-RED duplicate id -> exit 1 + COHESION-DUP-ID row 5// SEEDED-TITLE duplicate title -> exit 1 + COHESION-DUP-TITLE row 6// GAP-COUNTED open ledger id missing from queue -> gap=1, exit STILL 0 7// (gaps are work, not corruption) 8// LIVE-COHESIVE the REAL queue + REAL ledger -> exit 0 (dup-free live) 9// Markers: QCG-*; final QCGATE row -> knowledge/status/queue_cohesion.log 10// license_tier: ORIGINAL 11 12import "nx_syscalls.nx" 13 14func qcg_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 15func qcg_f(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 16func qcg_n(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 } 17 18func qcg_chk(label: *u8, ok: i64, bad: *i64) -> i64 { 19 qcg_p("QCG-" as *u8) 20 qcg_p(label) 21 if ok == 1 { qcg_p(" ok\n" as *u8) } else { qcg_p(" BAD\n" as *u8); bad[0] = bad[0] + 1 } 22 return 0 23} 24 25func qcg_write(path: *u8, s: *u8) -> i64 { 26 let fd: i64 = sys_openat_wr(path, 0x1a4) 27 if fd < 0 { return 0 } 28 qcg_f(fd, s) 29 var i: i64 = 0 30 while i < 12 { qcg_f(fd, "\n" as *u8); i = i + 1 } 31 sys_close(fd) 32 return 1 33} 34 35// spawn organ: argv qp ledp, stdout->outpath (append); rc 36func qcg_run(qp: *u8, ledp: *u8, outpath: *u8) -> i64 { 37 let pid: i64 = sys_fork() 38 if pid == 0 { 39 let ofd: i64 = sys_openat_append(outpath, 0x1a4) 40 if ofd >= 0 { sys_dup3(ofd, 1, 0); sys_dup3(ofd, 2, 0) } 41 let argv: *i64 = sys_mmap(40) as *i64 42 argv[0] = "/tmp/nx_queue_cohesion.sov.elf" as *u8 as i64 43 argv[1] = qp as i64 44 argv[2] = ledp as i64 45 argv[3] = 0 46 let envp: *i64 = sys_mmap(16) as *i64 47 envp[0] = 0 48 sys_execve("/tmp/nx_queue_cohesion.sov.elf" as *u8, argv, envp) 49 sys_exit(127) 50 } 51 let st: *i64 = sys_mmap(16) as *i64 52 sys_wait4(pid, st, 0) 53 return (st[0] >> 8) & 0xff 54} 55 56func qcg_has(path: *u8, pat: *u8) -> i64 { 57 let buf: *u8 = sys_mmap(262144) 58 let fd: i64 = sys_openat_rd(path) 59 if fd < 0 { return 0 } 60 var n: i64 = 0 61 var r: i64 = sys_read(fd, buf, 262143) 62 while r > 0 { n = n + r; r = sys_read(fd, buf + n, 262143 - n) } 63 sys_close(fd) 64 var pl: i64 = 0 65 while pat[pl] != (0 as u8) { pl = pl + 1 } 66 var i: i64 = 0 67 while i + pl <= n { 68 var k: i64 = 0 69 var hit: i64 = 1 70 while k < pl { 71 if buf[i + k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } 72 } 73 if hit == 1 { return 1 } 74 i = i + 1 75 } 76 return 0 77} 78 79func main() -> i64 { 80 let badv: *i64 = sys_mmap(16) as *i64 81 badv[0] = 0 82 qcg_p("=== queue-cohesion gate (X-CONS-003) ===\n" as *u8) 83 let probe: i64 = sys_openat_rd("/tmp/nx_queue_cohesion.sov.elf" as *u8) 84 if probe < 0 { 85 qcg_p("QCGATE verdict=RED reason=organ-elf-absent\n" as *u8) 86 sys_exit(9) 87 } 88 sys_close(probe) 89 90 // scratch worlds 91 qcg_write("/tmp/_qc_clean.tsv" as *u8, "# clean\nA1\tX\t9\tS\tB\tTODO\t-\tg\talpha row\nA2\tX\t8\tS\tB\tTODO\t-\tg\tbeta row T#x-debt-one\n" as *u8) 92 qcg_write("/tmp/_qc_dupid.tsv" as *u8, "# dup id\nA1\tX\t9\tS\tB\tTODO\t-\tg\talpha row\nA1\tX\t8\tS\tB\tTODO\t-\tg\tother row\n" as *u8) 93 qcg_write("/tmp/_qc_duptitle.tsv" as *u8, "# dup title\nA1\tX\t9\tS\tB\tTODO\t-\tg\tsame words\nA2\tX\t8\tS\tB\tTODO\t-\tg\tsame words\n" as *u8) 94 qcg_write("/tmp/_qc_ledger.tsv" as *u8, "T#x-debt-one\topen\tdebt referenced by queue\nT#x-debt-two\topen\tdebt NOT in queue\nT#x-debt-old\tfixed\tclosed debt ignored\n" as *u8) 95 96 let out: *u8 = "/tmp/_qcg_out.txt" as *u8 97 var c: i64 = 0 98 let rc1: i64 = qcg_run("/tmp/_qc_clean.tsv" as *u8, "/tmp/_qc_ledger.tsv" as *u8, out) 99 if rc1 == 0 { if qcg_has(out, "dup_id=0 dup_title=0 ledger_gaps=1" as *u8) == 1 { c = 1 } } 100 qcg_chk("CLEAN-GREEN-GAP-COUNTED" as *u8, c, badv) 101 102 c = 0 103 let rc2: i64 = qcg_run("/tmp/_qc_dupid.tsv" as *u8, "/tmp/_qc_ledger.tsv" as *u8, out) 104 if rc2 == 1 { if qcg_has(out, "COHESION-DUP-ID id=A1" as *u8) == 1 { c = 1 } } 105 qcg_chk("SEEDED-DUP-RED" as *u8, c, badv) 106 107 c = 0 108 let rc3: i64 = qcg_run("/tmp/_qc_duptitle.tsv" as *u8, "/tmp/_qc_ledger.tsv" as *u8, out) 109 if rc3 == 1 { if qcg_has(out, "COHESION-DUP-TITLE id=A2" as *u8) == 1 { c = 1 } } 110 qcg_chk("SEEDED-TITLE-RED" as *u8, c, badv) 111 112 c = 0 113 let rc4: i64 = qcg_run("knowledge/registry/assignment_queue.tsv" as *u8, "NISHI_DEBT_LEDGER.tsv" as *u8, out) 114 if rc4 == 0 { c = 1 } 115 qcg_chk("LIVE-COHESIVE" as *u8, c, badv) 116 117 let lg: i64 = sys_openat_append("knowledge/status/queue_cohesion.log" as *u8, 0x1a4) 118 var rcg: i64 = 0 119 if badv[0] == 0 { 120 qcg_p("QCGATE checks=4/4 verdict=GREEN\n" as *u8) 121 if lg >= 0 { 122 qcg_f(lg, "QCGATE checks=4/4 verdict=GREEN epoch=" as *u8) 123 qcg_n(lg, sys_now_realtime_sec()) 124 qcg_f(lg, "\n" as *u8) 125 } 126 } else { 127 qcg_p("QCGATE verdict=RED bad=" as *u8) 128 qcg_n(1, badv[0]) 129 qcg_p("\n" as *u8) 130 if lg >= 0 { qcg_f(lg, "QCGATE verdict=RED\n" as *u8) } 131 rcg = badv[0] 132 } 133 if lg >= 0 { sys_close(lg) } 134 sys_exit(rcg) 135 return rcg 136}