code wiki / (root) / nx_id_handler_canonical_gate_t190.nx

nx_id_handler_canonical_gate_t190.nx source

↩ module page · 53 lines · 3747 B

1import "nx_tools_api.nx" 2import "nx_gate_verdict.nx" 3func eg_put(path:*u8,body:*u8,n:i64)->i64{ 4 let fd:i64=sys_openat_wr(path,MODE_0600);if fd<0{return fd} 5 let w:i64=sys_write(fd,body,n);let c:i64=sys_close(fd) 6 if w!=n||c!=0{return 0-1};return 0 7} 8func eg_call(req:*u8,rn:i64,out:*u8)->i64{ 9 return ta_handle_pfx("knowledge/fixture-",req,rn,out) 10} 11func main()->i64{ 12 let c:*i64=gv_ctr() 13 if sys_mkdir("knowledge/gates/idem-handler-canonical-t190",0x1c0)!=0{return 2} 14 if sys_chdir("knowledge/gates/idem-handler-canonical-t190")!=0{return 2} 15 if sys_mkdir("knowledge",0x1c0)!=0{return 2} 16 if sys_mkdir("knowledge/status",0x1c0)!=0{return 2} 17 if sys_mkdir("_jobs",0x1c0)!=0{return 2} 18 let secret:*u8="isolated-test-key-not-a-live-credential" 19 gv_check("isolated provisioned test key",eg_put(TA_CAP_KEYFILE,secret,ta_slen(secret))==0,c) 20 let cap:*u8=sys_mmap(1024) 21 let cn:i64=capt_issue(secret,ta_slen(secret),"argecho",7,sys_now_realtime_sec()+3600,190,cap,1024) 22 gv_check("scoped nonsecret fixture capability",cn>0,c) 23 if cn<=0{return 3} 24 let req:*u8=sys_mmap(4096) 25 var rn:i64=ta_cat(req,0,"POST /mcp HTTP/1.1\r\nHost: fixture\r\nX-Nishi-Cap: ") 26 rn=ta_catb(req,rn,cap,cn) 27 rn=ta_cat(req,rn,"\r\n\r\n{\"jsonrpc\":\"2.0\",\"id\":190,\"method\":\"tools/call\",\"params\":{\"name\":\"argecho\",\"arguments\":{\"argv\":[]},\"_idem\":\"request190\"}}") 28 let out:*u8=sys_mmap(TA_MAGIC_1048576) 29 let n:i64=eg_call(req,rn,out) 30 gv_check("actual authorized MCP refuses absent evidence",ta_indexof(out,n,"EVIDENCE_UNAVAILABLE")>=0,c) 31 gv_check("actual MCP declares undispatched",ta_indexof(out,n,"\"dispatched\":false")>=0,c) 32 let hex:*u8=sys_mmap(TI_HEX_CH+8);ti_key_hex("request190",10,hex) 33 let claim:*u8=sys_mmap(TI_PATH_CAP);ti_claim_path(TI_DIR,hex,claim) 34 let st:*u8=sys_mmap(NX_STAT_X64_BYTES) 35 gv_check("missing evidence creates no execution claim",sys_fstatat(claim,st)==0-2,c) 36 gv_check("explicit empty ledger initialization",eg_put(TI_LEDGER,"",0)==0,c) 37 let row:*u8=sys_mmap(128) 38 gv_check("empty ledger allows one reservation",ti_classify(TI_LEDGER,TI_DIR,"new190",6,hex,row,128,sys_now_realtime_sec())==TI_NEW,c) 39 gv_check("same reservation is in flight",ti_classify(TI_LEDGER,TI_DIR,"new190",6,hex,row,128,sys_now_realtime_sec())==TI_INFLIGHT,c) 40 gv_check("retained result append",ti_record(TI_LEDGER,"new190",6,"lane=async tool=argecho job=190",ta_slen("lane=async tool=argecho job=190"))==1,c) 41 gv_check("same key replays retained result",ti_classify(TI_LEDGER,TI_DIR,"new190",6,hex,row,128,sys_now_realtime_sec())==TI_REPLAY,c) 42 gv_check("short caller buffer refuses as evidence error",ti_classify(TI_LEDGER,TI_DIR,"new190",6,hex,row,4,sys_now_realtime_sec())==TI_EVIDENCE_ERROR,c) 43 gv_check("malformed fixture retained",eg_put(TI_LEDGER,"broken",6)==0,c) 44 let bad:i64=eg_call(req,rn,out) 45 gv_check("actual MCP refuses corrupt ledger before execution",ta_indexof(out,bad,"EVIDENCE_UNAVAILABLE")>=0&&ta_indexof(out,bad,"\"dispatched\":false")>=0,c) 46 gv_check("corrupt evidence creates no execution claim",sys_fstatat(claim,st)==0-2,c) 47 row[0]=85 as u8 48 gv_check("zero capacity refuses without touching sentinel",ti_classify(TI_LEDGER,TI_DIR,"z",1,hex,row,0,0)==TI_EVIDENCE_ERROR&&row[0]==85 as u8,c) 49 gv_check("null row pointer refuses",ti_classify(TI_LEDGER,TI_DIR,"z",1,hex,0 as *u8,128,0)==TI_EVIDENCE_ERROR,c) 50 gv_check("null digest pointer refuses without touching row",ti_classify(TI_LEDGER,TI_DIR,"z",1,0 as *u8,row,128,0)==TI_EVIDENCE_ERROR&&row[0]==85 as u8,c) 51 gv_check("new error has explicit state name",ta_streq_n(ti_state_name(TI_EVIDENCE_ERROR),20,"EVIDENCE_UNAVAILABLE")==1,c) 52 return gv_verdict("idempotency-handler",c,"Isolated real filesystem and authenticated MCP handler; no live credentials or provider calls") 53}