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}