code wiki / _hdl_build / nx_tpl_site_gate.nx
nx_tpl_site_gate.nx source
↩ module page · 91 lines · 5020 B
1// nx_tpl_site_gate.nx -- referee for R-WHOLESITE (nx_tpl_site). Fixture = the REAL emitted andelinwest site
2// (web_assets/sites/andelinwest: index + 4 practice pages + shared nav, produced by nx_site_build R1). Proves:
3// a complete multi-page site collapses to ONE content-addressed site-graph record (pages + archetypes + seqs +
4// NAV EDGES incl subdir pages), idempotent re-run, budget trap fires, and an empty dir stores nothing (no
5// fabricated site). GREEN iff 7/7. Wrapper pre-cleans /tmp/sitecorpus_gate{,2} + /tmp/empty_site.
6// license_tier: ORIGINAL expect_exit: 0
7import "nx_gate.nx"
8import "nx_tpl_site.nx"
9import "nx_gate_verdict.nx"
10
11func sg2_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
12func sg2_has(hay: *u8, hn: i64, needle: *u8) -> i64 {
13 if (hay as i64)==0 { return 0 }
14 let nl: i64 = sg2_slen(needle)
15 if nl==0 { return 1 }
16 var i: i64=0
17 while i+nl<=hn { var j: i64=0; var ok: i64=1; while j<nl { if (hay[i+j] as i64)!=(needle[j] as i64) { ok=0; j=nl } else { j=j+1 } } if ok==1 { return 1 } i=i+1 }
18 return 0
19}
20func sg2_row(name: *u8, ok: i64) -> i64 { gw(" " as *u8); gw(name); if ok==1 { gw(" PASS\n" as *u8) } else { gw(" FAIL\n" as *u8) } return 0 }
21
22func main() -> i64 {
23 let c1: *i64 = sys_mmap(64) as *i64
24 let key1: *u8 = sys_mmap(64)
25 ts_ingest("web_assets/sites/andelinwest" as *u8, "/tmp/sitecorpus_gate/" as *u8, 64, c1, key1)
26 // T1: one site-graph record stored, 5 pages seen
27 var t1: i64=0; if c1[0]==1 { if c1[2]==5 { t1=1 } }
28 // T2: nav edges discovered (index -> practice pages + sibling crosslinks)
29 var t2: i64=0; if c1[3] >= 4 { t2=1 }
30 // read the record back by its key
31 let hh: *i64 = ss_open("/tmp/sitecorpus_gate/" as *u8)
32 let pbox: *i64 = sys_mmap(16) as *i64
33 let lbox: *i64 = sys_mmap(16) as *i64
34 var t3: i64=0
35 var t4: i64=0
36 if (hh as i64)!=0 { if ss_hget(hh, key1, pbox, lbox)==1 {
37 let rp: *u8 = pbox[0] as *u8
38 let rl: i64 = lbox[0]
39 // T3: SUBDIR page captured in the graph
40 if sg2_has(rp, rl, "page|practice/family-law.html|" as *u8)==1 { t3=1 }
41 // T4: a nav edge from index into the practice section recorded
42 if sg2_has(rp, rl, "nav|index.html|practice/" as *u8)==1 { t4=1 }
43 } }
44 // T5: idempotent re-run -> dup, nothing stored
45 let c2: *i64 = sys_mmap(64) as *i64
46 let key2: *u8 = sys_mmap(64)
47 ts_ingest("web_assets/sites/andelinwest" as *u8, "/tmp/sitecorpus_gate/" as *u8, 64, c2, key2)
48 var t5: i64=0; if c2[0]==0 { if c2[1]==1 { t5=1 } }
49 // T6 (NEG): budget trap on a fresh store (max_pages=2)
50 let c3: *i64 = sys_mmap(64) as *i64
51 let key3: *u8 = sys_mmap(64)
52 ts_ingest("web_assets/sites/andelinwest" as *u8, "/tmp/sitecorpus_gate2/" as *u8, 2, c3, key3)
53 var t6: i64=0; if c3[4]==1 { if c3[2]<=2 { t6=1 } }
54 // T7 (NEG): empty dir -> nothing stored, no fabricated site
55 let c4: *i64 = sys_mmap(64) as *i64
56 let key4: *u8 = sys_mmap(64)
57 let rc4: i64 = ts_ingest("/tmp/empty_site" as *u8, "/tmp/sitecorpus_gate2/" as *u8, 64, c4, key4)
58 var t7: i64=0; if rc4==0 { if c4[0]==0 { t7=1 } }
59
60 var passes: i64=0
61 if t1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 }
62 if t4==1 { passes=passes+1 } if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 } if t7==1 { passes=passes+1 }
63 var green: i64=0; if passes==7 { green=1 }
64
65 gw("=== nx_tpl_site_gate -- R-WHOLESITE complete-template (site-graph) ingest ===\n" as *u8)
66 sg2_row("T1-site-record-stored-5pages " as *u8, t1)
67 sg2_row("T2-nav-edges-discovered " as *u8, t2)
68 sg2_row("T3-subdir-page-in-graph " as *u8, t3)
69 sg2_row("T4-index-to-practice-edge " as *u8, t4)
70 sg2_row("T5-idempotent-rerun " as *u8, t5)
71 sg2_row("T6-budget-trap-firefast(neg) " as *u8, t6)
72 sg2_row("T7-empty-dir-no-fabrication(neg)" as *u8, t7)
73 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) }
74 gw(" passes=" as *u8); gn(passes); gw("/7 pages=" as *u8); gn(c1[2]); gw(" edges=" as *u8); gn(c1[3]); gw("\n" as *u8)
75
76 let lg: i64 = sys_openat_append("knowledge/status/tpl_site.log" as *u8, 0x1a4)
77 if lg >= 0 {
78 if green==1 { let m: *u8 = "TPL-SITE rows=7 pass=7 verdict=GREEN\n" as *u8; sys_write(lg, m, 37) }
79 else { let m2: *u8 = "TPL-SITE verdict=RED\n" as *u8; sys_write(lg, m2, 21) }
80 sys_close(lg)
81 }
82 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
83 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
84 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
85 let ctr__dry: *i64 = gv_ctr()
86 ctr__dry[0] = green
87 ctr__dry[1] = 1
88 let rc__dry: i64 = gv_verdict("TPL-SITE-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8)
89 sys_exit(rc__dry)
90 return rc__dry
91}