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}