nx_id_legacy_reconcile_gate_t219.nx source
↩ module page · 61 lines · 4746 B
1import "_hdl_build/nx_apistack_idempotency.nx"
2import "nx_gate_verdict.nx"
3func lg_len(p:*u8)->i64{var n:i64=0;while p[n]!=0 as u8{n=n+1};return n}
4func lg_eq(a:*u8,b:*u8,n:i64)->i64{var i:i64=0;while i<n{if a[i]!=b[i]{return 0};i=i+1};return 1}
5func lg_write(p:*u8,b:*u8,n:i64)->i64{
6 let fd:i64=sys_openat_wr(p,MODE_0600);if fd<0{return fd}
7 let w:i64=sys_write(fd,b,n);let c:i64=sys_close(fd)
8 if w!=n||c!=0{return FIO_EIO};return 0
9}
10func main(argc:i64,argv:*i64)->i64{
11 if argc!=2{return 2}
12 let c:*i64=gv_ctr()
13 let row:*NxIdLegacyRow=sys_mmap_try(__size_of(NxIdLegacyRow)) as *NxIdLegacyRow
14 if (row as i64)<=0{return 3}
15 gv_check("empty null snapshot accepted without dereference",id_legacy_row_next(0 as *u8,0,0,row)==0,c)
16 gv_check("nonempty null snapshot refused",id_legacy_row_next(0 as *u8,1,0,row)==FIO_EINVAL,c)
17 gv_check("negative extent refused",id_legacy_row_next("x",0-1,0,row)==FIO_EINVAL,c)
18 gv_check("past EOF refused",id_legacy_row_next("x",1,2,row)==FIO_EINVAL,c)
19 gv_check("negative offset refused",id_legacy_row_next("x",1,0-1,row)==FIO_EINVAL,c)
20 gv_check("null row refused",id_legacy_row_next("x",1,0,0 as *NxIdLegacyRow)==FIO_EINVAL,c)
21 let raw:*u8=sys_mmap_try(__size_of(NxIdLegacyRow))
22 if (raw as i64)<=0{return 3}
23 raw[0]=75 as u8;raw[1]=9 as u8;raw[2]=82 as u8;raw[3]=10 as u8
24 gv_check("aliased output refused before source mutation",id_legacy_row_next(raw,4,0,raw as *NxIdLegacyRow)==FIO_EINVAL&&lg_eq(raw,"K\tR\n",4)==1,c)
25 let s:*u8="# retained\n\nalpha\trc=0\tpayload\norphan\nbeta\tok\n"
26 let n:i64=lg_len(s)
27 let copy:*u8=sys_mmap_try(n)
28 if (copy as i64)<=0{return 3}
29 var i:i64=0;while i<n{copy[i]=s[i];i=i+1}
30 gv_check("comment offsets",id_legacy_row_next(copy,n,0,row)==1&&row.flags==ID_ROW_COMMENT&&row.end==10&&row.next==11,c)
31 gv_check("blank row offsets",id_legacy_row_next(copy,n,row.next,row)==1&&row.flags==ID_ROW_EMPTY&&row.next==12,c)
32 gv_check("extra TAB remains ambiguous",id_legacy_row_next(copy,n,row.next,row)==1&&row.flags==ID_ROW_EXTRA_TAB&&row.tabs==2,c)
33 gv_check("original source row offset and extent retained",row.start==12&&row.end==30&&row.next==31,c)
34 gv_check("legacy result truncated exactly at second TAB",row.legacy_key_bytes==5&&row.legacy_result_start==18&&row.legacy_result_bytes==4&&row.second_tab==22,c)
35 gv_check("TAB content and interleaving indistinguishable from bytes",lg_eq(copy+row.start,"alpha\trc=0\tpayload",18)==1,c)
36 gv_check("no TAB legacy seen-empty result retained as ambiguity",id_legacy_row_next(copy,n,row.next,row)==1&&row.flags==ID_ROW_NO_TAB&&row.legacy_key_bytes==6&&row.legacy_result_bytes==0,c)
37 gv_check("normal row remains syntactically normal not semantic proof",id_legacy_row_next(copy,n,row.next,row)==1&&row.flags==0&&row.legacy_result_bytes==2,c)
38 gv_check("EOF explicit",id_legacy_row_next(copy,n,row.next,row)==0,c)
39 gv_check("all original bytes preserved including delimiters",lg_eq(copy,s,n)==1,c)
40 gv_check("unterminated row refused shape",id_legacy_row_next("k\tv",3,0,row)==1&&row.flags==ID_ROW_UNTERMINATED&&row.next==3,c)
41 gv_check("empty key classified",id_legacy_row_next("\tv\n",3,0,row)==1&&row.flags==ID_ROW_EMPTY_KEY,c)
42 gv_check("empty result valid shape",id_legacy_row_next("k\t\n",3,0,row)==1&&row.flags==0&&row.legacy_result_bytes==0,c)
43 gv_check("CR retained flagged",id_legacy_row_next("k\tv\r\n",5,0,row)==1&&row.flags==ID_ROW_CONTROL,c)
44 raw[0]=107 as u8;raw[1]=9 as u8;raw[2]=0 as u8;raw[3]=10 as u8
45 gv_check("embedded NUL retained flagged",id_legacy_row_next(raw,4,0,row)==1&&row.flags==ID_ROW_CONTROL,c)
46 let path:*u8=argv[1] as *u8
47 gv_check("representative fixture written to isolated path",lg_write(path,s,n)==0,c)
48 let out:*u8=sys_mmap_try(16)
49 if (out as i64)<=0{return 3}
50 gv_check("unknown request remains refused with ambiguous history",id_lookup(path,"new",3,out,16)==ID_EVIDENCE_ERROR,c)
51 gv_check("known normal row cannot bypass ambiguous history",id_lookup(path,"beta",4,out,16)==ID_EVIDENCE_ERROR,c)
52 let ev:*NxIdEvidence=sys_mmap_try(__size_of(NxIdEvidence)) as *NxIdEvidence
53 if (ev as i64)<=0{return 3}
54 let state:i64=id_read_evidence(path,"new",3,ev)
55 gv_check("read-only snapshot preserves exact original bytes",state==ID_EVIDENCE_ERROR&&ev.bytes==n&&lg_eq(ev.buffer,s,n)==1,c)
56 gv_check("scanner consumes retained malformed snapshot",id_legacy_row_next(ev.buffer,ev.bytes,12,row)==1&&row.flags==ID_ROW_EXTRA_TAB,c)
57 id_evidence_close(ev);sys_munmap_direct(ev as *u8,__size_of(NxIdEvidence))
58 sys_munmap_direct(out,16);sys_munmap_direct(copy,n)
59 sys_munmap_direct(raw,__size_of(NxIdLegacyRow));sys_munmap_direct(row as *u8,__size_of(NxIdLegacyRow))
60 return gv_verdict("legacy-ledger-row-inspection",c,"Syntax and legacy offsets only; no automatic reconciliation or exactly-once guarantee")
61}