code wiki / _hdl_build / nx_uiq_sentinel_gate.nx
nx_uiq_sentinel_gate.nx source
↩ module page · 78 lines · 4317 B
1// nx_uiq_sentinel_gate.nx -- D001 gate for the F106c sentinel (gv-verdict anchored).
2// Proves each classification DISCRIMINATELY on kat fixtures: baseline rows exact, clean run all-zero,
3// a console regression with ZERO structural change (dup id) flags regressed-not-drift, a structural
4// change with ZERO console change flags drift, and a ghost manifest row flags missing.
5// license_tier: ORIGINAL expect_exit: 0
6import "nx_uiq_sentinel_lib.nx"
7import "nx_gate_verdict.nx"
8
9func main() -> i64 {
10 let ctr: *i64 = gv_ctr()
11 gv_head("nx_uiq_sentinel_gate -- zero-Claude console+atree sentinel (F106c): classification oracle" as *u8)
12 let a0: *u8 = "<nav><a href=\"/x\">X</a></nav><main><h1 id=\"m\">T</h1></main>" as *u8
13 let b0: *u8 = "<main id=\"q\"><h1>B</h1></main>" as *u8
14 let a0l: i64 = cs_len(a0)
15 let b0l: i64 = cs_len(b0)
16 us_write("uiqsentkat_a.html" as *u8, a0, a0l)
17 us_write("uiqsentkat_b.html" as *u8, b0, b0l)
18 let lst: *u8 = "uiqsentkat_a.html\nuiqsentkat_b.html\n" as *u8
19 let lstl: i64 = cs_len(lst)
20 us_write("uiqsentkat_list.txt" as *u8, lst, lstl)
21 let bl: i64 = us_baseline("." as *u8, "uiqsentkat-" as *u8, "uiqsentkat_list.txt" as *u8, 0)
22 var t1: i64=0
23 if bl==2 { t1=1 }
24 gv_check("T1 baseline over 2-page listfile -> 2 rows + copies" as *u8, t1, ctr)
25 let out: *i64 = sys_mmap(64) as *i64
26 us_check("." as *u8, "uiqsentkat-" as *u8, out, 0, 0)
27 var t2: i64=0
28 if out[0]==2 { if out[1]==0 { if out[2]==0 { if out[3]==0 { t2=1 } } } }
29 gv_check("T2 unchanged pages -> CLEAN (0 missing 0 regressed 0 drift)" as *u8, t2, ctr)
30 let b1: *u8 = "<main id=\"q\"><h1 id=\"q\">B</h1></main>" as *u8
31 let b1l: i64 = cs_len(b1)
32 us_write("uiqsentkat_b.html" as *u8, b1, b1l)
33 us_check("." as *u8, "uiqsentkat-" as *u8, out, 0, 0)
34 var t3: i64=0
35 if out[2]==1 { if out[3]==0 { t3=1 } }
36 gv_check("T3 dup-id injected -> console-regressed WITHOUT struct drift" as *u8, t3, ctr)
37 let a1: *u8 = "<nav><a href=\"/x\">X</a></nav><main><h1 id=\"m\">T</h1></main><footer></footer>" as *u8
38 let a1l: i64 = cs_len(a1)
39 us_write("uiqsentkat_a.html" as *u8, a1, a1l)
40 us_check("." as *u8, "uiqsentkat-" as *u8, out, 0, 0)
41 var t4: i64=0
42 if out[3]==1 { if out[2]==1 { t4=1 } }
43 gv_check("T4 footer appended -> struct-drift (ted=1), console unchanged on that page" as *u8, t4, ctr)
44 let mf2: *u8 = sys_mmap(65536)
45 let mn2: i64 = cs_slurp("uiqsentkat-manifest.txt" as *u8, mf2, 65536)
46 var t5: i64=0
47 if mn2>0 {
48 let gh: *u8 = "uiqsentkat_ghost.html\t0\t0\t1\n" as *u8
49 var go: i64 = mn2
50 var gk: i64 = 0
51 while gh[gk]!=(0 as u8) { mf2[go]=gh[gk]; go=go+1; gk=gk+1 }
52 us_write("uiqsentkat-manifest.txt" as *u8, mf2, go)
53 us_check("." as *u8, "uiqsentkat-" as *u8, out, 0, 0)
54 if out[1]==1 { t5=1 }
55 }
56 gv_check("T5 ghost manifest row -> missing=1 (verdict REGRESSED path)" as *u8, t5, ctr)
57 let sf: i64 = us_selftest()
58 var t6: i64=0
59 if sf==0 { t6=1 }
60 gv_check("T6 embedded selftest (the CLI --kat contract) 0 fails" as *u8, t6, ctr)
61 // T7: the JSON API endpoint emit is well-formed + carries the verdict (write to a kat path, read back)
62 let ka: *u8 = "<main id=\"q\"><h1>A</h1></main>" as *u8
63 us_write("uiqsentkat_a.html" as *u8, ka, cs_len(ka))
64 let jlst: *u8 = "uiqsentkat_a.html\n" as *u8
65 us_write("uiqsentkat_list.txt" as *u8, jlst, cs_len(jlst))
66 us_baseline("." as *u8, "uiqsentkat-" as *u8, "uiqsentkat_list.txt" as *u8, 0)
67 let jo: *i64 = sys_mmap(64) as *i64
68 us_check("." as *u8, "uiqsentkat-" as *u8, jo, 0, 0)
69 let wj: i64 = us_emit_json("uiqsentkat.json" as *u8, 1784857200, 0, jo)
70 let jbuf: *u8 = sys_mmap(2048)
71 let jn: i64 = cs_slurp("uiqsentkat.json" as *u8, jbuf, 2047)
72 var t7: i64=0
73 if wj==1 { if jn>0 { if cs_find_from(jbuf, jn, 0, "\"organ\":\"nx_uiq_sentinel\"" as *u8)>=0 { if cs_find_from(jbuf, jn, 0, "\"verdict\":\"CLEAN\"" as *u8)>=0 { t7=1 } } } }
74 gv_check("T7 JSON API endpoint emit well-formed + verdict present (experiential.json)" as *u8, t7, ctr)
75 let rc: i64 = gv_verdict("UIQ-SENTINEL-GATE" as *u8, ctr, "F106c sentinel: baseline+check lifecycle, regressed/drift/missing each proven discriminately" as *u8)
76 sys_exit(rc)
77 return rc
78}