code wiki / _hdl_build / nx_stage_alias_gate_t185.nx
nx_stage_alias_gate_t185.nx source
↩ module page · 29 lines · 2440 B
1import "nx_mgmt_deploy_candidate_t185.nx"
2import "nx_gate_verdict.nx"
3func ag185_write(path:*u8,value:i64)->i64{
4 let b:*u8=sys_mmap(5);b[0]=127 as u8;b[1]=69 as u8;b[2]=76 as u8;b[3]=70 as u8;b[4]=value as u8
5 let rc:i64=dp_writefile(path,b,5);sys_munmap(b,5);return rc
6}
7func main()->i64{
8 let c:*i64=gv_ctr();gv_head("Actual deploy handler rejects opposite alias precedence")
9 let root:*u8=sys_mmap(512);var n:i64=sd_cat(root,0,"/tmp/nishi-stage-identity-t185-");n=sd_catn(root,n,sys_now_ms());root[n]=0
10 if sys_mkdir(root,MODE_0755)!=0 || sys_chdir(root)!=0{return 3}
11 let out:*u8=sys_mmap(65536)
12 gv_check("upload alias peer derived",md_streq(ma_stage_peer("thing.elf.new"),"thing.sov.elf.new")==1,c)
13 gv_check("build alias peer derived",md_streq(ma_stage_peer("thing.sov.elf.new"),"thing.elf.new")==1,c)
14 gv_check("single alias remains compatible",ag185_write("thing.elf.new",1)==0 && ma_stage_alias_guard("thing.elf.new",out)==0,c)
15 gv_check("same-size distinct artifacts prepared",ag185_write("thing.sov.elf.new",2)==0,c)
16 let rejected:i64=ma_stage_alias_guard("thing.elf.new",out)
17 gv_check("divergent aliases report409",rejected>0 && dp_contains(out,rejected,"409 Conflict")==1,c)
18 gv_check("failure names identities and unexecuted state",dp_contains(out,rejected,"DIVERGENT_STAGE_ALIASES")==1 && dp_contains(out,rejected,"\"published\":false")==1 && dp_contains(out,rejected,"selected_sha256")==1,c)
19 let reg:*u8="fixture 0 thing.elf.new INVALID_STAGE_GUARD_FIXTURE port:18998 INVALID_STAGE_GUARD_FIXTURE /tmp/no-live-deploy-t185 fixture-never-running\n"
20 if dp_writefile("deploy_targets.conf",reg,fi_len(reg))!=0{return 3}
21 let req:*u8="POST /api/deploy HTTP/1.1\r\nHost: fixture\r\n\r\ntarget=fixture"
22 let got:i64=ma_do_deploy(req,fi_len(req),out)
23 gv_check("actual handler refuses before publisher",got>0 && dp_contains(out,got,"DIVERGENT_STAGE_ALIASES")==1,c)
24 let h:*u8=sys_mmap(130);ma_file_sha_hex("thing.elf.new",h);ma_file_sha_hex("thing.sov.elf.new",h+65)
25 gv_check("refusal preserves both original artifacts",ma_hexstr_eq(h,h+65)==0,c)
26 gv_check("identical aliases are compatible",ag185_write("thing.sov.elf.new",1)==0 && ma_stage_alias_guard("thing.elf.new",out)==0,c)
27 gv_check("reverse selected alias agrees",ma_stage_alias_guard("thing.sov.elf.new",out)==0,c)
28 return gv_verdict("stage-alias-prevention",c,"Actual handler and real isolated artifact files; publication not called; atomic handoff still pending")
29}