code wiki / _hdl_build / nx_shard_governance_gate.nx

nx_shard_governance_gate.nx source

↩ module page · 78 lines · 6524 B

1import "nx_gate_gn.nx" 2import "nx_gate_base.nx" 3// nx_shard_governance_gate.nx -- CROSS-SHARD R5: the end-to-end governance conformance proof. Composes the whole 4// cross-shard stack in one decision -- sr_roles_of (registry) -> ag_uid_to_level (per-shard RBAC) -> gi_allowed 5// (org guardrail inheritance) -- and asserts the load-bearing properties with NEGATIVE controls: 6// T1 operator manages a normal shard T2 operator manages a guardrail-tightened shard 7// T3 tenant owner manages THEIR shard T4 (NEG) tenant owner CANNOT manage another shard (isolation) 8// T5 (NEG) member BLOCKED by a shard's tightened guardrail T6 member ALLOWED on the un-tightened shard 9// One realm, per-shard roles, org-floor guardrails a shard can only tighten. Sovereign: nx_syscalls + 10// nx_shard_registry + nx_access_lib + nx_shard_guardrail. license_tier: ORIGINAL expect_exit: 0 11import "nx_syscalls.nx" 12import "nx_shard_registry.nx" 13import "nx_access_lib.nx" 14import "nx_shard_guardrail.nx" 15 16func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 17" as *u8); return ok } 18func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 19func g_app(buf: *u8, off: i64, s: *u8) -> i64 { var i: i64=0; while s[i]!=(0 as u8){buf[off+i]=s[i];i=i+1} return off+i } 20func g_wr(path: *u8, buf: *u8, n: i64) -> i64 { let fd: i64=sys_openat_wr(path, 0x1a4); if fd>=0 { sys_write(fd, buf, n); sys_close(fd) } return n } 21func g_shard(buf: *u8, off: i64, id: *u8, dom: *u8, svc: *u8, port: *u8, realm: *u8, keys: *u8, store: *u8, roles: *u8, health: *u8) -> i64 { 22 var o: i64=g_app(buf,off,id); buf[o]=9 as u8; o=o+1; o=g_app(buf,o,dom); buf[o]=9 as u8; o=o+1; o=g_app(buf,o,svc); buf[o]=9 as u8; o=o+1 23 o=g_app(buf,o,port); buf[o]=9 as u8; o=o+1; o=g_app(buf,o,realm); buf[o]=9 as u8; o=o+1; o=g_app(buf,o,keys); buf[o]=9 as u8; o=o+1 24 o=g_app(buf,o,store); buf[o]=9 as u8; o=o+1; o=g_app(buf,o,roles); buf[o]=9 as u8; o=o+1; o=g_app(buf,o,health); buf[o]=10 as u8; o=o+1 25 return o 26} 27// the full governance decision: shard -> roles -> level -> (org floor, shard guardrail) -> allow/deny. 28func authz(reg: *u8, rn: i64, idx: *u8, uid: *u8, uidn: i64, shard: *u8, slen: i64, org_req: i64, guardrail: i64) -> i64 { 29 let roles: *u8 = sys_mmap(256) 30 if sr_roles_of(reg, rn, shard, slen, roles, 256) <= 0 { return 0 } 31 let level: i64 = ag_uid_to_level(uid, uidn, idx, roles) 32 return gi_allowed(level, org_req, guardrail) 33} 34 35func main(argc: i64, argv: *i64) -> i64 { 36 gp("=== nx_shard_governance_gate (R5: registry + RBAC + guardrail, end-to-end) ===\n" as *u8) 37 // uid->handle index 38 let ix: *u8 = sys_mmap(256); var ixn: i64 = 0 39 ixn=g_app(ix,ixn,"aa" as *u8); ix[ixn]=9 as u8; ixn=ixn+1; ixn=g_app(ix,ixn,"elderwesto" as *u8); ix[ixn]=10 as u8; ixn=ixn+1 40 ixn=g_app(ix,ixn,"bb" as *u8); ix[ixn]=9 as u8; ixn=ixn+1; ixn=g_app(ix,ixn,"adw_owner" as *u8); ix[ixn]=10 as u8; ixn=ixn+1 41 ixn=g_app(ix,ixn,"cc" as *u8); ix[ixn]=9 as u8; ixn=ixn+1; ixn=g_app(ix,ixn,"member_user" as *u8); ix[ixn]=10 as u8; ixn=ixn+1 42 g_wr("/tmp/gov_idx.tsv" as *u8, ix, ixn) 43 // per-shard roles 44 let rnf: *u8 = sys_mmap(256); var rnfn: i64 = 0 45 rnfn=g_app(rnf,rnfn,"elderwesto" as *u8); rnf[rnfn]=9 as u8; rnfn=rnfn+1; rnf[rnfn]=51 as u8; rnfn=rnfn+1; rnf[rnfn]=10 as u8; rnfn=rnfn+1 46 rnfn=g_app(rnf,rnfn,"member_user" as *u8); rnf[rnfn]=9 as u8; rnfn=rnfn+1; rnf[rnfn]=50 as u8; rnfn=rnfn+1; rnf[rnfn]=10 as u8; rnfn=rnfn+1 47 g_wr("/tmp/gov_roles_nf.tsv" as *u8, rnf, rnfn) 48 let radw: *u8 = sys_mmap(256); var radwn: i64 = 0 49 radwn=g_app(radw,radwn,"elderwesto" as *u8); radw[radwn]=9 as u8; radwn=radwn+1; radw[radwn]=51 as u8; radwn=radwn+1; radw[radwn]=10 as u8; radwn=radwn+1 50 radwn=g_app(radw,radwn,"adw_owner" as *u8); radw[radwn]=9 as u8; radwn=radwn+1; radw[radwn]=51 as u8; radwn=radwn+1; radw[radwn]=10 as u8; radwn=radwn+1 51 radwn=g_app(radw,radwn,"member_user" as *u8); radw[radwn]=9 as u8; radwn=radwn+1; radw[radwn]=50 as u8; radwn=radwn+1; radw[radwn]=10 as u8; radwn=radwn+1 52 g_wr("/tmp/gov_roles_adw.tsv" as *u8, radw, radwn) 53 // shard registry 54 let reg: *u8 = sys_mmap(4096); var rn: i64 = 0 55 rn=g_shard(reg,rn,"nishifamily-mgmt" as *u8,"nishifamily.com" as *u8,"mgmt" as *u8,"18098" as *u8,"nishi_site_admin" as *u8,"k" as *u8,"s" as *u8,"/tmp/gov_roles_nf.tsv" as *u8,"api" as *u8) 56 rn=g_shard(reg,rn,"andelinwest-portal" as *u8,"andelinwest.com" as *u8,"docportal" as *u8,"18456" as *u8,"andelinwest_docportal" as *u8,"k" as *u8,"s" as *u8,"/tmp/gov_roles_adw.tsv" as *u8,"andelinwest" as *u8) 57 58 let IDX: *u8 = "/tmp/gov_idx.tsv" as *u8 59 let uop: *u8 = sys_mmap(8); uop[0]=0xaa as u8 60 let utn: *u8 = sys_mmap(8); utn[0]=0xbb as u8 61 let umb: *u8 = sys_mmap(8); umb[0]=0xcc as u8 62 let SM: *u8 = "nishifamily-mgmt" as *u8; let SMn: i64 = g_slen(SM) 63 let SA: *u8 = "andelinwest-portal" as *u8; let SAn: i64 = g_slen(SA) 64 // deploy action: org floor = 2 (member); nishifamily guardrail = 2 (none); andelinwest guardrail = 3 (tightened) 65 let ORG: i64 = 2 66 var pass: i64 = 0; var fail: i64 = 0 67 68 if authz(reg,rn,IDX,uop,1,SM,SMn,ORG,2)==1 { pass=pass+1; gp(" T1 operator manages nishifamily PASS\n" as *u8) } else { fail=fail+1; gp(" T1 FAIL\n" as *u8) } 69 if authz(reg,rn,IDX,uop,1,SA,SAn,ORG,3)==1 { pass=pass+1; gp(" T2 operator manages andelinwest (meets tightened guardrail 3) PASS\n" as *u8) } else { fail=fail+1; gp(" T2 FAIL\n" as *u8) } 70 if authz(reg,rn,IDX,utn,1,SA,SAn,ORG,3)==1 { pass=pass+1; gp(" T3 tenant owner manages THEIR shard PASS\n" as *u8) } else { fail=fail+1; gp(" T3 FAIL\n" as *u8) } 71 if authz(reg,rn,IDX,utn,1,SM,SMn,ORG,2)==0 { pass=pass+1; gp(" T4 tenant owner CANNOT manage nishifamily (isolation) PASS\n" as *u8) } else { fail=fail+1; gp(" T4 FAIL\n" as *u8) } 72 if authz(reg,rn,IDX,umb,1,SA,SAn,ORG,3)==0 { pass=pass+1; gp(" T5 member BLOCKED by andelinwest's tightened guardrail(3) PASS\n" as *u8) } else { fail=fail+1; gp(" T5 FAIL\n" as *u8) } 73 if authz(reg,rn,IDX,umb,1,SM,SMn,ORG,2)==1 { pass=pass+1; gp(" T6 member ALLOWED on un-tightened nishifamily (floor 2) PASS\n" as *u8) } else { fail=fail+1; gp(" T6 FAIL\n" as *u8) } 74 75 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail) 76 if fail == 0 { gp(" verdict=GREEN (cross-shard governance proven end-to-end)\n" as *u8); sys_exit(0); return 0 } 77 gp(" verdict=RED\n" as *u8); sys_exit(1); return 1 78}