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}