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}