code wiki / (root) / nx_orchestrate_raci_evaluate_t144.nx

nx_orchestrate_raci_evaluate_t144.nx source

↩ module page · 349 lines · 18400 B

1// nx_orchestrate_raci.nx -- ORCHESTRATION rung 3: the CONDUCTOR / the "call the API, it calls the team, 2// the team runs the workstream" engine (operator 2026-07-10: "standard mcp apis so that we call the apis 3// that call the teams that run the workstreams ... true orchestration like an orchestra ... key for 4// autonomous capabilities"). 5// 6// ---- seq1789: WHY THIS FILE WAS RENAMED (restored capability, do not undo) -------------------------- 7// This organ was `runtime/nx_orchestrate.nx`. A deduplication pass matched it against a COMPLETELY 8// DIFFERENT organ that happened to share the filename -- `runtime/_hdl_build/nx_orchestrate.nx`, the 9// wait-for-opening DEPLOY QUEUE POLLER -- and retired this one to `.dupe-reconciled`. They are not 10// duplicates: one resolves RACI and engages a team, the other polls a deploy queue. Nothing in their 11// CONTENT is shared; only the name was. 12// What that cost, measured 2026-07-30: nx_orchestrate_gate could no longer compile (expand_imports 13// failed), so it kept running its STALE binary -- which HANGS after two checks. That hang propagated: 14// nx_swcompare_evidence forks its domain gates with no deadline, so `librarian` never returned at all and 15// the failure surfaced as an MCP transport error, blaming the network for a retired source file. 16// LAW: A DEDUPLICATOR THAT MATCHES ON NAME RETIRES CAPABILITY, NOT DUPLICATION. Sameness is a property 17// of CONTENT; a filename is a label someone chose twice. Same family as the substring/role confusion in 18// md_promote_deny -- identity inferred from a name instead of read from the thing itself. 19// The name is now distinct from the poller's, so the collision cannot recur rather than being remembered. 20// 21// Given an ACTIVITY (workstream), this organ: 22// (1) RESOLVES its RACI from the sovereign RACI store -- the ONE Accountable role, the Responsible 23// role(s), Consulted, Informed. NEVER fabricates: an activity with no Accountable row -> DENY 24// (returns -1), so the orchestra cannot engage a role that does not own the work. 25// (2) BINDS the runnable workstream ORGAN from knowledge/orchestration/workstreams.conf (activity<TAB>organ). 26// (3) RECORDS the engagement durably on the seg-store (orchestration- prefix) -- who was engaged, what ran. 27// (4) DISPATCHES: forks _offc/nx_sov_build_run.elf <organ> and wait4s it = the team actually runs the 28// workstream (only with the run flag; resolve/plan still records the engagement). 29// license_tier: ORIGINAL 30import "nx_syscalls.nx" 31import "nx_estate_path.nx" 32import "nx_raci_sov.nx" 33import "nx_seg_store.nx" 34struct NxOrBinding { 35 raw:*u8, 36 allocated:i64, 37 organ:*u8, 38 verb:*u8, 39 id:*u8, 40 prefix:*u8, 41 code:i64, 42 stage:*u8 43} 44 45const OR_BIND_CELL:i64=128 46const OR_BIND_FIELDS:i64=5 47const OR_MAGIC_131072: i64 = 131072 48const OR_MAGIC_16384: i64 = 16384 49 50// OR_RACI retired 2026-07-16: RACI reads from the sovereign store (raci_read_all) 51const OR_WS: *u8 = "knowledge/orchestration/workstreams.conf" 52const OR_STORE:*u8 = "knowledge/store/orchestration-" 53 54func or_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 55func or_cat(d: *u8, o: i64, s: *u8) -> i64 { var i: i64=0; while s[i]!=(0 as u8){d[o]=s[i];o=o+1;i=i+1} d[o]=0 as u8; return o } 56func or_w(s: *u8) -> i64 { sys_write(1, s, or_slen(s)); return 0 } 57func or_eq(a: *u8, b: *u8) -> i64 { var i: i64=0; while a[i]!=(0 as u8){ if a[i]!=b[i]{return 0} i=i+1 } if b[i]!=(0 as u8){return 0} return 1 } 58func or_read(path: *u8, buf: *u8, cap: i64) -> i64 { 59 let fd: i64 = sys_openat_rd(path); if fd<0 { return 0 } 60 var n: i64=0; var r: i64=sys_read(fd, buf, cap-1) 61 while r>0 { n=n+r; if n>=cap-1 { r=0 } else { r=sys_read(fd, buf+n, cap-1-n) } } 62 sys_close(fd); buf[n]=0 as u8; return n 63} 64// field col (0-based, TAB-delimited) of line [ls,le) into dst (NUL-term); returns len. 65func or_field(buf: *u8, ls: i64, le: i64, col: i64, dst: *u8) -> i64 { 66 var c: i64=0; var p: i64=ls; var k: i64=0 67 while p<le { 68 if buf[p]==(9 as u8) { if c==col { dst[k]=0 as u8; return k } c=c+1; if c==col { k=0 } } 69 else { if c==col { if buf[p]!=(13 as u8) { dst[k]=buf[p]; k=k+1 } } } 70 p=p+1 71 } 72 dst[k]=0 as u8; return k 73} 74func or_has_letter(letters: *u8, L: u8) -> i64 { var i: i64=0; while letters[i]!=(0 as u8){ if letters[i]==L { return 1 } i=i+1 } return 0 } 75 76// Resolve every role for ACTIVITY whose RACI letters include L (A/R/C/I) -> comma-joined into out. returns count. 77func orch_roles(activity: *u8, L: u8, out: *u8) -> i64 { 78 let buf: *u8 = sys_mmap(OR_MAGIC_131072); let n: i64 = raci_read_all(buf, OR_MAGIC_131072) 79 let role: *u8 = sys_mmap(64); let act: *u8 = sys_mmap(64); let let3: *u8 = sys_mmap(16) 80 var o: i64 = 0; var cnt: i64 = 0 81 var ls: i64=0; var i: i64=0 82 while i<=n { 83 var eol: i64=0 84 if i==n { eol=1 } else { if buf[i]==(10 as u8) { eol=1 } } 85 if eol==1 { 86 if i>ls { if buf[ls]!=(35 as u8) { 87 or_field(buf, ls, i, 0, role) 88 or_field(buf, ls, i, 1, act) 89 or_field(buf, ls, i, 2, let3) 90 if or_eq(act, activity)==1 { if or_has_letter(let3, L)==1 { 91 if cnt>0 { out[o]=44 as u8; o=o+1 } 92 var j: i64=0; while role[j]!=(0 as u8){ out[o]=role[j]; o=o+1; j=j+1 } 93 cnt=cnt+1 94 } } 95 } } 96 ls=i+1 97 } 98 i=i+1 99 } 100 out[o]=0 as u8 101 return cnt 102} 103// the ONE Accountable role for activity into out; returns 1 found / 0 none (DENY: never fabricate). 104func orch_accountable(activity: *u8, out: *u8) -> i64 { 105 let tmp: *u8 = sys_mmap(256) 106 let c: i64 = orch_roles(activity, 65 as u8, tmp) 107 if c < 1 { out[0]=0 as u8; return 0 } 108 var i: i64=0; while tmp[i]!=(0 as u8){ if tmp[i]==(44 as u8) { out[i]=0 as u8; return 1 } out[i]=tmp[i]; i=i+1 } out[i]=0 as u8 109 return 1 110} 111// runnable organ bound to activity from workstreams.conf into out; returns 1 found / 0 none. 112func orch_organ(activity:*u8,out:*u8)->i64 { 113 let scratch:*u8=sys_mmap_shared(OR_BIND_CELL*3);if (scratch as i64)<=0{return -1} 114 let rc:i64=orch_binding_from(OR_WS,activity,out,scratch,scratch+OR_BIND_CELL,scratch+OR_BIND_CELL*2) 115 if sys_munmap(scratch,OR_BIND_CELL*3)!=0{return -1};return rc 116} 117// record the engagement durably on the seg-store. 118func or_record_hex(out:*u8,off:i64,s:*u8)->i64 { 119 let digits:*u8="0123456789abcdef";var i:i64=0;var o:i64=off 120 while s[i]!=(0 as u8){let b:i64=s[i] as i64;out[o]=digits[b/16];out[o+1]=digits[b%16];o=o+2;i=i+1};out[o]=0;return o 121} 122func orch_record_args_to(store:*u8,activity:*u8,acct:*u8,organ:*u8,verdict:*u8,verb:*u8,config:*u8,prefix:*u8)->i64 { 123 let kn:i64=or_slen("orch:engage:")+or_slen(activity)+1 124 let cap:i64=OR_BIND_CELL*2+or_slen(activity)+or_slen(acct)+or_slen(organ)+or_slen(verdict)+2*(or_slen(verb)+or_slen(config)+or_slen(prefix)) 125 let key:*u8=sys_mmap_shared(kn);let val:*u8=sys_mmap_shared(cap);var rc:i64=0 126 if (key as i64)<=0||(val as i64)<=0{rc=-1}else{ 127 var ko:i64=or_cat(key,0,"orch:engage:");or_cat(key,ko,activity) 128 var o:i64=or_cat(val,0,"activity=");o=or_cat(val,o,activity);o=or_cat(val,o,"|accountable=");o=or_cat(val,o,acct) 129 o=or_cat(val,o,"|organ=");o=or_cat(val,o,organ);o=or_cat(val,o,"|verdict=");o=or_cat(val,o,verdict) 130 if verb[0]!=(0 as u8){o=or_cat(val,o,"|verb_hex=");o=or_record_hex(val,o,verb);o=or_cat(val,o,"|configuration_id_hex=");o=or_record_hex(val,o,config);o=or_cat(val,o,"|configuration_plane_hex=");o=or_record_hex(val,o,prefix)} 131 let w:*i64=ss_begin() 132 if (w as i64)<=0{rc=-1}else{if ss_add(w,1,key,val,o)!=0{rc=-1}else{if ss_commit(store,w,sys_now_us())!=0{rc=-2}}} 133 } 134 if (key as i64)>0{if sys_munmap(key,kn)!=0{rc=-2}};if (val as i64)>0{if sys_munmap(val,cap)!=0{rc=-2}} 135 return rc 136} 137func orch_record(activity:*u8,acct:*u8,organ:*u8,verdict:*u8)->i64{return orch_record_args_to(OR_STORE,activity,acct,organ,verdict,"","","")} 138// DISPATCH: fork+exec `_offc/nx_sov_build_run.elf <organ>` and wait; returns child exit code, or -1 on fork fail. 139func orch_dispatch_args(organ:*u8,verb:*u8,id:*u8,prefix:*u8)->i64 { 140 if or_bind_name(organ)!=1{return -1} 141 if verb[0]!=(0 as u8)&&or_bind_name(verb)!=1{return -1} 142 if id[0]==(45 as u8)||prefix[0]==(45 as u8){return -1} 143 if verb[0]!=(0 as u8)&&id[0]==(0 as u8){return -1} 144 if verb[0]==(0 as u8)&&prefix[0]!=(0 as u8){return -1} 145 let pid: i64 = sys_fork() 146 if pid < 0 { return 0-1 } 147 if pid == 0 { 148 let argv: *i64 = sys_mmap(64) as *i64 149 argv[0] = "_offc/nx_sov_build_run.elf" as *u8 as i64 150 argv[1] = organ as i64 151 argv[2] = 0 152 if verb[0]!=(0 as u8){argv[2]=verb as i64;argv[3]=id as i64;argv[4]=0;if prefix[0]!=(0 as u8){argv[4]=prefix as i64;argv[5]=0}} 153 let envp: *i64 = sys_mmap(16) as *i64; envp[0] = 0 154 sys_execve("_offc/nx_sov_build_run.elf" as *u8, argv, envp) 155 sys_exit(127) 156 } 157 let st: *i64 = sys_mmap(16) as *i64 158 let waited: i64 = sys_wait4(pid, st, 0) 159 if waited != pid { return -1 } 160 return wait_status_rc(st[0]) 161} 162 163func orch_dispatch(organ:*u8)->i64{return orch_dispatch_args(organ,"","","")} 164 165// ORCHESTRATE one activity. do_run: 0 = resolve+plan+record only; 1 = also dispatch the workstream. 166// returns 1 GREEN (engaged; if run, workstream exit 0) / 0 workstream-nonzero / -1 DENY (no accountable role). 167func orch_engage_selected(activity:*u8,do_run:i64,records:*u8,binding:*NxOrBinding,hasorgan:i64)->i64 { 168 let acct: *u8 = sys_mmap(128) 169 if orch_accountable(activity, acct) == 0 { 170 or_w("ORCHESTRATE deny activity="); or_w(activity); or_w(" reason=no-accountable-role (not in the RACI SSOT)\n" as *u8) 171 return 0-1 172 } 173 let resp: *u8 = sys_mmap(256); orch_roles(activity, 82 as u8, resp) 174 let cons: *u8 = sys_mmap(256); orch_roles(activity, 67 as u8, cons) 175 let inf: *u8 = sys_mmap(256); orch_roles(activity, 73 as u8, inf) 176 let organ:*u8=binding.organ;let verb:*u8=binding.verb;let config:*u8=binding.id;let config_plane:*u8=binding.prefix 177 or_w("ORCHESTRATE activity="); or_w(activity) 178 or_w("\n Accountable="); or_w(acct) 179 or_w(" Responsible="); or_w(resp) 180 or_w("\n Consulted="); or_w(cons) 181 or_w(" Informed="); or_w(inf) 182 or_w("\n workstream-organ="); if hasorgan==1 { or_w(organ) } else { or_w("(none bound)" as *u8) } 183 or_w("\n" as *u8) 184 var verdict: *u8 = "PLANNED" as *u8 185 var rc: i64 = 1 186 if do_run == 1 && hasorgan == 0 { 187 verdict = "NOT-RUN-UNBOUND"; rc = 0 188 or_w(" reason=no-workstream-bound next=bind-qualified-workstream\n") 189 } 190 if do_run == 1 { if hasorgan == 1 { 191 or_w(" entrypoint=");or_w(verb);or_w(" configuration=");or_w(config);or_w(" configuration-plane=");or_w(config_plane);or_w("\n") 192 or_w(" DISPATCHING -> the "); or_w(acct); or_w(" team runs "); or_w(organ); or_w("...\n" as *u8) 193 let ex:i64=orch_dispatch_args(organ,verb,config,config_plane) 194 if ex == 0 { verdict = "RAN-GREEN" as *u8 } else { verdict = "RAN-NONZERO" as *u8; rc = 0 } 195 } } 196 let recorded:i64=orch_record_args_to(records,activity,acct,organ,verdict,verb,config,config_plane) 197 or_w(" verdict="); or_w(verdict) 198 if recorded != 0 { 199 or_w(" evidence=write-failed next=repair-engagement-store\n") 200 return -2 201 } 202 or_w(" (engagement recorded on the seg-store)\n" as *u8) 203 return rc 204} 205 206func orch_engage_from(activity:*u8,do_run:i64,workstreams:*u8,records:*u8)->i64 { 207 let binding:*NxOrBinding=sys_mmap_shared(__size_of(NxOrBinding)) as *NxOrBinding 208 if (binding as i64)<=0{or_w("ORCHESTRATE refused reason=binding-allocation-failed\n");return -3} 209 let selected:i64=orch_binding_read(workstreams,activity,binding);var rc:i64=-3 210 if selected<0{or_w("ORCHESTRATE refused binding-stage=");or_w(binding.stage);or_w(" next=repair-selected-workstreams-file\n")}else{ 211 rc=orch_engage_selected(activity,do_run,records,binding,selected) 212 } 213 if or_binding_release(binding)!=0{rc=-3} 214 if sys_munmap(binding as *u8,__size_of(NxOrBinding))!=0{rc=-3} 215 return rc 216} 217func orch_engage(activity:*u8,do_run:i64)->i64{return orch_engage_from(activity,do_run,OR_WS,OR_STORE)} 218 219func main(argc: i64, argv: *i64) -> i64 { 220 if argc < 2 { 221 or_w("usage: nx_orchestrate_raci <activity> [run] (activity from the RACI store: research organize curate verify redteam ...)\n" as *u8) 222 return 1 223 } 224 if ep_anchor() < 0 { or_w("ORCHESTRATE unavailable reason=estate-context-unresolved\n"); return 3 } 225 let activity: *u8 = argv[1] as *u8 226 var do_run: i64 = 0 227 if argc >= 3 { if or_eq(argv[2] as *u8, "run" as *u8)==1 { do_run=1 } } 228 let r: i64 = orch_engage(activity, do_run) 229 if r != 1 { return 1 } 230 return 0 231} 232 233// Existing two-column binding remains valid. Optional verb, configuration ID, 234// and configuration plane are literal argv fields; no shell interpretation. 235import "nx_utf8.nx" 236func or_bind_name(s:*u8)->i64 { 237 if s[0]==(45 as u8){return 0} 238 var i:i64=0;while s[i]!=(0 as u8){let c:i64=s[i] as i64 239 if (c<48||c>57)&&(c<65||c>90)&&(c<97||c>122)&&c!=95&&c!=45{return 0};i=i+1 240 };if i==0{return 0};return 1 241} 242 243// Selected binding owns one observed file extent. Legacy output-buffer wrappers 244// below retain their documented cell capacity; the dispatch path has no field cap. 245import "nx_fio.nx" 246func or_binding_init(b:*NxOrBinding)->i64 { 247 b.raw=0 as *u8;b.allocated=0;b.organ="";b.verb="";b.id="";b.prefix="";b.code=0;b.stage="unbound";return 0 248} 249func or_binding_release(b:*NxOrBinding)->i64 { 250 if (b.raw as i64)>0{let rc:i64=sys_munmap(b.raw,b.allocated);if rc!=0{return rc}} 251 return or_binding_init(b) 252} 253func or_bind_name_span(buf:*u8,start:i64,n:i64)->i64 { 254 if n<1||buf[start]==(45 as u8){return 0} 255 var i:i64=0;while i<n{let c:i64=buf[start+i] as i64 256 if (c<48||c>57)&&(c<65||c>90)&&(c<97||c>122)&&c!=95&&c!=45{return 0};i=i+1 257 };return 1 258} 259// Returns selected=1, explicit unbound=0, malformed=-4, allocation=-5. 260// Selected spans are returned only after the complete observed extent is scanned. 261func orch_binding_select(buf:*u8,n:i64,activity:*u8,selected:*i64)->i64 { 262 if n<0||((buf as i64)==0&&n>0){return -4} 263 let fs:*i64=sys_mmap_shared(OR_BIND_FIELDS*2*8) as *i64 264 if (fs as i64)<=0{return -5};var rc:i64=0;var pos:i64=0;let an:i64=or_slen(activity) 265 var z:i64=0;while z<OR_BIND_FIELDS*2{selected[z]=0;z=z+1} 266 while pos<n&&rc>=0{ 267 var end:i64=pos;while end<n&&buf[end]!=(10 as u8){end=end+1} 268 var le:i64=end;if le>pos&&buf[le-1]==(13 as u8){le=le-1} 269 var tab:i64=pos;while tab<le&&buf[tab]!=(9 as u8){tab=tab+1} 270 var same:i64=1 271 if tab-pos!=an{same=0}else{var k:i64=0;while k<an{if buf[pos+k]!=activity[k]{same=0};k=k+1}} 272 if same==1&&le>pos&&buf[pos]!=(35 as u8){ 273 if rc==1{rc=-4;break} 274 var col:i64=0;var start:i64=pos;var k:i64=pos 275 while k<=le{ 276 var boundary:i64=0;if k==le{boundary=1}else{if buf[k]==(9 as u8){boundary=1}} 277 if boundary==1{ 278 if col>=OR_BIND_FIELDS||k==start{rc=-4;break} 279 if utf8_validate((buf as i64+start) as *u8,k-start)!=k-start{rc=-4;break} 280 fs[col*2]=start;fs[col*2+1]=k-start;col=col+1;start=k+1 281 }else{if buf[k]<(32 as u8){rc=-4;break}};k=k+1 282 } 283 if rc<0{break};if col!=2&&col!=4&&col!=5{rc=-4;break} 284 if or_bind_name_span(buf,fs[2],fs[3])!=1{rc=-4;break} 285 if col>2{ 286 if or_bind_name_span(buf,fs[4],fs[5])!=1||buf[fs[6]]==(45 as u8){rc=-4;break} 287 if col==5&&buf[fs[8]]==(45 as u8){rc=-4;break} 288 } 289 k=0;while k<col*2{selected[k]=fs[k];k=k+1};rc=1 290 };pos=end+1 291 } 292 if sys_munmap(fs as *u8,OR_BIND_FIELDS*2*8)!=0{return -5};return rc 293} 294func orch_binding_read(path:*u8,activity:*u8,b:*NxOrBinding)->i64 { 295 or_binding_init(b) 296 let r:*NxFileReadRegion=sys_mmap_shared(__size_of(NxFileReadRegion)) as *NxFileReadRegion 297 let fs:*i64=sys_mmap_shared(OR_BIND_FIELDS*2*8) as *i64 298 var rc:i64=0;b.stage="allocation" 299 if (r as i64)<=0||(fs as i64)<=0{rc=-5}else{ 300 fio_region_init(r);b.stage="open";let opened:i64=fio_region_open(path,r) 301 if opened!=0{b.code=opened;rc=-3;if opened==(0-2){b.stage="missing";rc=-2}} 302 if rc==0{ 303 b.stage="extent" 304 if r.total<0||r.total==9223372036854775807{rc=-5}else{ 305 b.allocated=r.total+1;b.raw=sys_mmap_shared(b.allocated) 306 if (b.raw as i64)<=0{b.raw=0 as *u8;rc=-5}else{ 307 b.stage="read";if r.total>0{if fio_region_next(r,b.raw,r.total)!=r.total{b.code=r.code;rc=-3}} 308 if rc==0{b.raw[r.total]=0;b.stage="selection";rc=orch_binding_select(b.raw,r.total,activity,fs)} 309 } 310 } 311 } 312 fio_region_close(r);if r.close_code!=0{b.code=r.close_code;b.stage="close";rc=-3} 313 if rc==1{ 314 b.organ=(b.raw as i64+fs[2]) as *u8;b.raw[fs[2]+fs[3]]=0 315 if fs[5]>0{b.verb=(b.raw as i64+fs[4]) as *u8;b.raw[fs[4]+fs[5]]=0} 316 if fs[7]>0{b.id=(b.raw as i64+fs[6]) as *u8;b.raw[fs[6]+fs[7]]=0} 317 if fs[9]>0{b.prefix=(b.raw as i64+fs[8]) as *u8;b.raw[fs[8]+fs[9]]=0} 318 b.stage="selected" 319 };if rc==0{b.stage="unbound"} 320 } 321 if (r as i64)>0{if sys_munmap(r as *u8,__size_of(NxFileReadRegion))!=0{rc=-5}} 322 if (fs as i64)>0{if sys_munmap(fs as *u8,OR_BIND_FIELDS*2*8)!=0{rc=-5}} 323 if b.code==0&&rc<0{b.code=rc};return rc 324} 325// Compatibility ABI: each caller-provided output has OR_BIND_CELL bytes. 326func orch_binding_buffer(buf:*u8,n:i64,activity:*u8,organ:*u8,verb:*u8,id:*u8,prefix:*u8)->i64 { 327 organ[0]=0;verb[0]=0;id[0]=0;prefix[0]=0 328 let fs:*i64=sys_mmap_shared(OR_BIND_FIELDS*2*8) as *i64;if (fs as i64)<=0{return -1} 329 var rc:i64=orch_binding_select(buf,n,activity,fs) 330 if rc==1{ 331 var f:i64=1;while f<OR_BIND_FIELDS{if fs[f*2+1]>=OR_BIND_CELL{rc=-1};f=f+1} 332 if rc==1{f=1;while f<OR_BIND_FIELDS{ 333 var out:*u8=organ;if f==2{out=verb};if f==3{out=id};if f==4{out=prefix} 334 var k:i64=0;while k<fs[f*2+1]{out[k]=buf[fs[f*2]+k];k=k+1};out[k]=0;f=f+1 335 }} 336 } 337 if sys_munmap(fs as *u8,OR_BIND_FIELDS*2*8)!=0{return -1};return rc 338} 339func orch_binding_from(path:*u8,activity:*u8,organ:*u8,verb:*u8,id:*u8,prefix:*u8)->i64 { 340 organ[0]=0;verb[0]=0;id[0]=0;prefix[0]=0 341 let b:*NxOrBinding=sys_mmap_shared(__size_of(NxOrBinding)) as *NxOrBinding 342 if (b as i64)<=0{return -1};var rc:i64=orch_binding_read(path,activity,b) 343 if rc==1{ 344 if or_slen(b.organ)>=OR_BIND_CELL||or_slen(b.verb)>=OR_BIND_CELL||or_slen(b.id)>=OR_BIND_CELL||or_slen(b.prefix)>=OR_BIND_CELL{rc=-1}else{ 345 or_cat(organ,0,b.organ);or_cat(verb,0,b.verb);or_cat(id,0,b.id);or_cat(prefix,0,b.prefix) 346 } 347 } 348 if or_binding_release(b)!=0{rc=-1};if sys_munmap(b as *u8,__size_of(NxOrBinding))!=0{rc=-1};return rc 349}