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}