code wiki / _hdl_build / nx_tpl_site_gate.nx
nx_tpl_site_gate.nx source
↩ module page · 83 lines · 4484 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"
9
10func sg2_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
11func sg2_has(hay: *u8, hn: i64, needle: *u8) -> i64 {
12 if (hay as i64)==0 { return 0 }
13 let nl: i64 = sg2_slen(needle)
14 if nl==0 { return 1 }
15 var i: i64=0
16 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 }
17 return 0
18}
19func 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 }
20
21func main() -> i64 {
22 let c1: *i64 = sys_mmap(64) as *i64
23 let key1: *u8 = sys_mmap(64)
24 ts_ingest("web_assets/sites/andelinwest" as *u8, "/tmp/sitecorpus_gate/" as *u8, 64, c1, key1)
25 // T1: one site-graph record stored, 5 pages seen
26 var t1: i64=0; if c1[0]==1 { if c1[2]==5 { t1=1 } }
27 // T2: nav edges discovered (index -> practice pages + sibling crosslinks)
28 var t2: i64=0; if c1[3] >= 4 { t2=1 }
29 // read the record back by its key
30 let hh: *i64 = ss_open("/tmp/sitecorpus_gate/" as *u8)
31 let pbox: *i64 = sys_mmap(16) as *i64
32 let lbox: *i64 = sys_mmap(16) as *i64
33 var t3: i64=0
34 var t4: i64=0
35 if (hh as i64)!=0 { if ss_hget(hh, key1, pbox, lbox)==1 {
36 let rp: *u8 = pbox[0] as *u8
37 let rl: i64 = lbox[0]
38 // T3: SUBDIR page captured in the graph
39 if sg2_has(rp, rl, "page|practice/family-law.html|" as *u8)==1 { t3=1 }
40 // T4: a nav edge from index into the practice section recorded
41 if sg2_has(rp, rl, "nav|index.html|practice/" as *u8)==1 { t4=1 }
42 } }
43 // T5: idempotent re-run -> dup, nothing stored
44 let c2: *i64 = sys_mmap(64) as *i64
45 let key2: *u8 = sys_mmap(64)
46 ts_ingest("web_assets/sites/andelinwest" as *u8, "/tmp/sitecorpus_gate/" as *u8, 64, c2, key2)
47 var t5: i64=0; if c2[0]==0 { if c2[1]==1 { t5=1 } }
48 // T6 (NEG): budget trap on a fresh store (max_pages=2)
49 let c3: *i64 = sys_mmap(64) as *i64
50 let key3: *u8 = sys_mmap(64)
51 ts_ingest("web_assets/sites/andelinwest" as *u8, "/tmp/sitecorpus_gate2/" as *u8, 2, c3, key3)
52 var t6: i64=0; if c3[4]==1 { if c3[2]<=2 { t6=1 } }
53 // T7 (NEG): empty dir -> nothing stored, no fabricated site
54 let c4: *i64 = sys_mmap(64) as *i64
55 let key4: *u8 = sys_mmap(64)
56 let rc4: i64 = ts_ingest("/tmp/empty_site" as *u8, "/tmp/sitecorpus_gate2/" as *u8, 64, c4, key4)
57 var t7: i64=0; if rc4==0 { if c4[0]==0 { t7=1 } }
58
59 var passes: i64=0
60 if t1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 }
61 if t4==1 { passes=passes+1 } if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 } if t7==1 { passes=passes+1 }
62 var green: i64=0; if passes==7 { green=1 }
63
64 gw("=== nx_tpl_site_gate -- R-WHOLESITE complete-template (site-graph) ingest ===\n" as *u8)
65 sg2_row("T1-site-record-stored-5pages " as *u8, t1)
66 sg2_row("T2-nav-edges-discovered " as *u8, t2)
67 sg2_row("T3-subdir-page-in-graph " as *u8, t3)
68 sg2_row("T4-index-to-practice-edge " as *u8, t4)
69 sg2_row("T5-idempotent-rerun " as *u8, t5)
70 sg2_row("T6-budget-trap-firefast(neg) " as *u8, t6)
71 sg2_row("T7-empty-dir-no-fabrication(neg)" as *u8, t7)
72 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) }
73 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)
74
75 let lg: i64 = sys_openat_append("knowledge/status/tpl_site.log" as *u8, 0x1a4)
76 if lg >= 0 {
77 if green==1 { let m: *u8 = "TPL-SITE rows=7 pass=7 verdict=GREEN\n" as *u8; sys_write(lg, m, 37) }
78 else { let m2: *u8 = "TPL-SITE verdict=RED\n" as *u8; sys_write(lg, m2, 21) }
79 sys_close(lg)
80 }
81 if green==1 { return 0 }
82 return 1
83}