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}