code wiki / _hdl_build / nx_wflow_tpl_gate.nx
nx_wflow_tpl_gate.nx source
↩ module page · 89 lines · 3725 B
1// nx_wflow_tpl_gate.nx -- R13 TEMPLATE GALLERY gate: gallery = <dir>/index (name|description) + per-name
2// .flows/.steps pairs. LIST prints every row with file-existence + version and counts USABLE pairs;
3// INSTANTIATE is fail-closed to indexed templates, byte-copies both files, then validates the COPY whole
4// (a broken template never lands silently) and reports its version. Negatives: unknown name, indexed row
5// with missing files, missing gallery. ZERO forks. license_tier: ORIGINAL expect_exit: 0
6import "nx_wflow_engine.nx"
7
8func tg_has(path: *u8, needle: *u8) -> i64 {
9 let szp: *i64 = sys_mmap(8) as *i64
10 let b: *u8 = wf_readall(path, szp)
11 if (b as i64) == 0 { return 0 }
12 if szp[0] == 0 { return 0 }
13 return wf_lines_with2(b, szp[0], needle, needle)
14}
15
16func main() -> i64 {
17 p("=== NX-WFLOW-TPL GATE (R13: gallery index + instantiate fail-closed + validated copies) ===\n" as *u8)
18 var ok: i64 = 1
19 let now: i64 = wf_now()
20 let dir: *u8 = sys_mmap(128)
21 var dr: i64 = 0
22 dr = wf_cat(dir, dr, "/tmp/wftpl_" as *u8)
23 dr = wf_catn(dir, dr, now)
24 dir[dr] = 0 as u8
25 __syscall(83, dir as i64, 493, 0, 0, 0, 0)
26
27 let ip: *u8 = sys_mmap(512)
28 wf_tpl_index_path(dir, ip)
29 wf_append(ip, "good|A valid two-step template\n" as *u8)
30 wf_append(ip, "ghost|Indexed but its files are missing\n" as *u8)
31 let gf: *u8 = sys_mmap(512)
32 let gs: *u8 = sys_mmap(512)
33 wf_tpl_path(dir, "good" as *u8, ".flows" as *u8, gf)
34 wf_tpl_path(dir, "good" as *u8, ".steps" as *u8, gs)
35 wf_append(gf, "@version 1\n" as *u8)
36 wf_append(gf, "g1|go|-\n" as *u8)
37 wf_append(gs, "g1|1|notify|-|hi {name}|1\n" as *u8)
38
39 // T1 list: both rows printed, only the complete pair counts as usable
40 let c1: i64 = wf_tpl_list(dir)
41 p(" T1 usable=" as *u8); pn(c1); p("\n" as *u8)
42 if c1 != 1 { ok = 0 }
43
44 // T2 instantiate good -> dest copies byte-real, validated whole, version reported
45 let df: *u8 = sys_mmap(128)
46 var dfo: i64 = 0
47 dfo = wf_cat(df, dfo, "/tmp/wftpl_inst_" as *u8)
48 dfo = wf_catn(df, dfo, now)
49 dfo = wf_cat(df, dfo, ".flows" as *u8)
50 df[dfo] = 0 as u8
51 let dsp: *u8 = sys_mmap(128)
52 var dso: i64 = 0
53 dso = wf_cat(dsp, dso, "/tmp/wftpl_inst_" as *u8)
54 dso = wf_catn(dsp, dso, now)
55 dso = wf_cat(dsp, dso, ".steps" as *u8)
56 dsp[dso] = 0 as u8
57 let v: i64 = wf_tpl_instantiate(dir, "good" as *u8, df, dsp)
58 let hasFlow: i64 = tg_has(df, "g1|go|-" as *u8)
59 let hasStep: i64 = tg_has(dsp, "notify" as *u8)
60 p(" T2 instantiate ver=" as *u8); pn(v); p(" flowCopied=" as *u8); pn(hasFlow); p(" stepCopied=" as *u8); pn(hasStep); p("\n" as *u8)
61 if v != 1 { ok = 0 }
62 if hasFlow != 1 { ok = 0 }
63 if hasStep != 1 { ok = 0 }
64
65 // T3 unknown template -> fail-closed
66 let r3: i64 = wf_tpl_instantiate(dir, "nosuch" as *u8, df, dsp)
67 p(" T3 unknown rc=" as *u8); pn(r3); p("\n" as *u8)
68 if r3 != (0 - 1) { ok = 0 }
69
70 // T4 indexed but files missing -> loud refuse
71 let r4: i64 = wf_tpl_instantiate(dir, "ghost" as *u8, df, dsp)
72 p(" T4 ghost rc=" as *u8); pn(r4); p("\n" as *u8)
73 if r4 != (0 - 1) { ok = 0 }
74
75 // T5 missing gallery -> loud
76 let r5: i64 = wf_tpl_list("/tmp/wftpl_no_such_dir_ever" as *u8)
77 p(" T5 nogallery rc=" as *u8); pn(r5); p("\n" as *u8)
78 if r5 != (0 - 1) { ok = 0 }
79
80 // T6 negctl: instantiated copy carries no nonsense
81 let ban: i64 = tg_has(df, "BANANA" as *u8)
82 p(" T6 negctl nonsense=" as *u8); pn(ban); p("\n" as *u8)
83 if ban != 0 { ok = 0 }
84
85 p("NX-WFLOW-TPL-GATE dir=" as *u8); p(dir); p(" forks=0 " as *u8)
86 if ok == 1 { p("verdict=GREEN\n" as *u8); return 0 }
87 p("verdict=RED\n" as *u8)
88 return 1
89}