code wiki / (root) / nx_mcp_queue_stdio_gate_t230.nx

nx_mcp_queue_stdio_gate_t230.nx source

↩ module page · 74 lines · 5406 B

1// nx_mcp_queue_stdio_gate_t230.nx -- Sends JSON-RPC requests to a tool lister and checks responses for expected outcomes. 2import "nx_mcp_pending_candidate_t230.nx" 3import "nx_gate_verdict.nx" 4func qb_has(b:*u8,n:i64,s:*u8)->i64 { 5 let l:i64=mr_len(s);var i:i64=0 6 while i+l<=n{var j:i64=0;while j<l{if b[i+j]!=s[j]{break};j=j+1};if j==l{return 1};i=i+1};return 0 7} 8 9func qb_execute(av:*i64,data:*u8,n:i64,ip:*u8,op:*u8,ep:*u8)->i64 { 10 let w:i64=sys_openat_wr(ip,MODE_0644);if w<0{return -1} 11 let wrote:i64=rp_write(w,data,n);sys_close(w);if wrote!=0{return -1} 12 let rd:i64=sys_openat_rd(ip);let out:i64=sys_openat_wr(op,MODE_0644);let err:i64=sys_openat_wr(ep,MODE_0644) 13 if rd<0||out<0||err<0{return -1} 14 let pid:i64=sys_fork() 15 if pid==0{sys_alarm(5);sys_dup3(rd,0,0);sys_dup3(out,1,0);sys_dup3(err,2,0);sys_execve(av[0] as *u8,av,0 as *i64);sys_exit(127);return 127} 16 sys_close(rd);sys_close(out);sys_close(err) 17 if pid<0{return -1} 18 var status:i64=0;if sys_wait4(pid,&status,0)!=pid{return -1};return wait_exit_code(status) 19} 20func main(argc:i64,argv:*i64)->i64{ 21 if argc!=2{return 2} 22 let data:*u8="{\"jsonrpc\":\"2.0\",\"id\":\"init\",\"method\":\"initialize\"}\n{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"a\",\"method\":\"tools/list\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"b\",\"method\":\"tools/list\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"c\",\"method\":\"tools/list\"}\n{\"jsonrpc\":\"2.0\",\"method\":\"notifications/cancelled\",\"params\":{\"requestId\":\"b\"}}\n" 23 let ip:*u8="knowledge/gates/mcp-queue-input-t230.jsonl" 24 let op:*u8="knowledge/gates/mcp-queue-stdio-output-t230.jsonl" 25 let ep:*u8="knowledge/gates/mcp-queue-stdio-events-t230.jsonl" 26 let written:i64=sys_openat_wr(ip,MODE_0644);if written<0{return 2} 27 if rp_write(written,data,mr_len(data))!=0{return 2};sys_close(written) 28 let rd:i64=sys_openat_rd(ip);let out:i64=sys_openat_wr(op,MODE_0644);let err:i64=sys_openat_wr(ep,MODE_0644) 29 if rd<0||out<0||err<0{return 2} 30 let av:*i64=sys_mmap(10*__size_of(i64)) 31 av[0]=argv[1];av[1]="https://nishifamily.com" as i64 32 av[2]="knowledge/gates/nonexistent-cap-t230" as i64 33 av[3]="8192" as i64;av[4]="8192" as i64;av[5]="8192" as i64;av[6]="1" as i64;av[7]=0 34 let pid:i64=sys_fork() 35 if pid==0{ 36 sys_alarm(5) 37 if sys_dup3(rd,0,0)<0||sys_dup3(out,1,0)<0||sys_dup3(err,2,0)<0{sys_exit(2);return 2} 38 sys_execve(argv[1] as *u8,av,0 as *i64);sys_exit(127);return 127 39 } 40 sys_close(rd);sys_close(out);sys_close(err) 41 if pid<0{return 2};var status:i64=0;let reaped:i64=sys_wait4(pid,&status,0) 42 var n:i64=0;let buf:*u8=sys_read_file(op,&n) 43 var en:i64=0;let events:*u8=sys_read_file(ep,&en) 44 let c:*i64=gv_ctr() 45 let plan:*i64=gv_plan_new("stdio-exits-cleanly\nall-uncancelled-ids-return\ncancel-correlated-before-dispatch\nno-occupied-capacity-refusal\nqueue-observation-retained\ncancelled-id-never-dispatched\nmaximum-request-size-still-admitted\nexplicit-small-budget-refused\nzero-queue-deadline-rejected\n") 46 gv_plan_check(plan,"stdio-exits-cleanly",reaped==pid&&status==0,c) 47 gv_plan_check(plan,"all-uncancelled-ids-return",qb_has(buf,n,"\"id\":\"init\"")==1&&qb_has(buf,n,"\"id\":\"a\"")==1&&qb_has(buf,n,"\"id\":\"c\"")==1,c) 48 gv_plan_check(plan,"cancel-correlated-before-dispatch",qb_has(buf,n,"\"id\":\"b\",\"error\":{\"code\":-32800")==1,c) 49 gv_plan_check(plan,"no-occupied-capacity-refusal",qb_has(buf,n,"admitted_workers_in_use")==0&&qb_has(buf,n,"execution capacity is occupied")==0,c) 50 gv_plan_check(plan,"queue-observation-retained",qb_has(events,en,"\"queued\":5")==1&&qb_has(events,en,"cancelled-before-dispatch")==1,c) 51 gv_plan_check(plan,"cancelled-id-never-dispatched",qb_has(events,en,"\"state\":\"dispatched\",\"request_id\":\"b\"")==0,c) 52 53 let maxline:i64=8192 54 let full:*u8=sys_mmap(maxline+1) 55 var at:i64=mpe_cat(full,0,"{\"jsonrpc\":\"2.0\",\"id\":\"boundary\",\"method\":\"tools/list\",\"params\":{\"padding\":\"") 56 let suffix:*u8="\"}}" 57 while at<maxline-mr_len(suffix){full[at]=120 as u8;at=at+1} 58 at=mpe_cat(full,at,suffix);full[at]=10 as u8 59 let bip:*u8="knowledge/gates/mcp-queue-boundary-input-t230.jsonl" 60 let bop:*u8="knowledge/gates/mcp-queue-boundary-output-t230.jsonl" 61 let bep:*u8="knowledge/gates/mcp-queue-boundary-events-t230.jsonl" 62 let brc:i64=qb_execute(av,full,maxline+1,bip,bop,bep) 63 var bn:i64=0;let bout:*u8=sys_read_file(bop,&bn) 64 gv_plan_check(plan,"maximum-request-size-still-admitted",brc==0&&qb_has(bout,bn,"\"id\":\"boundary\",\"error\":{\"code\":-32008")==1,c) 65 av[7]="--queue-bytes" as i64;av[8]="128" as i64;av[9]=0 66 let src:i64=qb_execute(av,full,maxline+1,bip,"knowledge/gates/mcp-queue-small-output-t230.jsonl","knowledge/gates/mcp-queue-small-events-t230.jsonl") 67 var sn:i64=0;let sout:*u8=sys_read_file("knowledge/gates/mcp-queue-small-output-t230.jsonl",&sn) 68 gv_plan_check(plan,"explicit-small-budget-refused",src==0&&qb_has(sout,sn,"queue memory budget exhausted; not dispatched")==1,c) 69 av[7]="--queue-timeout-ms" as i64;av[8]="0" as i64 70 let zrc:i64=qb_execute(av,full,maxline+1,bip,"knowledge/gates/mcp-queue-zero-output-t230.jsonl","knowledge/gates/mcp-queue-zero-events-t230.jsonl") 71 gv_plan_check(plan,"zero-queue-deadline-rejected",zrc==1,c) 72 gv_plan_finish(plan,c);gv_kv("stdout_bytes",n);gv_kv("event_bytes",en) 73 return gv_verdict("MCP-QUEUE-STDIO",c,"Exact candidate ELF, one worker default, batched requests with control cancellation, initialization barriers and EOF.") 74}