code wiki / _hdl_build / nx_toolatency_observation_gate.nx
nx_toolatency_observation_gate.nx source
↩ module page · 86 lines · 8317 B
1// Pure boundary controls and real read-only journal projection; no route/ledger writes.
2import "nx_toolatency_observation_lib.nx"
3import "nx_gate_verdict.nx"
4const OG_ROWS: i64 = 2
5const OG_FIXTURE_BYTES: i64 = 4096 // capacity of the exact grammar fixtures below
6func og_copy(b: *u8, p: i64, s: *u8) -> i64 {
7 var i: i64=0; while s[i] != (0 as u8) { b[p+i]=s[i]; i=i+1 }; b[p+i]=0 as u8; return p+i
8}
9func og_replace(src: *u8, needle: *u8, replacement: *u8, out: *u8) -> i64 {
10 let n: i64=to_len(src); let m: i64=to_len(needle); var i: i64=0
11 while i+m <= n {
12 if to_eq(src,i,i+m,needle) == 1 {
13 var p: i64=0; while p < i { out[p]=src[p]; p=p+1 }
14 p=og_copy(out,p,replacement); var k: i64=i+m
15 while k < n { out[p]=src[k]; p=p+1; k=k+1 }; out[p]=0 as u8; return p
16 }; i=i+1
17 }; return 0-1
18}
19func og_bad(src: *u8, needle: *u8, replacement: *u8, b: *u8, row: *i64) -> i64 {
20 let n: i64=og_replace(src,needle,replacement,b)
21 if n <= 0 { return 0 }; return to_parse(b,0,n-1,row) == (0-1)
22}
23func main(argc: i64, argv: *i64) -> i64 {
24 if argc != 4 { gv_puts("usage: observation-gate retained-actual-journal read_capacity row_capacity\n" as *u8); return 3 }
25 let args: *i64=sys_mmap(2*TO_WORD_BYTES) as *i64
26 if (args as i64) <= 0 { return 3 }
27 if to_int(argv[2] as *u8,0,to_len(argv[2] as *u8),args) != 1 { return 3 }
28 if to_int(argv[3] as *u8,0,to_len(argv[3] as *u8),((args as i64)+TO_WORD_BYTES) as *i64) != 1 { return 3 }
29 let readcap: i64=args[0]; let rowcap: i64=args[1]
30 if readcap <= 0 || readcap >= TO_MAX/2 || rowcap <= 0 || rowcap > TO_MAX/(TO_ROW_SLOTS*TO_WORD_BYTES) { return 3 }
31 let ctr: *i64=gv_ctr(); gv_head("TOOL-OBSERVATIONS / strict schema and real journal" as *u8)
32 let b: *u8=sys_mmap(OG_FIXTURE_BYTES); let row: *i64=sys_mmap(TO_ROW_SLOTS*TO_WORD_BYTES) as *i64
33 let rows: *i64=sys_mmap(OG_ROWS*TO_ROW_SLOTS*TO_WORD_BYTES) as *i64; let st: *i64=sys_mmap(TO_STATE_SLOTS*TO_WORD_BYTES) as *i64
34 if (b as i64) <= 0 || (row as i64) <= 0 || (rows as i64) <= 0 || (st as i64) <= 0 { return 3 }
35 let valid: *u8="1789023687\tmcp\tnx_fixture\tobserve\tasync_runner_return\ttools/timing timing_v=1 lane=async job=123 request_pid=456 request_begin_us=100 clock=monotonic_us clock_scope=same_process_tree begin_us=110 end_us=120 elapsed_us=10 code=7 bytes=22 client_first_byte=unobserved result_first_byte=unobserved\n" as *u8
36 let vn: i64=to_len(valid)
37 gv_check("exact writer grammar and signed result retained" as *u8,to_parse(valid,0,vn-1,row) == 1 && row[1] == 123 && row[6] == 10 && row[7] == 7 && row[8] == 22,ctr)
38 gv_check("legacy row is unrelated rather than an extra observation" as *u8,to_parse("123\tmcp\tnx_fixture\trun\tOK\tdur_ms=20" as *u8,0,to_len("123\tmcp\tnx_fixture\trun\tOK\tdur_ms=20" as *u8),row) == 0,ctr)
39 gv_check("unsupported timing version" as *u8,og_bad(valid,"timing_v=1" as *u8,"timing_v=2" as *u8,b,row),ctr)
40 gv_check("duplicate field is refused" as *u8,og_bad(valid,"job=123" as *u8,"job=123 job=999" as *u8,b,row),ctr)
41 gv_check("numeric suffix refused" as *u8,og_bad(valid,"bytes=22" as *u8,"bytes=22x" as *u8,b,row),ctr)
42 gv_check("positive overflow refused" as *u8,og_bad(valid,"job=123" as *u8,"job=9223372036854775808" as *u8,b,row),ctr)
43 gv_check("negative overflow refused" as *u8,og_bad(valid,"code=7" as *u8,"code=-9223372036854775809" as *u8,b,row),ctr)
44 gv_check("unsupported clock refused" as *u8,og_bad(valid,"clock=monotonic_us" as *u8,"clock=realtime_us" as *u8,b,row),ctr)
45 gv_check("duration arithmetic mismatch refused" as *u8,og_bad(valid,"elapsed_us=10" as *u8,"elapsed_us=11" as *u8,b,row),ctr)
46 gv_check("false first-byte claim refused" as *u8,og_bad(valid,"client_first_byte=unobserved" as *u8,"client_first_byte=observed" as *u8,b,row),ctr)
47 gv_check("missing field refused" as *u8,og_bad(valid," bytes=22" as *u8,"" as *u8,b,row),ctr)
48 gv_check("wrong action refused" as *u8,og_bad(valid,"\tobserve\t" as *u8,"\trun\t" as *u8,b,row),ctr)
49 var n: i64=og_replace(valid,"code=7" as *u8,"code=-9223372036854775808" as *u8,b)
50 gv_check("signed minimum code retained" as *u8,to_parse(b,0,n-1,row) == 1 && row[7] == TO_MIN,ctr)
51 n=og_replace(valid,"nx_fixture" as *u8,"nx_é€😀" as *u8,b)
52 gv_check("valid multibyte tool identity retained" as *u8,to_parse(b,0,n-1,row) == 1,ctr)
53 b[0]=192 as u8; b[1]=128 as u8
54 gv_check("overlong UTF8 cannot enter JSON" as *u8,to_utf8(b,0,2) == 0,ctr)
55 b[0]=237 as u8; b[1]=160 as u8; b[2]=128 as u8
56 gv_check("surrogate UTF8 refused" as *u8,to_utf8(b,0,3) == 0,ctr)
57 gv_check("signed integer minimum exact" as *u8,to_int("-9223372036854775808" as *u8,0,20,row) == 1 && row[0] == TO_MIN,ctr)
58 gv_check("unsigned integer maximum exact" as *u8,to_int("9223372036854775807" as *u8,0,19,row) == 1 && row[0] == TO_MAX,ctr)
59 gv_check("bare sign refused" as *u8,to_int("-" as *u8,0,1,row) == 0,ctr)
60 gv_check("empty integer refused" as *u8,to_int("" as *u8,0,0,row) == 0,ctr)
61 n=og_copy(b,0,valid); n=og_copy(b,n,valid)
62 gv_check("two complete lines preserve both observations" as *u8,to_scan(b,n,0,n,1,rows,OG_ROWS,row,st) == TO_STATUS_OK && st[7] == 2 && st[4] == n,ctr)
63 gv_check("row capacity stops at exact unconsumed matching line" as *u8,to_scan(b,n,0,n,1,rows,1,row,st) == TO_STATUS_WINDOW && st[7] == 1 && st[4] == vn,ctr)
64 gv_check("zero row capacity cannot silently consume evidence" as *u8,to_scan(b,n,0,n,1,rows,0,row,st) == TO_STATUS_WINDOW && st[7] == 0 && st[4] == 0,ctr)
65 gv_check("resume window returns second line exact offset" as *u8,to_scan(((b as i64)+vn) as *u8,vn,vn,n,1,rows,OG_ROWS,row,st) == TO_STATUS_OK && st[7] == 1 && st[4] == n,ctr)
66 gv_check("read window without newline is not a complete record" as *u8,to_scan(b,vn-1,0,n,1,rows,OG_ROWS,row,st) == TO_STATUS_WINDOW && st[7] == 0 && st[4] == 0 && st[10] == vn-1,ctr)
67 gv_check("unterminated EOF remains resumable and unobserved" as *u8,to_scan(b,vn-1,0,vn-1,1,rows,OG_ROWS,row,st) == TO_STATUS_WINDOW && st[7] == 0,ctr)
68 gv_check("midline window explicitly skips prefix" as *u8,to_scan(((b as i64)+1) as *u8,n-1,1,n,0,rows,OG_ROWS,row,st) == TO_STATUS_WINDOW && st[9] == vn-1 && st[7] == 1 && st[4] == n,ctr)
69 n=og_replace(valid,"elapsed_us=10" as *u8,"elapsed_us=11" as *u8,b); n=og_copy(b,n,valid)
70 gv_check("malformed line retains UNKNOWN beside valid row" as *u8,to_scan(b,n,0,n,1,rows,OG_ROWS,row,st) == TO_STATUS_UNKNOWN && st[8] == 1 && st[7] == 1 && st[6] == 2,ctr)
71 let real: *u8=sys_mmap(readcap); let again: *u8=sys_mmap(readcap)
72 let realrows: *i64=sys_mmap(rowcap*TO_ROW_SLOTS*TO_WORD_BYTES) as *i64
73 if (real as i64) <= 0 || (again as i64) <= 0 || (realrows as i64) <= 0 { return 3 }
74 let rc: i64=to_read(argv[1] as *u8,0,readcap,real,realrows,rowcap,row,st)
75 let first_size: i64=st[2]; let count: i64=st[7]
76 gv_check("actual retained journal fully read with timing evidence" as *u8,rc == TO_STATUS_OK && st[7] > 0 && st[8] == 0 && st[3] == st[2],ctr)
77 gv_puts("actual_journal=" as *u8); gv_puts(argv[1] as *u8); gv_puts(" bytes=" as *u8); gv_num(first_size); gv_puts(" observations=" as *u8); gv_num(count); gv_puts("\n" as *u8)
78 to_read(argv[1] as *u8,0,readcap,again,realrows,rowcap,row,st)
79 var same: i64=1; if first_size < 0 || first_size > readcap || st[2] != first_size || st[3] != first_size { same=0 }
80 var j: i64=0; while same == 1 && j < first_size { if real[j] != again[j] { same=0 }; j=j+1 }
81 gv_check("actual retained input byte-identical after read" as *u8,same,ctr)
82 gv_check("actual read capacity one refuses partial record" as *u8,to_read(argv[1] as *u8,0,1,again,realrows,rowcap,row,st) == TO_STATUS_WINDOW && st[7] == 0,ctr)
83 gv_check("actual offset beyond initial size refused" as *u8,to_read(argv[1] as *u8,first_size+1,readcap,again,realrows,rowcap,row,st) == TO_STATUS_INPUT,ctr)
84 gv_check("missing proc source cannot become empty COMPLETE" as *u8,to_read("/proc/self/nishi-no-such-timing-journal" as *u8,0,readcap,again,realrows,rowcap,row,st) == TO_STATUS_UNKNOWN && st[1] < 0,ctr)
85 return gv_verdict("TOOL-OBSERVATIONS" as *u8,ctr,"read-only parser/window gate; actual CLI JSON and no legacy side effects require staged subject capture" as *u8)
86}