code wiki / (root) / nx_id_ledger_audit_t190.nx

nx_id_ledger_audit_t190.nx source

↩ module page · 77 lines · 3360 B

1// nx_id_ledger_audit_t190.nx -- Analyzes ledger metadata to count rows with formatting issues and validate schema compliance. 2import "nx_apistack_idempotency.nx" 3import "nx_fsops_lib.nx" 4// Read-only compatibility observation; never emits row keys, outcomes or credentials. 5func ia_shape(r:*NxIdEvidence)->i64{ 6 if (r.buffer as i64)<=0||r.bytes<=0{return 0} 7 var lines:i64=0;var extra:i64=0;var absent:i64=0;var empty:i64=0;var control:i64=0 8 var first:i64=0-1;var i:i64=0 9 while i<r.bytes{ 10 let start:i64=i;var tabs:i64=0;var firsttab:i64=0-1;var badcontrol:i64=0 11 while i<r.bytes{ 12 let value:u8=r.buffer[i] 13 if value==10 as u8{break} 14 if value==9 as u8{tabs=tabs+1;if firsttab<0{firsttab=i}} 15 if value==0 as u8||value==13 as u8{badcontrol=badcontrol+1} 16 i=i+1 17 } 18 if i>start{ 19 if r.buffer[start]!=35 as u8{ 20 lines=lines+1;var bad:i64=0 21 if tabs>1{extra=extra+1;bad=1} 22 if tabs==0{absent=absent+1;bad=1} 23 if firsttab==start{empty=empty+1;bad=1} 24 if badcontrol>0{control=control+1;bad=1} 25 if bad==1{if first<0{first=start}} 26 } 27 };i=i+1 28 } 29 fsx_puts(",\"shapeRows\":");fsx_putn(lines) 30 fsx_puts(",\"rowsWithExtraTabs\":");fsx_putn(extra) 31 fsx_puts(",\"rowsWithoutTab\":");fsx_putn(absent) 32 fsx_puts(",\"rowsWithEmptyKey\":");fsx_putn(empty) 33 fsx_puts(",\"rowsWithCRorNUL\":");fsx_putn(control) 34 fsx_puts(",\"firstInvalidRowOffset\":");fsx_putn(first) 35 fsx_puts(",\"finalNewline\":");if r.buffer[r.bytes-1]==10 as u8{fsx_puts("true")}else{fsx_puts("false")} 36 return 0 37} 38func main(argc:i64,argv:*i64)->i64{ 39 if argc!=2{fsx_puts("usage: ledger-path (metadata only)\n");return 2} 40 let r:*NxIdEvidence=sys_mmap_try(__size_of(NxIdEvidence)) as *NxIdEvidence 41 if (r as i64)<=0{return 3} 42 let key:*u8="nishi-metadata-audit-t190" 43 var kn:i64=0;while key[kn]!=0 as u8{kn=kn+1} 44 let state:i64=id_read_evidence(argv[1] as *u8,key,kn,r) 45 fsx_puts("{\"action\":\"IDEMPOTENCY-LEDGER-AUDIT\",\"state\":");fsx_putn(state) 46 fsx_puts(",\"nativeError\":");fsx_putn(r.system_code) 47 fsx_puts(",\"bytes\":");fsx_putn(r.bytes) 48 var rows:i64=0;var bound:i64=0;var comments:i64=0 49 if state>=0||state==ID_NOT_FOUND{ 50 var i:i64=0;let prefix:*u8="rc=0 request_v=1 request_sha256=" 51 var pn:i64=0;while prefix[pn]!=0 as u8{pn=pn+1} 52 while i<r.bytes{ 53 let start:i64=i 54 while i<r.bytes{if r.buffer[i]==10 as u8{break};if state>=0{if r.buffer+i==r.result+r.result_bytes{break}};i=i+1} 55 let end:i64=i 56 if end>start{ 57 if r.buffer[start]==35 as u8{comments=comments+1}else{ 58 rows=rows+1;var tab:i64=start;while tab<end{if r.buffer[tab]==9 as u8{break};tab=tab+1} 59 let pos:i64=tab+1 60 if end-pos>pn+64{ 61 var same:i64=1;var j:i64=0;while j<pn{if r.buffer[pos+j]!=prefix[j]{same=0};j=j+1} 62 if r.buffer[pos+pn+64]!=32 as u8{same=0} 63 if same==1{bound=bound+1} 64 } 65 } 66 };i=i+1 67 } 68 fsx_puts(",\"schemaValid\":true,\"rows\":");fsx_putn(rows) 69 fsx_puts(",\"v1PrefixRows\":");fsx_putn(bound) 70 fsx_puts(",\"unboundOrOtherRows\":");fsx_putn(rows-bound) 71 fsx_puts(",\"commentRows\":");fsx_putn(comments) 72 }else{fsx_puts(",\"schemaValid\":false,\"rows\":null,\"v1PrefixRows\":null,\"unboundOrOtherRows\":null")} 73 ia_shape(r) 74 fsx_puts(",\"mutationPerformed\":false,\"snapshotOnly\":true}\n") 75 id_evidence_close(r);sys_munmap_direct(r as *u8,__size_of(NxIdEvidence)) 76 if state>=0||state==ID_NOT_FOUND{return 0};return 3 77}