code wiki / _hdl_build / _express_lane_gate_authored.nx

_express_lane_gate_authored.nx source

↩ module page · 153 lines · 6811 B

1// _express_lane_gate_authored.nx -- gate for X-XL-002. Drives the REAL lane elf over 2// epoch-unique scratch worlds: 3// K1 MARKWIRE-APPLIES MARKWIRE row -> scratch queue row gains ||MARK= + ACK mark-applied 4// K2 EXACTLY-ONCE re-run same world -> the ACK key appears EXACTLY once (no re-work) 5// K3 ANSWER-ACKED ANSWER row -> ACK note=received 6// K4 SITREP-PRESENT team_out carries SITREP-END + queue counts line 7// K5 LIVE real channel/queue -> exit 0 8// Markers: ELG-*; final ELGATE row -> knowledge/channel/team_out.tsv 9// license_tier: ORIGINAL 10import "nx_registry_lock.nx" // rt_lock/rt_unlock for the shared team_out write lock (nx_syscalls transitive) 11func eg_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 12func eg_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 } 13func eg_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 as u8;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 } 14func eg_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } 15func eg_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 } 16func eg_numcat(dst: *u8, off: i64, v: i64) -> i64 { 17 let t: *u8 = sys_mmap(28) 18 var m: i64 = v 19 var k: i64 = 0 20 if m == 0 { t[0] = 48 as u8; k = 1 } 21 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 22 var i: i64 = 0 23 var o: i64 = off 24 while i < k { dst[o] = t[k-1-i]; o = o + 1; i = i + 1 } 25 return o 26} 27func eg_mkpath(dst: *u8, epoch: i64, suffix: *u8) -> i64 { 28 var o: i64 = eg_cat(dst, 0, "/tmp/elg_" as *u8) 29 o = eg_numcat(dst, o, epoch) 30 o = eg_cat(dst, o, suffix) 31 dst[o] = 0 as u8 32 return o 33} 34func eg_writes(path: *u8, s: *u8) -> i64 { 35 let fd: i64 = sys_openat_wr(path, 0x1a4) 36 if fd < 0 { return 0 } 37 sys_write(fd, s, eg_len(s)) 38 sys_close(fd) 39 return 1 40} 41func eg_run(tip: *u8, top: *u8, qp: *u8, live: i64) -> i64 { 42 let pid: i64 = sys_fork() 43 if pid == 0 { 44 let dn: i64 = sys_openat_wr("/dev/null" as *u8, 0x1a4) 45 if dn >= 0 { sys_dup3(dn, 1, 0); sys_dup3(dn, 2, 0) } 46 let argv: *i64 = sys_mmap(48) as *i64 47 argv[0] = "/tmp/nx_express_lane.sov.elf" as *u8 as i64 48 if live == 0 { 49 argv[1] = tip as i64 50 argv[2] = top as i64 51 argv[3] = qp as i64 52 argv[4] = 0 53 } else { 54 argv[1] = 0 55 } 56 let envp: *i64 = sys_mmap(16) as *i64 57 envp[0] = 0 58 sys_execve("/tmp/nx_express_lane.sov.elf" as *u8, argv, envp) 59 sys_exit(127) 60 } 61 let st: *i64 = sys_mmap(16) as *i64 62 sys_wait4(pid, st, 0) 63 if (st[0] % 128) != 0 { return 0 - 1 } 64 return (st[0] >> 8) & 0xff 65} 66func eg_count(path: *u8, pat: *u8) -> i64 { 67 let buf: *u8 = sys_mmap(262144) 68 let fd: i64 = sys_openat_rd(path) 69 if fd < 0 { return 0 } 70 var n: i64 = 0 71 var go: i64 = 1 72 while go == 1 { let base: i64 = buf as i64; let r: i64 = sys_read(fd, (base + n) as *u8, 262128 - n); if r <= 0 { go = 0 } else { n = n + r } if n >= 262128 { go = 0 } } 73 sys_close(fd) 74 let pl: i64 = eg_len(pat) 75 if pl == 0 { return 0 } 76 var cnt: i64 = 0 77 var i: i64 = 0 78 while i + pl <= n { 79 var k: i64 = 0 80 var hit: i64 = 1 81 while k < pl { if buf[i+k] != pat[k] { hit = 0; k = pl } else { k = k + 1 } } 82 if hit == 1 { cnt = cnt + 1; i = i + pl } else { i = i + 1 } 83 } 84 return cnt 85} 86func eg_has(path: *u8, pat: *u8) -> i64 { 87 if eg_count(path, pat) > 0 { return 1 } 88 return 0 89} 90func eg_chk(label: *u8, ok: i64, bad: *i64) -> i64 { 91 eg_p("ELG-" as *u8) 92 eg_p(label) 93 if ok == 1 { eg_p(" ok\n" as *u8) } else { eg_p(" BAD\n" as *u8); bad[0] = bad[0] + 1 } 94 return 0 95} 96func main() -> i64 { 97 eg_p("=== EXPRESS-LANE GATE: real elf over scratch dialogue worlds ===\n" as *u8) 98 let ep: i64 = sys_now_realtime_sec() 99 let bad: *i64 = sys_mmap(16) as *i64 100 bad[0] = 0 101 let ti: *u8 = sys_mmap(128) 102 let to: *u8 = sys_mmap(128) 103 let q: *u8 = sys_mmap(128) 104 eg_mkpath(ti, ep, "_in.tsv" as *u8) 105 eg_mkpath(to, ep, "_out.tsv" as *u8) 106 eg_mkpath(q, ep, "_q.tsv" as *u8) 107 eg_writes(q, "# scratch queue\nROW-1\tX\t9\tS\tB\tTODO\t-\tGATEBAR\ttitle one\n" as *u8) 108 eg_writes(ti, "# scratch in\n100\tmodelA\tMARKWIRE\tROW-1\tscratch.log::ANCH::green\n101\tmodelA\tANSWER\tROW-2\troute text here\n" as *u8) 109 // K1 MARKWIRE-APPLIES 110 let r1: i64 = eg_run(ti, to, q, 0) 111 var ok1: i64 = 0 112 if r1 == 0 { if eg_has(q, "||MARK=scratch.log::ANCH::green" as *u8) == 1 { if eg_has(to, "note=mark-applied" as *u8) == 1 { ok1 = 1 } } } 113 eg_chk("MARKWIRE-APPLIES" as *u8, ok1, bad) 114 // K2 EXACTLY-ONCE: re-run -> key appears exactly once in team_out 115 let r2: i64 = eg_run(ti, to, q, 0) 116 var ok2: i64 = 0 117 if r2 == 0 { if eg_count(to, "key=100:MARKWIRE:ROW-1" as *u8) == 1 { ok2 = 1 } } 118 eg_chk("EXACTLY-ONCE" as *u8, ok2, bad) 119 // K3 ANSWER-ACKED 120 var ok3: i64 = 0 121 if eg_count(to, "key=101:ANSWER:ROW-2" as *u8) == 1 { if eg_has(to, "note=received" as *u8) == 1 { ok3 = 1 } } 122 eg_chk("ANSWER-ACKED" as *u8, ok3, bad) 123 // K4 SITREP-PRESENT 124 var ok4: i64 = 0 125 if eg_has(to, "SITREP-END acks=" as *u8) == 1 { if eg_has(to, "queue todo=" as *u8) == 1 { ok4 = 1 } } 126 eg_chk("SITREP-PRESENT" as *u8, ok4, bad) 127 // K5 LIVE 128 let r5: i64 = eg_run(ti, to, q, 1) 129 var ok5: i64 = 0 130 if r5 == 0 { ok5 = 1 } 131 eg_chk("LIVE" as *u8, ok5, bad) 132 // WMS torn-write fix: acquire the SHARED team_out lock (same path express_lane locks) so this 133 // ELGATE row can never interleave into a concurrent express_lane SITREP block. Degrade-gracefully. 134 let elglkp: *u8 = sys_mmap(512) 135 var elglko: i64 = eg_cat(elglkp, 0, "knowledge/channel/team_out.tsv.lock" as *u8); elglkp[elglko] = 0 as u8 136 let elglkfd: i64 = rt_lock(elglkp) 137 let lg: i64 = sys_openat_append("knowledge/channel/team_out.tsv" as *u8, 0x1a4) 138 if lg >= 0 { 139 eg_f(lg, "ELGATE checks=" as *u8) 140 eg_n(lg, 5 - bad[0]) 141 eg_f(lg, "/5 verdict=" as *u8) 142 if bad[0] == 0 { eg_f(lg, "GREEN" as *u8) } else { eg_f(lg, "RED" as *u8) } 143 eg_f(lg, " epoch=" as *u8) 144 eg_n(lg, sys_now_realtime_sec()) 145 eg_f(lg, "\n" as *u8) 146 sys_close(lg) 147 } 148 if elglkfd >= 0 { rt_unlock(elglkp, elglkfd) } 149 if bad[0] == 0 { eg_p(" ELGATE: GREEN 5/5\n" as *u8); sys_exit(0); return 0 } 150 eg_p(" ELGATE: RED\n" as *u8) 151 sys_exit(1) 152 return 1 153}