code wiki / _hdl_build / nx_pm_gate.nx
nx_pm_gate.nx source
↩ module page · 59 lines · 4204 B
1// nx_pm_gate.nx -- SOVEREIGN gate for the PM coordinator.
2// T1-T4 RACI ROUTING TABLE: accountable(fix)=doctor, (optimize)=engineer, (publish)=publisher, (coordinate)=pm
3// T5 DISPATCH: pm route optimize -> the work lands in the ENGINEER's queue (right role's intake, no competition)
4// T6 NEG: accountable(bogus-activity) -> not found (no false routing)
5// license_tier: ORIGINAL
6import "nx_syscalls.nx"
7import "nx_pm.nx" // pm_accountable / pm_route
8import "nx_role_queue.nx" // rq_streq + (transitively) da_read / DA_CAP
9import "nx_role_store.nx" // rs_count / rs_get_seq -- verify routing lands in the SOVEREIGN seg-store (NO TSV)
10
11func pg_uw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
12func pg_role_is(activity: *u8, expect: *u8) -> i64 { let r: *u8=sys_mmap(64); if pm_accountable(activity, r)==0 {return 0} return rq_streq(r, expect) }
13func pg_write(path: *u8, s: *u8, len: i64) -> i64 { let fd: i64=sys_openat_wr(path, 0x1a4); if fd<0 {return 0-1} sys_write(fd,s,len); sys_close(fd); return 0 }
14func pg_contains(path: *u8, needle: *u8) -> i64 {
15 let buf: *u8=sys_mmap(DA_CAP); let n: i64=da_read(path, buf, DA_CAP); var nn: i64=0; while needle[nn]!=(0 as u8){nn=nn+1}
16 if nn==0 {return 1} if n<nn {return 0}
17 var i: i64=0; while i+nn<=n { var j: i64=0; var ok: i64=1; while j<nn { if buf[i+j]!=needle[j]{ok=0;j=nn} else {j=j+1} } if ok==1{return 1} i=i+1 }
18 return 0
19}
20// does any row of seg-store CHANNEL ch contain the needle substring? (replaces a raw-.tsv scan)
21func pg_store_contains(ch: *u8, needle: *u8) -> i64 {
22 let n: i64=rs_count(ch); let pq: *i64=sys_mmap(16) as *i64; let lq: *i64=sys_mmap(16) as *i64
23 var nn: i64=0; while needle[nn]!=(0 as u8){nn=nn+1}
24 var seq: i64=0
25 while seq<n {
26 if rs_get_seq(ch, seq, pq, lq)==1 { let b: *u8=pq[0] as *u8; let bl: i64=lq[0]
27 if nn>0 { var i: i64=0; while i+nn<=bl { var j: i64=0; var ok: i64=1; while j<nn { if b[i+j]!=needle[j]{ok=0;j=nn} else {j=j+1} } if ok==1{return 1} i=i+1 } } }
28 seq=seq+1
29 }
30 return 0
31}
32
33func main(argc: i64, argv: *i64) -> i64 {
34 var pass: i64 = 0; var total: i64 = 0
35
36 total=total+1; if pg_role_is("fix" as *u8, "doctor" as *u8)==1 { pass=pass+1; pg_uw("[PASS] " as *u8) } else { pg_uw("[FAIL] " as *u8) }
37 pg_uw("T1 accountable(fix)=doctor\n" as *u8)
38 total=total+1; if pg_role_is("optimize" as *u8, "engineer" as *u8)==1 { pass=pass+1; pg_uw("[PASS] " as *u8) } else { pg_uw("[FAIL] " as *u8) }
39 pg_uw("T2 accountable(optimize)=engineer\n" as *u8)
40 total=total+1; if pg_role_is("publish" as *u8, "publisher" as *u8)==1 { pass=pass+1; pg_uw("[PASS] " as *u8) } else { pg_uw("[FAIL] " as *u8) }
41 pg_uw("T3 accountable(publish)=publisher\n" as *u8)
42 total=total+1; if pg_role_is("coordinate" as *u8, "pm" as *u8)==1 { pass=pass+1; pg_uw("[PASS] " as *u8) } else { pg_uw("[FAIL] " as *u8) }
43 pg_uw("T4 accountable(coordinate)=pm\n" as *u8)
44
45 // T5 dispatch: route an optimize -> must land in the ENGINEER queue
46 pg_write("/tmp/pm_tgt" as *u8, "zzz QQ zzz" as *u8, 10)
47 pg_write("/tmp/pm_old" as *u8, "QQ" as *u8, 2); pg_write("/tmp/pm_new" as *u8, "RR" as *u8, 2)
48 pm_route("optimize" as *u8, "/tmp/pm_tgt" as *u8, "/tmp/pm_old" as *u8, "/tmp/pm_new" as *u8, "pmgateOPT" as *u8)
49 total=total+1; if pg_store_contains("engineerq" as *u8, "pmgateOPT" as *u8)==1 { pass=pass+1; pg_uw("[PASS] " as *u8) } else { pg_uw("[FAIL] " as *u8) }
50 pg_uw("T5 dispatch: optimize routed into the engineerq seg-store channel (right role, no competition, NO TSV)\n" as *u8)
51
52 // T6 neg-control: a bogus activity has no accountable
53 total=total+1; let rr: *u8=sys_mmap(64); if pm_accountable("bogusXYZ" as *u8, rr)==0 { pass=pass+1; pg_uw("[PASS] " as *u8) } else { pg_uw("[FAIL] " as *u8) }
54 pg_uw("T6 neg: accountable(bogusXYZ) not found (no false routing)\n" as *u8)
55
56 pg_uw("=== nx_pm_gate " as *u8); let b: *u8=sys_mmap(8); b[0]=(48+pass) as u8; sys_write(1,b,1); pg_uw("/" as *u8); let c: *u8=sys_mmap(8); c[0]=(48+total) as u8; sys_write(1,c,1)
57 if pass==total { pg_uw(" GREEN\n" as *u8); return 0 }
58 pg_uw(" RED\n" as *u8); return 1
59}