code wiki / _hdl_build / nx_job_handler_canonical_gate_t182.nx

nx_job_handler_canonical_gate_t182.nx source

↩ module page · 67 lines · 4903 B

1// nx_job_handler_canonical_gate_t182.nx -- Manages asynchronous and synchronous job execution for worker processes in the Nishi ecosystem. 2import "nx_tools_api.nx" 3import "nx_gate_verdict.nx" 4func jt_call(async:i64,out:*u8)->i64{ 5 let cap:*u8=sys_mmap(1024);let cn:i64=capt_issue(TA_CAP_SECRET,ta_slen(TA_CAP_SECRET),"worker",6,sys_now_realtime_sec()+600,42,cap,1024) 6 let body:*u8=sys_mmap(4096);var n:i64=ta_cat(body,0,"{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"worker\",\"_cap\":\"") 7 n=ta_catb(body,n,cap,cn);n=ta_cat(body,n,"\"") 8 if async==1{n=ta_cat(body,n,",\"_async\":\"1\"")} 9 n=ta_cat(body,n,",\"arguments\":{\"argv\":[]}}}") 10 let req:*u8=sys_mmap(8192);var rn:i64=ta_cat(req,0,"POST /mcp HTTP/1.1\r\nHost: test\r\nConnection: close\r\n\r\n") 11 rn=ta_catb(req,rn,body,n);return ta_handle_pfx("fixture-reg-",req,rn,out) 12} 13func jt_setup(root:*u8,name:*u8,blocked:i64,promote:i64)->i64{ 14 let dir:*u8=sys_mmap(JR_PATH);let n:i64=ta_cat(dir,ta_cat(dir,ta_cat(dir,0,root),"/"),name);dir[n]=0 15 if sys_mkdir(dir,MODE_0755)!=0{return 0};if sys_chdir(dir)!=0{return 0} 16 let allow:*u8="worker\t/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_job_worker_fixture_t182.sov.elf\tGREEN\n" 17 if ta_job_put("tool_allowlist.conf",allow,ta_slen(allow))!=0{return 0} 18 if blocked==1{if ta_job_put("_jobs","not-a-directory\n",16)!=0{return 0}}else{if sys_mkdir("_jobs",MODE_0755)!=0{return 0}} 19 if promote==1{sys_mkdir("knowledge",MODE_0755);let conf:*u8="edge_window_ms=1010\nreply_reserve_ms=1000\n";if ta_job_put(TEA_WINDOW_CONF,conf,ta_slen(conf))!=0{return 0}} 20 return 1 21} 22func jt_file_has(path:*u8,pat:*u8)->i64{ 23 let sz:*i64=sys_mmap(16) as *i64;let b:*u8=sys_read_file(path,sz);if (b as i64)==0{return 0};return jr_has(b,sz[0],pat) 24} 25func main()->i64{ 26 let c:*i64=gv_ctr();gv_head("Actual tools API candidate ownership before execution") 27 let root:*u8=sys_mmap(JR_PATH);let n:i64=ta_catn(root,ta_cat(root,0,"/tmp/nishi-job-handler-t182-"),sys_now_ms());root[n]=0 28 if sys_mkdir(root,MODE_0755)!=0{return 3} 29 let out:*u8=sys_mmap(1048576);let jid:*i64=sys_mmap(16) as *i64;let path:*u8=sys_mmap(JR_PATH) 30 if jt_setup(root,"async",0,0)!=1{return 3} 31 let base:i64=sys_now_realtime_sec();var i:i64=0 32 while i<180{jr_mkpath(path,JR_PATH,JR_JOBS,base+i,JR_EXT_CLAIM);let mark:*u8="state=CLAIMED owner=fixture\n";if ta_job_put(path,mark,ta_slen(mark))!=0{return 3};i=i+1} 33 let ab:i64=sys_now_ms();let an:i64=jt_call(1,out);let ad:i64=sys_now_ms()-ab 34 gv_check("async returns started with owned ID beyond180 occupied",jx_get_int(out,an,0,"job",jid)>=0 && jid[0]>=base+180 && jr_has(out,an,"JOB-STARTED")==1,c) 35 sys_sleep_ms(300) 36 jr_mkpath(path,JR_PATH,JR_JOBS,jid[0],JR_EXT_CLAIM) 37 gv_check("async owned claim completes",jt_file_has(path,"state=DONE")==1,c) 38 jr_mkpath(path,JR_PATH,JR_JOBS,jid[0],JR_EXT_OUT) 39 gv_check("async owned output belongs to worker",jt_file_has(path,"WORKER-COMPLETE")==1,c) 40 jr_mkpath(path,JR_PATH,JR_JOBS,base+99,JR_EXT_CLAIM) 41 gv_check("async preserves old claim",jt_file_has(path,"owner=fixture")==1,c) 42 if jt_setup(root,"inline",0,0)!=1{return 3} 43 let sb:i64=sys_now_ms();let sn:i64=jt_call(0,out);let sd:i64=sys_now_ms()-sb 44 gv_check("sync returns actual worker output",jr_has(out,sn,"WORKER-COMPLETE")==1 && jr_has(out,sn,"JOB-STARTED")==0,c) 45 gv_check("sync returns completed ownership evidence",jx_get_int(out,sn,0,"job",jid)>=0 && jr_has(out,sn,"\"publication_verified\":true")==1,c) 46 jr_mkpath(path,JR_PATH,JR_JOBS,jid[0],JR_EXT_CLAIM) 47 gv_check("inline claim finalized",jt_file_has(path,"state=DONE")==1,c) 48 if jt_setup(root,"promote",0,1)!=1{return 3} 49 let pn:i64=jt_call(0,out) 50 gv_check("sync promotion keeps preowned ID",jx_get_int(out,pn,0,"job",jid)>=0 && jr_has(out,pn,"\"promoted\":1")==1,c) 51 sys_sleep_ms(300) 52 jr_mkpath(path,JR_PATH,JR_JOBS,jid[0],JR_EXT_CLAIM) 53 gv_check("promoted claim completes",jt_file_has(path,"state=DONE")==1,c) 54 jr_mkpath(path,JR_PATH,JR_JOBS,jid[0],JR_EXT_OUT) 55 gv_check("promoted result preserved",jt_file_has(path,"WORKER-COMPLETE")==1,c) 56 if jt_setup(root,"blocked-sync",1,0)!=1{return 3} 57 let bn:i64=jt_call(0,out) 58 gv_check("sync resource refusal states unexecuted",jr_has(out,bn,"\"executed\":false")==1 && jr_has(out,bn,"\"reservation_errno\":-20")==1,c) 59 gv_check("sync refused before worker side effect",sys_openat_rd("worker.executed")<0,c) 60 if jt_setup(root,"blocked-async",1,0)!=1{return 3} 61 let cn:i64=jt_call(1,out) 62 gv_check("async resource refusal states unexecuted",jr_has(out,cn,"\"executed\":false")==1 && jr_has(out,cn,"JOB-STARTED")==0,c) 63 sys_sleep_ms(150) 64 gv_check("async refused before worker side effect",sys_openat_rd("worker.executed")<0,c) 65 gv_puts("async_response_ms=");gv_num(ad);gv_puts(" sync_including100ms_worker_ms=");gv_num(sd);gv_puts("\n") 66 return gv_verdict("job-handler-ownership",c,"Actual handler and actual isolated native worker; no live deployment") 67}