code wiki / _hdl_build / nx_tpl_ingest_gate.nx

nx_tpl_ingest_gate.nx source

↩ module page · 102 lines · 5822 B

1// nx_tpl_ingest_gate.nx -- referee for R4 (nx_tpl_ingest). Proves the pattern-corpus extractor consumes 2// template STRUCTURE (not files) into a content-addressed, deduped corpus, classifies archetypes, extracts 3// the ordered section-sequence, and is BUDGET-GUARDED (fail-fast) + resumable. Positive tests + negative 4// controls (structural dedup collapse, budget-trap fires, junk skipped). GREEN iff 7/7. 5// Fixtures: web_assets/_tpl_seed/{landing,landing2(near-dup),shop(ecom),resume,junk}.html 6// The build wrapper cleans + creates /tmp/tplcorpus_gate and /tmp/tplcorpus_gate2 before the run. 7// license_tier: ORIGINAL expect_exit: 0 8import "nx_gate.nx" 9import "nx_tpl_ingest.nx" 10 11func gg_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 12func gg_find(hay: *u8, needle: *u8) -> i64 { 13 let hn: i64 = gg_slen(hay); let nl: i64 = gg_slen(needle) 14 if nl==0 { return 0 } 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]!=needle[j] { ok=0; j=nl } else { j=j+1 } } if ok==1 { return i } i=i+1 } 17 return 0-1 18} 19func gg_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 szp: *i64 = sys_mmap(16) as *i64 23 let land: *u8 = sys_read_file("web_assets/_tpl_seed/landing.html" as *u8, szp); let ln: i64 = szp[0] 24 let land2: *u8 = sys_read_file("web_assets/_tpl_seed/landing2.html" as *u8, szp); let l2: i64 = szp[0] 25 let shop: *u8 = sys_read_file("web_assets/_tpl_seed/shop.html" as *u8, szp); let shn: i64 = szp[0] 26 let res: *u8 = sys_read_file("web_assets/_tpl_seed/resume.html" as *u8, szp); let rsn: i64 = szp[0] 27 28 // classify + section-sequence + dedup key for each fixture (pure functions) 29 let sa: *u8 = sys_mmap(256); let sb: *u8 = sys_mmap(256); let sc: *u8 = sys_mmap(256); let sd: *u8 = sys_mmap(256) 30 ti_seq(land, ln, sa); ti_seq(shop, shn, sb); ti_seq(res, rsn, sc); ti_seq(land2, l2, sd) 31 let ca: i64 = ti_classify(land, ln) 32 let cb: i64 = ti_classify(shop, shn) 33 let cc: i64 = ti_classify(res, rsn) 34 let cd: i64 = ti_classify(land2, l2) 35 let ka: *u8 = sys_mmap(64); let kb: *u8 = sys_mmap(64); let kc: *u8 = sys_mmap(64); let kd: *u8 = sys_mmap(64) 36 ti_mkkey(ca, sa, ka); ti_mkkey(cb, sb, kb); ti_mkkey(cc, sc, kc); ti_mkkey(cd, sd, kd) 37 38 // T1: structural dedup key -- near-dup (landing2) collapses to landing; the 3 archetypes stay distinct 39 var t1: i64=0 40 if ti_streq(ka, kd)==1 { if ti_streq(ka, kb)==0 { if ti_streq(ka, kc)==0 { if ti_streq(kb, kc)==0 { t1=1 } } } } 41 // T2: archetype classification correct (1=landing 2=ecommerce 5=resume) 42 var t2: i64=0 43 if ca==1 { if cb==2 { if cc==5 { t2=1 } } } 44 // T3: section-sequence is ORDERED (hero before footer) and carries the cta flow-signal 45 var t3: i64=0 46 let hoff: i64 = gg_find(sa, "hero" as *u8) 47 let foff: i64 = gg_find(sa, "ft" as *u8) 48 let coff: i64 = gg_find(sa, "cta" as *u8) 49 if hoff>=0 { if foff>hoff { if coff>=0 { t3=1 } } } 50 51 // T4: STORE write -- ingest the seed dir into a fresh corpus; near-dup collapses, junk skipped, segment committed 52 let c1: *i64 = sys_mmap(64) as *i64 53 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_gate/" as *u8, 5000, 67108864, c1) 54 var t4: i64=0 55 if c1[0]==3 { if c1[1]==1 { if c1[5]==0 { if c1[3]>=1 { t4=1 } } } } 56 let junkskip: i64 = c1[2] 57 58 // T5: RE-RUN is idempotent/resumable -- everything already present -> 0 new, 4 dups (cross-run dedup) 59 let c2: *i64 = sys_mmap(64) as *i64 60 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_gate/" as *u8, 5000, 67108864, c2) 61 var t5: i64=0 62 if c2[0]==0 { if c2[1]==4 { t5=1 } } 63 64 // T6 (NEG CONTROL): budget ceiling of 1 template -> fail-fast TRAP fires, nothing runs unbounded 65 let c3: *i64 = sys_mmap(64) as *i64 66 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_gate2/" as *u8, 1, 67108864, c3) 67 var t6: i64=0 68 if c3[5]==1 { if c3[0]<=1 { if c3[4]==1 { t6=1 } } } 69 70 // N7 (NEG CONTROL): the non-template junk file was skipped, never stored as a bogus pattern 71 var n7: i64=0; if junkskip>=1 { n7=1 } 72 73 var passes: i64=0 74 if t1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 } if t4==1 { passes=passes+1 } 75 if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 } if n7==1 { passes=passes+1 } 76 var green: i64=0; if passes==7 { green=1 } 77 78 gw("=== nx_tpl_ingest_gate -- R4 template pattern-corpus extractor ===\n" as *u8) 79 gg_row("T1-structural-dedup-collapse " as *u8, t1) 80 gg_row("T2-archetype-classification " as *u8, t2) 81 gg_row("T3-ordered-section-sequence " as *u8, t3) 82 gg_row("T4-store-ingest+dedup+commit " as *u8, t4) 83 gg_row("T5-idempotent-resumable-rerun " as *u8, t5) 84 gg_row("T6-budget-trap-firefast(neg) " as *u8, t6) 85 gg_row("N7-junk-file-skipped(neg) " as *u8, n7) 86 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) } 87 gw(" passes=" as *u8); gn(passes); gw("/7 stored=" as *u8); gn(c1[0]); gw(" dups=" as *u8); gn(c1[1]) 88 gw(" skipped=" as *u8); gn(c1[2]); gw(" segs=" as *u8); gn(c1[3]); gw("\n" as *u8) 89 // seq samples (evidence, not a claim) 90 gw(" seq(landing)=" as *u8); gw(sa); gw("\n" as *u8) 91 gw(" seq(shop)=" as *u8); gw(sb); gw("\n" as *u8) 92 gw(" seq(resume)=" as *u8); gw(sc); gw("\n" as *u8) 93 94 let lg: i64 = sys_openat_append("knowledge/status/tpl_ingest.log" as *u8, 0x1a4) 95 if lg >= 0 { 96 if green==1 { let m: *u8 = "TPL-INGEST rows=7 pass=7 verdict=GREEN\n" as *u8; sys_write(lg, m, 39) } 97 else { let m2: *u8 = "TPL-INGEST verdict=RED\n" as *u8; sys_write(lg, m2, 23) } 98 sys_close(lg) 99 } 100 if green==1 { return 0 } 101 return 1 102}