code wiki / (root) / nx_compare_receipt_inspect_gate_t138.nx

nx_compare_receipt_inspect_gate_t138.nx source

↩ module page · 115 lines · 7436 B

1// nx_compare_receipt_inspect_gate_t138.nx -- Performs a strict parse and comparison of an intent with a journal to verify receipt and data integrity. 2import "nx_compare_receipt_inspect_lib_t138.nx" 3import "nx_gate_verdict.nx" 4func ig_path(base:*u8,leaf:*u8)->*u8 { 5 let n:i64=rgr_len(base)+rgr_len(leaf)+2 6 let p:*u8=rgr_alloc(n);var o:i64=rgr_copy(p,0,base);o=rgr_copy(p,o,"/" as *u8);rgr_copy(p,o,leaf);return p 7} 8func ig_intent(journal:*u8,id:*u8)->*u8 { 9 let p:*u8=rgr_alloc(rgr_len(journal)+rgr_len(id)+9) 10 var o:i64=rgr_copy(p,0,journal);o=rgr_copy(p,o,".intent." as *u8);rgr_copy(p,o,id);return p 11} 12func ig_write(path:*u8,b:*u8,n:i64,append:i64)->i64 { 13 var fd:i64=0-1 14 if append==1 {fd=sys_openat_append(path,MODE_0644)} else {fd=sys_openat_wr(path,MODE_0644)} 15 if fd<0 {return fd} 16 let rc:i64=rgr_write_all(fd,b,n);let sync:i64=sys_fsync(fd);let close:i64=sys_close(fd) 17 if rc!=0 {return rc};if sync!=0 {return sync};return close 18} 19func ig_status(out:*RgiObservation,rc:i64,expected:*u8)->i64 {let actual:*u8=rgi_status(out,rc);return rgi_literal(actual,rgr_len(actual),expected)} 20func main(argc:i64,argv:*i64)->i64 { 21 if argc==3 {return rgi_command(argv[1] as *u8,argv[2] as *u8)} 22 let ctr:*i64=gv_ctr() 23 gv_head("READ-ONLY COMPARE RECEIPT INSPECTION" as *u8) 24 let root:*u8=rgr_alloc(128) 25 let off:i64=rgr_copy(root,0,"/tmp/nx_compare_receipt_inspect_" as *u8) 26 rgr_decimal(root,off,sys_now_realtime_us()) 27 gv_check("isolated real filesystem fixture",sys_mkdir(root,MODE_0755)==0,ctr) 28 ja_puts("fixture_root=" as *u8);ja_puts(root);ja_puts("\n" as *u8) 29 let journal:*u8=ig_path(root,"journal" as *u8) 30 let target:*u8=ig_path(root,"page" as *u8) 31 let intent:*u8=ig_intent(journal,"complete" as *u8) 32 let tx:*RgrTx=rgr_alloc(__size_of(RgrTx)) as *RgrTx 33 let out:*RgiObservation=rgr_alloc(__size_of(RgiObservation)) as *RgiObservation 34 let body:*u8="payload\n" as *u8 35 let transaction:i64=rgr_transact(tx,journal,target,body,8,0-1,1789239000,"complete" as *u8,0) 36 gv_check("actual publisher transaction fixture completes",transaction==0,ctr) 37 gv_check("publisher releases real shared lock",rgr_release(tx)==0,ctr) 38 let before:*u8=rgr_alloc(32);let after:*u8=rgr_alloc(32);let measured:*i64=rgr_alloc(24) as *i64 39 let journal_before:*u8=rgr_alloc(32);let journal_after:*u8=rgr_alloc(32) 40 rgi_stream(journal,0 as *u8,0,journal_before,measured) 41 rgi_stream(intent,0 as *u8,0,before,measured) 42 let rc:i64=rgi_inspect(journal,intent,out) 43 gv_check("completed intent strict parse actual target hash and exact receipt",rc==0 && out.state==RGI_COMPLETED && out.target_match==1 && out.exact_rows==1 && out.torn_tail==0,ctr) 44 gv_check("completed classification remains evidence scoped",ig_status(out,rc,"COMPLETED_CURRENT_BYTES_CONFIRMED" as *u8),ctr) 45 rgi_stream(intent,0 as *u8,0,after,measured) 46 gv_check("inspection leaves intent byte identical",rgi_equal(before,32,after,32),ctr) 47 rgi_stream(journal,0 as *u8,0,journal_after,measured) 48 gv_check("inspection leaves journal byte identical",rgi_equal(journal_before,32,journal_after,32),ctr) 49 rgi_observation_free(out) 50 let lock:i64=ja_lock(journal) 51 let busy:i64=rgi_inspect(journal,intent,out) 52 gv_check("inspection refuses concurrent writer lock",lock>=0 && busy==RGI_E_LOCK,ctr) 53 ja_unlock(lock);rgi_observation_free(out) 54 let rown:*i64=rgr_alloc(16) as *i64 55 let rows:*u8=sys_read_file(journal,rown) 56 gv_check("duplicate row fixture appended",ig_write(journal,rows,rown[0],1)==0,ctr) 57 let duplicate:i64=rgi_inspect(journal,intent,out) 58 gv_check("duplicate completion rows remain ambiguous",duplicate==0 && out.exact_rows==2 && ig_status(out,duplicate,"DUPLICATE_ROWS_AMBIGUOUS" as *u8),ctr) 59 rgi_observation_free(out) 60 ig_write(journal,"TORN" as *u8,4,1) 61 let torn:i64=rgi_inspect(journal,intent,out) 62 gv_check("unterminated journal tail requires intervention",torn==0 && out.torn_tail==1 && ig_status(out,torn,"TORN_JOURNAL_NEEDS_INTERVENTION" as *u8),ctr) 63 rgi_observation_free(out) 64 let prejournal:*u8=ig_path(root,"prejournal" as *u8) 65 ig_write(prejournal,"" as *u8,0,0) 66 let prepared:*u8=ig_intent(prejournal,"prepared" as *u8) 67 let prep:i64=rgr_prepare(tx,prejournal,target,body,8,8,1789239001,"prepared" as *u8,0) 68 rgr_release(tx) 69 let pr:i64=rgi_inspect(prejournal,prepared,out) 70 gv_check("prepared matching target never proves publication",prep==0 && pr==0 && out.state==RGI_PREPARED && out.target_match==1 && ig_status(out,pr,"BYTES_MATCH_PUBLICATION_UNPROVEN" as *u8),ctr) 71 rgi_observation_free(out) 72 ig_write(prepared,"state=PUBLISHED\n" as *u8,16,1) 73 let pub:i64=rgi_inspect(prejournal,prepared,out) 74 gv_check("published missing current receipt reported without replay",pub==0 && out.exact_rows==0 && ig_status(out,pub,"PUBLISHED_RECEIPT_NOT_OBSERVED_IN_CURRENT_JOURNAL" as *u8),ctr) 75 rgi_observation_free(out) 76 ig_write(target,"changed\n" as *u8,8,0) 77 let changed:i64=rgi_inspect(prejournal,prepared,out) 78 gv_check("actual changed target hash is distinguished",changed==0 && out.target_match==0 && ig_status(out,changed,"CURRENT_TARGET_DIFFERS_OR_SUPERSEDED" as *u8),ctr) 79 rgi_observation_free(out) 80 let broken:*u8=ig_intent(prejournal,"broken" as *u8) 81 ig_write(broken,"schema=9\nstate=PREPARED\n" as *u8,24,0) 82 let bad:i64=rgi_inspect(prejournal,broken,out) 83 gv_check("unknown schema refuses",bad==RGI_E_INTENT,ctr) 84 rgi_observation_free(out) 85 ig_write(prepared,"state=COMPLETED" as *u8,15,1) 86 let partial:i64=rgi_inspect(prejournal,prepared,out) 87 gv_check("unterminated state refuses instead of completing",partial==RGI_E_INTENT,ctr) 88 rgi_observation_free(out) 89 let mismatch:*u8=ig_intent(prejournal,"wrong-id" as *u8) 90 let ilen:*i64=rgr_alloc(16) as *i64 91 let ibytes:*u8=sys_read_file(intent,ilen) 92 ig_write(mismatch,ibytes,ilen[0],0) 93 let wrong:i64=rgi_inspect(prejournal,mismatch,out) 94 gv_check("intent filename journal and id binding enforced",wrong==RGI_E_INTENT,ctr) 95 rgi_observation_free(out) 96 let longjournal:*u8=ig_path(root,"longjournal" as *u8) 97 let longtarget:*u8=ig_path(root,"longpage" as *u8) 98 let longintent:*u8=ig_intent(longjournal,"long" as *u8) 99 let amount:i64=1048576+4096 100 let history:*u8=rgr_alloc(amount) 101 var i:i64=0;while i<amount {history[i]=10 as u8;i=i+1} 102 ig_write(longjournal,history,amount,0) 103 let longtx:i64=rgr_transact(tx,longjournal,longtarget,body,8,0-1,1789239002,"long" as *u8,0);rgr_release(tx) 104 let longrc:i64=rgi_inspect(longjournal,longintent,out) 105 gv_check("journal larger than former ceiling scanned with one block memory",longtx==0 && longrc==0 && out.journal_bytes>1048576 && out.exact_rows==1,ctr) 106 rgi_observation_free(out) 107 rgi_command(longjournal,longintent) 108 ig_write(longintent,"state=COMPLETED\n" as *u8,16,1) 109 let repeated:i64=rgi_inspect(longjournal,longintent,out) 110 gv_check("duplicate terminal state is not silently accepted",repeated==RGI_E_INTENT,ctr) 111 rgi_observation_free(out) 112 let special:i64=rgi_stream("/dev/full" as *u8,0 as *u8,0,before,measured) 113 gv_check("character device not mistaken for empty finite journal",special!=0,ctr) 114 return gv_verdict("COMPARE-RECEIPT-INSPECT" as *u8,ctr,"Private read-only observation. No replay, archive scan or transaction-identity certainty." as *u8) 115}