code wiki / (root) / nx_writer_bound_gate_t190b.nx

nx_writer_bound_gate_t190b.nx source

↩ module page · 83 lines · 5360 B

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