code wiki / _hdl_build / nx_tpl_ingest_gate.nx

nx_tpl_ingest_gate.nx source

↩ module page · 110 lines · 6360 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" 10import "nx_gate_verdict.nx" 11 12func gg_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 13func gg_find(hay: *u8, needle: *u8) -> i64 { 14 let hn: i64 = gg_slen(hay); let nl: i64 = gg_slen(needle) 15 if nl==0 { return 0 } 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]!=needle[j] { ok=0; j=nl } else { j=j+1 } } if ok==1 { return i } i=i+1 } 18 return 0-1 19} 20func 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 } 21 22func main() -> i64 { 23 let szp: *i64 = sys_mmap(16) as *i64 24 let land: *u8 = sys_read_file("web_assets/_tpl_seed/landing.html" as *u8, szp); let ln: i64 = szp[0] 25 let land2: *u8 = sys_read_file("web_assets/_tpl_seed/landing2.html" as *u8, szp); let l2: i64 = szp[0] 26 let shop: *u8 = sys_read_file("web_assets/_tpl_seed/shop.html" as *u8, szp); let shn: i64 = szp[0] 27 let res: *u8 = sys_read_file("web_assets/_tpl_seed/resume.html" as *u8, szp); let rsn: i64 = szp[0] 28 29 // classify + section-sequence + dedup key for each fixture (pure functions) 30 let sa: *u8 = sys_mmap(256); let sb: *u8 = sys_mmap(256); let sc: *u8 = sys_mmap(256); let sd: *u8 = sys_mmap(256) 31 ti_seq(land, ln, sa); ti_seq(shop, shn, sb); ti_seq(res, rsn, sc); ti_seq(land2, l2, sd) 32 let ca: i64 = ti_classify(land, ln) 33 let cb: i64 = ti_classify(shop, shn) 34 let cc: i64 = ti_classify(res, rsn) 35 let cd: i64 = ti_classify(land2, l2) 36 let ka: *u8 = sys_mmap(64); let kb: *u8 = sys_mmap(64); let kc: *u8 = sys_mmap(64); let kd: *u8 = sys_mmap(64) 37 ti_mkkey(ca, sa, ka); ti_mkkey(cb, sb, kb); ti_mkkey(cc, sc, kc); ti_mkkey(cd, sd, kd) 38 39 // T1: structural dedup key -- near-dup (landing2) collapses to landing; the 3 archetypes stay distinct 40 var t1: i64=0 41 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 } } } } 42 // T2: archetype classification correct (1=landing 2=ecommerce 5=resume) 43 var t2: i64=0 44 if ca==1 { if cb==2 { if cc==5 { t2=1 } } } 45 // T3: section-sequence is ORDERED (hero before footer) and carries the cta flow-signal 46 var t3: i64=0 47 let hoff: i64 = gg_find(sa, "hero" as *u8) 48 let foff: i64 = gg_find(sa, "ft" as *u8) 49 let coff: i64 = gg_find(sa, "cta" as *u8) 50 if hoff>=0 { if foff>hoff { if coff>=0 { t3=1 } } } 51 52 // T4: STORE write -- ingest the seed dir into a fresh corpus; near-dup collapses, junk skipped, segment committed 53 let c1: *i64 = sys_mmap(64) as *i64 54 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_gate/" as *u8, 5000, 67108864, c1) 55 var t4: i64=0 56 if c1[0]==3 { if c1[1]==1 { if c1[5]==0 { if c1[3]>=1 { t4=1 } } } } 57 let junkskip: i64 = c1[2] 58 59 // T5: RE-RUN is idempotent/resumable -- everything already present -> 0 new, 4 dups (cross-run dedup) 60 let c2: *i64 = sys_mmap(64) as *i64 61 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_gate/" as *u8, 5000, 67108864, c2) 62 var t5: i64=0 63 if c2[0]==0 { if c2[1]==4 { t5=1 } } 64 65 // T6 (NEG CONTROL): budget ceiling of 1 template -> fail-fast TRAP fires, nothing runs unbounded 66 let c3: *i64 = sys_mmap(64) as *i64 67 ti_run("web_assets/_tpl_seed" as *u8, "/tmp/tplcorpus_gate2/" as *u8, 1, 67108864, c3) 68 var t6: i64=0 69 if c3[5]==1 { if c3[0]<=1 { if c3[4]==1 { t6=1 } } } 70 71 // N7 (NEG CONTROL): the non-template junk file was skipped, never stored as a bogus pattern 72 var n7: i64=0; if junkskip>=1 { n7=1 } 73 74 var passes: i64=0 75 if t1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 } if t4==1 { passes=passes+1 } 76 if t5==1 { passes=passes+1 } if t6==1 { passes=passes+1 } if n7==1 { passes=passes+1 } 77 var green: i64=0; if passes==7 { green=1 } 78 79 gw("=== nx_tpl_ingest_gate -- R4 template pattern-corpus extractor ===\n" as *u8) 80 gg_row("T1-structural-dedup-collapse " as *u8, t1) 81 gg_row("T2-archetype-classification " as *u8, t2) 82 gg_row("T3-ordered-section-sequence " as *u8, t3) 83 gg_row("T4-store-ingest+dedup+commit " as *u8, t4) 84 gg_row("T5-idempotent-resumable-rerun " as *u8, t5) 85 gg_row("T6-budget-trap-firefast(neg) " as *u8, t6) 86 gg_row("N7-junk-file-skipped(neg) " as *u8, n7) 87 gw("verdict=" as *u8); if green==1 { gw("GREEN" as *u8) } else { gw("RED" as *u8) } 88 gw(" passes=" as *u8); gn(passes); gw("/7 stored=" as *u8); gn(c1[0]); gw(" dups=" as *u8); gn(c1[1]) 89 gw(" skipped=" as *u8); gn(c1[2]); gw(" segs=" as *u8); gn(c1[3]); gw("\n" as *u8) 90 // seq samples (evidence, not a claim) 91 gw(" seq(landing)=" as *u8); gw(sa); gw("\n" as *u8) 92 gw(" seq(shop)=" as *u8); gw(sb); gw("\n" as *u8) 93 gw(" seq(resume)=" as *u8); gw(sc); gw("\n" as *u8) 94 95 let lg: i64 = sys_openat_append("knowledge/status/tpl_ingest.log" as *u8, 0x1a4) 96 if lg >= 0 { 97 if green==1 { let m: *u8 = "TPL-INGEST rows=7 pass=7 verdict=GREEN\n" as *u8; sys_write(lg, m, 39) } 98 else { let m2: *u8 = "TPL-INGEST verdict=RED\n" as *u8; sys_write(lg, m2, 23) } 99 sys_close(lg) 100 } 101 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 102 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 103 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 104 let ctr__dry: *i64 = gv_ctr() 105 ctr__dry[0] = green 106 ctr__dry[1] = 1 107 let rc__dry: i64 = gv_verdict("TPL-INGEST-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 108 sys_exit(rc__dry) 109 return rc__dry 110}