code wiki / _hdl_build / nx_brick_compose_gate.nx
nx_brick_compose_gate.nx source
↩ module page · 83 lines · 3932 B
1// nx_brick_compose_gate.nx -- referee for R-BRICKS-COMPOSE (sa_brick_n + the SA_GRIDN hook): consumed part:
2// bricks drive grid richness in corpus-driven composition. Wrapper pre-authored fixtures + ran nx_tpl_parts.elf:
3// /tmp/brickstore/ <- a gallery brick with 4 headings (from a 4-item template)
4// /tmp/brickstore2/ <- a gallery brick with 9 headings (clamp case)
5// Proves: median derivation, brick-driven card count in the composed page, default fallback with no store,
6// clamp at 6, and no-bricks-of-kind -> 0 (fixed sections unaffected). GREEN iff 5/5.
7// license_tier: ORIGINAL expect_exit: 0
8import "nx_gate.nx"
9import "nx_site_archetype.nx"
10
11func bg_count(hay: *u8, hn: i64, needle: *u8) -> i64 {
12 if (hay as i64)==0 { return 0 }
13 var nl: i64=0; while needle[nl]!=(0 as u8){nl=nl+1}
14 if nl==0 { return 0 }
15 var c: i64=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] as i64)!=(needle[j] as i64) { ok=0; j=nl } else { j=j+1 } } if ok==1 { c=c+1; i=i+nl } else { i=i+1 } }
18 return c
19}
20func bg_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 buf: *u8 = sys_mmap(262144)
24 // T1: median heads of the 4-heading gallery brick
25 let h1: *i64 = ss_open("/tmp/brickstore/" as *u8)
26 var t1: i64=0
27 if (h1 as i64)!=0 {
28 SA_STOREH = h1 as i64
29 if sa_brick_n("gal" as *u8) == 4 { t1=1 }
30 }
31 // T2: the composed seq page's gallery grid has EXACTLY 4 cards (brick-driven)
32 var t2: i64=0
33 if (h1 as i64)!=0 {
34 SA_STOREH = h1 as i64
35 let o: i64 = sa_recipe_seq(1, "gal" as *u8, 0, "Nishi" as *u8, "brick test" as *u8, buf)
36 if bg_count(buf, o, "<article class=\"card\"" as *u8) == 4 { t2=1 }
37 }
38 // T3: default fallback -- no store -> 6 cards
39 SA_STOREH = 0
40 let o3: i64 = sa_recipe_seq(1, "gal" as *u8, 0, "Nishi" as *u8, "brick test" as *u8, buf)
41 var t3: i64=0
42 if bg_count(buf, o3, "<article class=\"card\"" as *u8) == 6 { if sa_brick_n("gal" as *u8) == 0 { t3=1 } }
43 // T4: clamp -- the 9-heading brick clamps to 6
44 let h2: *i64 = ss_open("/tmp/brickstore2/" as *u8)
45 var t4: i64=0
46 if (h2 as i64)!=0 {
47 SA_STOREH = h2 as i64
48 if sa_brick_n("gal" as *u8) == 6 { t4=1 }
49 }
50 // T5 (NEG): no bricks of a kind -> 0, and fixed sections stay fixed (faq emits exactly 3 cards)
51 var t5: i64=0
52 if (h1 as i64)!=0 {
53 SA_STOREH = h1 as i64
54 if sa_brick_n("faq" as *u8) == 0 {
55 let o5: i64 = sa_recipe_seq(1, "faq" as *u8, 0, "Nishi" as *u8, "brick test" as *u8, buf)
56 if bg_count(buf, o5, "<article class=\"card\"" as *u8) == 3 { t5=1 }
57 }
58 }
59 SA_STOREH = 0
60
61 var passes: i64=0
62 if t1==1 { passes=passes+1 } if t2==1 { passes=passes+1 } if t3==1 { passes=passes+1 }
63 if t4==1 { passes=passes+1 } if t5==1 { passes=passes+1 }
64 var green: i64=0; if passes==5 { green=1 }
65
66 gw("=== nx_brick_compose_gate -- R-BRICKS consumed bricks drive section richness ===\n" as *u8)
67 bg_row("T1-brick-median-derived " as *u8, t1)
68 bg_row("T2-grid-count-brick-driven " as *u8, t2)
69 bg_row("T3-default-6-without-store " as *u8, t3)
70 bg_row("T4-clamped-at-6 " as *u8, t4)
71 bg_row("T5-no-kind-bricks-fixed-3(neg) " as *u8, t5)
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("/5\n" as *u8)
74
75 let lg: i64 = sys_openat_append("knowledge/status/brick_compose.log" as *u8, 0x1a4)
76 if lg >= 0 {
77 if green==1 { let m: *u8 = "BRICK-COMPOSE rows=5 pass=5 verdict=GREEN\n" as *u8; sys_write(lg, m, 42) }
78 else { let m2: *u8 = "BRICK-COMPOSE verdict=RED\n" as *u8; sys_write(lg, m2, 26) }
79 sys_close(lg)
80 }
81 if green==1 { return 0 }
82 return 1
83}