code wiki / (root) / nx_writer_bound_canonical_gate_t190.nx

nx_writer_bound_canonical_gate_t190.nx source

↩ module page · 84 lines · 5487 B

1// nx_writer_bound_canonical_gate_t190.nx -- Implements a writer-bound canonical gate for ensuring consistent, conflict-free writes and state verification. 2import "nx_apistack_idempotency.nx" 3import "nx_gate_verdict.nx" 4func wg_write(p:*u8,b:*u8,n:i64)->i64{ 5 let fd:i64=sys_openat_wr(p,MODE_0600);if fd<0{return fd} 6 let w:i64=sys_write(fd,b,n);let c:i64=sys_close(fd);if w!=n||c!=0{return FIO_EIO};return 0 7} 8func wg_has(p:*u8,s:*u8,n:i64)->i64{ 9 let size:*i64=sys_mmap(8) as *i64;let b:*u8=sys_read_file(p,size) 10 if size[0]!=n{return 0};var i:i64=0;while i<n{if b[i]!=s[i]{return 0};i=i+1};return 1 11} 12func wg_output_has(needle:*u8)->i64{ 13 let size:*i64=sys_mmap(8) as *i64;let b:*u8=sys_read_file("last-output.log",size) 14 if (b as i64)<=0{return 0} 15 var nn:i64=0;while needle[nn]!=0 as u8{nn=nn+1} 16 var i:i64=0;while i+nn<=size[0]{ 17 var j:i64=0;var same:i64=1 18 while j<nn{if b[i+j]!=needle[j]{same=0};j=j+1} 19 if same==1{return 1};i=i+1 20 };return 0 21} 22func wg_run(av:*i64)->i64{ 23 let fd:i64=sys_openat_wr("last-output.log",MODE_0600);if fd<0{return fd} 24 let status:*i64=sys_mmap(8) as *i64;let env:*i64=sys_mmap(8) as *i64;env[0]=0 25 let pid:i64=sys_fork() 26 if pid==0{if sys_dup3(fd,1,0)<0||sys_dup3(fd,2,0)<0{sys_exit(125)};sys_execve(av[0] as *u8,av,env);sys_exit(127)} 27 var waited:i64=0-1;if pid>0{waited=sys_wait4(pid,status,0)};sys_close(fd) 28 if pid<=0||waited!=pid{return 0-1};return wait_status_rc(status[0]) 29} 30func main()->i64{ 31 let c:*i64=gv_ctr() 32 let root:*u8="knowledge/gates/writer-bound-canonical-t190" 33 gv_check("fresh isolated writer root",sys_mkdir(root,0x1c0)==0&&sys_chdir(root)==0,c) 34 gv_check("isolated ledger directories",sys_mkdir("knowledge",0x1c0)==0&&sys_mkdir("knowledge/status",0x1c0)==0,c) 35 gv_check("explicit isolated ledger bootstrap",wg_write("knowledge/status/fswrite_idem.jrnl","",0)==0,c) 36 let av:*i64=sys_mmap(9*8) as *i64 37 av[0]="/volume1/homes/elderwesto/nishihost/buildroot/_build/nx_fsops_write.sov.elf" as i64 38 av[1]="write" as i64;av[2]="first" as i64;av[3]="alpha" as i64;av[4]="key=write-A" as i64;av[5]=0 39 gv_check("first normalized write applies",wg_run(av)==0&&wg_has("first","alpha",5)==1,c) 40 gv_check("identical keyed request replays",wg_run(av)==0&&wg_has("first","alpha",5)==1,c) 41 av[3]="bravo" as i64 42 gv_check("same key changed payload conflicts",wg_run(av)==9&&wg_has("first","alpha",5)==1,c) 43 av[3]="alpha" as i64;av[2]="second" as i64 44 gv_check("same key changed destination conflicts",wg_run(av)==9,c) 45 let st:*u8=sys_mmap(NX_STAT_X64_BYTES) 46 gv_check("conflict created no destination",sys_fstatat("second",st)==0-2,c) 47 av[2]="first" as i64;av[1]="write-file" as i64;av[3]="source.txt" as i64 48 wg_write("source.txt","alpha",5) 49 gv_check("artifact and inline normalize identically",wg_run(av)==0&&wg_has("first","alpha",5)==1,c) 50 wg_write("source.txt","bravo",5) 51 gv_check("changed loaded artifact conflicts",wg_run(av)==9&&wg_has("first","alpha",5)==1,c) 52 av[1]="write" as i64;av[2]="ordered" as i64;av[3]="data" as i64;av[4]="expect=0" as i64;av[5]="key=order-A" as i64;av[6]=0 53 gv_check("explicit condition request applies",wg_run(av)==0,c) 54 av[4]="key=order-A" as i64;av[5]="expect=0" as i64 55 gv_check("option order preserves fingerprint",wg_run(av)==0,c) 56 av[5]=0 57 gv_check("omitted condition differs from explicit",wg_run(av)==9,c) 58 av[1]="append" as i64;av[2]="journal" as i64;av[3]="row\n" as i64;av[4]="key=append-A" as i64 59 gv_check("append first applies",wg_run(av)==0,c) 60 gv_check("same append replays without second row",wg_run(av)==0&&wg_has("journal","row\n",4)==1,c) 61 av[1]="edit" as i64;av[2]="first" as i64;av[3]="alpha" as i64;av[4]="new" as i64;av[5]="key=edit-A" as i64;av[6]=0 62 gv_check("edit first applies",wg_run(av)==0,c) 63 gv_check("edit replay does not require old anchor",wg_run(av)==0&&wg_has("first","new",3)==1,c) 64 av[4]="other" as i64 65 gv_check("edit replacement differs",wg_run(av)==9&&wg_has("first","new",3)==1,c) 66 av[1]="write" as i64;av[2]="ab" as i64;av[3]="c" as i64;av[4]="key=framing-A" as i64;av[5]=0 67 gv_check("framed first request applies",wg_run(av)==0,c) 68 av[2]="a" as i64;av[3]="bc" as i64 69 gv_check("field boundary cannot collide",wg_run(av)==9&&sys_fstatat("a",st)==0-2,c) 70 av[1]="edit" as i64;av[2]="first" as i64;av[3]="new" as i64;av[4]="next" as i64;av[5]="key=all-A" as i64;av[6]=0 71 gv_check("single edit mode applies",wg_run(av)==0,c) 72 av[6]="all" as i64;av[7]=0 73 gv_check("all mode changes request identity",wg_run(av)==9&&wg_has("first","next",4)==1,c) 74 id_record("knowledge/status/fswrite_idem.jrnl","legacy",6,"rc=0 verb=write path=first",26) 75 av[1]="write" as i64;av[2]="first" as i64;av[3]="junk" as i64;av[4]="key=legacy" as i64;av[5]="expect=any" as i64;av[6]=0 76 gv_check("legacy unbound receipt requires reconciliation",wg_run(av)==9&&wg_has("first","next",4)==1,c) 77 av[2]="knowledge/status/fswrite_idem.jrnl" as i64;av[4]="key=receipt-fail" as i64 78 let partial:i64=wg_run(av) 79 gv_check("mutation followed by receipt failure is explicit",partial==10&&wg_has("knowledge/status/fswrite_idem.jrnl","junk",4)==1,c) 80 gv_check("receipt failure declares applied true",wg_output_has("\"state\":\"applied-receipt-failed\"")==1&&wg_output_has("\"applied\":true")==1,c) 81 av[2]="after-corrupt" as i64;av[4]="key=after-corrupt" as i64 82 gv_check("corrupt evidence prevents next mutation",wg_run(av)==9&&sys_fstatat("after-corrupt",st)==0-2,c) 83 return gv_verdict("writer-bound-request",c,"Actual writer executable and isolated retained ledger; no exactly-once crash guarantee") 84}