nx_accept_release_gate.nx source
↩ module page · 60 lines · 3693 B
1// Real-file qualification of additive CLI adapter. Fixture only; no acceptance plane writes.
2import "nx_accept.nx"
3import "nx_gate_verdict.nx"
4func arg_case(label:*u8,count:i64,args:*i64,want:i64,c:*i64,subject:*u8,tmo:i64)->i64 {
5 gv_check(label,(acm_check_release(count,args)==want) as i64,c)
6 let av:*i64=sys_mmap((count+1)*8) as *i64
7 av[0]=subject as i64
8 var i:i64=1
9 while i<count {av[i]=args[i];if av[i]==0{av[i]="unexpected" as *u8 as i64};i=i+1}
10 av[count]=0
11 let out:*NxBufOwned=sys_mmap(NX_BO_BYTES) as *NxBufOwned
12 out.buf=0 as *u8;out.len=0;out.cap=0
13 let rc:i64=tr_run_capture_owned(subject,av,out,tmo,0,0 as *u8)
14 var valid:i64=0
15 if rc==want&&tr_contains(out.buf,out.len,"accept-release-check/v1")==1&&tr_contains(out.buf,out.len,"receipt-binding-only")==1&&tr_contains(out.buf,out.len,"not-performed")==1 {valid=1}
16 gv_check("candidate executable matches expected receipt contract",valid,c)
17 if nx_bo_release(out)!=0 {gv_check("owned capture release",0,c);return 1}
18 sys_munmap(out as *u8,NX_BO_BYTES);sys_munmap(av as *u8,(count+1)*8)
19 return 0
20}
21func main(argc:i64,argv:*i64)->i64{
22 if argc!=4{acm_p("usage: nx_accept_release_gate <candidate-elf> <fixture-path> <timeout-ms>\n");return 2}
23 let subject:*u8=argv[1] as *u8
24 let fixture:*u8=argv[2] as *u8
25 let parsed:*i64=sys_mmap(8) as *i64
26 let tmo:i64=al_parse_int(argv[3] as *u8,0,al_slen(argv[3] as *u8),parsed)
27 if parsed[0]!=1{return 2}
28 sys_munmap(parsed as *u8,8)
29 if tmo<=0{return 2}
30 acm_p("ACCEPT-RELEASE-GATE candidate=");acm_p(subject);acm_p(" fixture=");acm_p(fixture);acm_p("\n")
31
32 let c:*i64=gv_ctr()
33 let a:*i64=sys_mmap(9*8) as *i64
34 a[0]="nx_accept" as *u8 as i64;a[1]="check-release" as *u8 as i64
35 a[2]="fixture_release" as *u8 as i64;a[3]="0000000000000000000000000000000000000000000000000000000000000000" as *u8 as i64
36 a[4]="alpha" as *u8 as i64;a[5]="1111111111111111111111111111111111111111111111111111111111111111" as *u8 as i64
37 a[6]="accca88d12a8311cbd46e48db8ca1ef1178a659ff0daeb18db259f353c834bb6" as *u8 as i64
38 a[7]=fixture as i64;a[8]=0
39 arg_case("real fixture accepted binding",8,a,ARB_ACCEPTED,c,subject,tmo)
40 arg_case("repeat same fixture idempotent",8,a,ARB_ACCEPTED,c,subject,tmo)
41 a[4]="beta" as *u8 as i64
42 arg_case("alpha receipt not beta",8,a,ARB_IDENTITY,c,subject,tmo)
43 a[4]="production" as *u8 as i64
44 arg_case("alpha receipt not production",8,a,ARB_IDENTITY,c,subject,tmo)
45 a[4]="alpha" as *u8 as i64;a[3]="1111111111111111111111111111111111111111111111111111111111111111" as *u8 as i64
46 arg_case("different candidate refused",8,a,ARB_IDENTITY,c,subject,tmo)
47 a[3]="0000000000000000000000000000000000000000000000000000000000000000" as *u8 as i64;a[5]="0000000000000000000000000000000000000000000000000000000000000000" as *u8 as i64
48 arg_case("different intended-use policy refused",8,a,ARB_IDENTITY,c,subject,tmo)
49 a[5]="1111111111111111111111111111111111111111111111111111111111111111" as *u8 as i64;a[6]="0000000000000000000000000000000000000000000000000000000000000000" as *u8 as i64
50 arg_case("different receipt reference hash refused",8,a,ARB_IDENTITY,c,subject,tmo)
51 a[6]="accca88d12a8311cbd46e48db8ca1ef1178a659ff0daeb18db259f353c834bb6" as *u8 as i64
52 arg_case("extra argument refused",9,a,ARB_INVALID,c,subject,tmo)
53 arg_case("missing argument refused",7,a,ARB_INVALID,c,subject,tmo)
54 a[7]="knowledge/gates/accept-binding-missing-t230.tsv" as *u8 as i64
55 arg_case("absent file incomplete",8,a,ARB_INCOMPLETE,c,subject,tmo)
56 a[7]="knowledge/gates" as *u8 as i64
57 arg_case("directory cannot pass receipt",8,a,ARB_IO,c,subject,tmo)
58 sys_munmap(a as *u8,9*8)
59 return gv_verdict("ACCEPT-RELEASE",c,"real immutable fixture; no evaluator or rights authorization claimed")
60}