code wiki / _hdl_build / nx_dr_retention_gate.nx
nx_dr_retention_gate.nx source
↩ module page · 30 lines · 2450 B
1// nx_dr_retention_gate.nx -- exceed-gate for CAP-DR-RETENTION. Proves the keep-policy: newest keepN kept, older
2// prune-eligible, boundary correct, keepN>=total keeps all, keepN=0 keeps none. Additive (marks sets; never deletes).
3// Sovereign: nx_syscalls. expect_exit: 0
4import "nx_syscalls.nx"
5import "nx_gate_verdict.nx"
6
7func gp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
8func gn(v: i64) -> i64 { var t: i64=v; if t<0{sys_write(1,"-" as *u8,1);t=0-t} let tm:*u8=sys_mmap(24); var k:i64=0; if t==0{tm[0]=48 as u8;k=1} while t>0{tm[k]=(48+(t%10)) as u8;t=t/10;k=k+1} let b:*u8=sys_mmap(24); var j:i64=0; while j<k{b[j]=tm[k-1-j];j=j+1} sys_write(1,b,k); return 0 }
9func g_keep(idx: i64, total: i64, keepN: i64) -> i64 { if idx >= total - keepN { return 1 } return 0 }
10
11func main(argc: i64, argv: *i64) -> i64 {
12 gp("=== nx_dr_retention_gate (keep-last-N policy, additive) ===\n" as *u8)
13 var pass: i64=0; var fail: i64=0
14 if g_keep(4,5,3)==1 { pass=pass+1; gp(" T1 newest (idx4/5,keep3) -> KEEP PASS\n" as *u8) } else { fail=fail+1; gp(" T1 FAIL\n" as *u8) }
15 if g_keep(2,5,3)==1 { pass=pass+1; gp(" T2 boundary (idx2/5,keep3) -> KEEP PASS\n" as *u8) } else { fail=fail+1; gp(" T2 FAIL\n" as *u8) }
16 if g_keep(1,5,3)==0 { pass=pass+1; gp(" T3 older (idx1/5,keep3) -> prune-eligible PASS\n" as *u8) } else { fail=fail+1; gp(" T3 FAIL\n" as *u8) }
17 if g_keep(0,5,3)==0 { pass=pass+1; gp(" T4 oldest (idx0/5,keep3) -> prune-eligible PASS\n" as *u8) } else { fail=fail+1; gp(" T4 FAIL\n" as *u8) }
18 if g_keep(0,3,5)==1 { pass=pass+1; gp(" T5 keepN>=total -> KEEP all PASS\n" as *u8) } else { fail=fail+1; gp(" T5 FAIL\n" as *u8) }
19 if g_keep(4,5,0)==0 { pass=pass+1; gp(" T6 keepN=0 -> prune all PASS\n" as *u8) } else { fail=fail+1; gp(" T6 FAIL\n" as *u8) }
20 gp("RESULT pass=" as *u8); gn(pass); gp(" fail=" as *u8); gn(fail)
21 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
22 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
23 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
24 let ctr__dry: *i64 = gv_ctr()
25 ctr__dry[0] = pass
26 ctr__dry[1] = pass + fail
27 let rc__dry: i64 = gv_verdict("DR-RETENTION-GATE" as *u8, ctr__dry, "bounded versioned history w/ keep-policy)" as *u8)
28 sys_exit(rc__dry)
29 return rc__dry
30}