code wiki / _hdl_build / nx_wflow_cli_gate.nx
nx_wflow_cli_gate.nx source
↩ module page · 66 lines · 3414 B
1// nx_wflow_cli_gate.nx -- gate for the file-driven production path (wf_lines_load + wf_fire_files):
2// definitions as DATA FILES, validated whole before anything runs. THE PM COMPOSITION PROOF: firing
3// `venue-booked` runs the REAL vizsla docgen organ (agreement .docx built + filed on the doc store)
4// then notify -> run DONE, all through the demo data files a human can edit. ONE fork.
5// Neg-controls: missing file loud -1; a bad ruleset file (unknown action) refuses whole; durable dedup
6// on refire. license_tier: ORIGINAL expect_exit: 0
7import "nx_wflow_engine.nx"
8
9func cgl_n(led: *u8, ridtok: *u8, st: *u8) -> i64 {
10 let szp: *i64 = sys_mmap(8) as *i64
11 let b: *u8 = wf_readall(led, szp)
12 if (b as i64) == 0 { return 0 - 1 }
13 return wf_lines_with2(b, szp[0], ridtok, st)
14}
15
16func main() -> i64 {
17 p("=== NX-WFLOW-CLI GATE (definitions as data files; PM composition: venue-booked -> real docgen -> notify) ===\n" as *u8)
18 var ok: i64 = 1
19 let now: i64 = wf_now()
20 let led: *u8 = sys_mmap(128)
21 var lo: i64 = 0
22 lo = wf_cat(led, lo, "/tmp/wfcli_" as *u8)
23 lo = wf_catn(led, lo, now)
24 lo = wf_cat(led, lo, ".log" as *u8)
25 led[lo] = 0 as u8
26
27 // T1 file loaders: demo files parse (comments skipped), missing file refuses loud
28 let arr: *i64 = sys_mmap(8 * 64) as *i64
29 let nf: i64 = wf_lines_load("knowledge/wflow/demo.flows" as *u8, arr, 64)
30 let nst: i64 = wf_lines_load("knowledge/wflow/demo.steps" as *u8, arr, 64)
31 let miss: i64 = wf_lines_load("/tmp/wflow_no_such_defs_file" as *u8, arr, 64)
32 p(" T1 flows=" as *u8); pn(nf); p(" steps=" as *u8); pn(nst); p(" missing=" as *u8); pn(miss); p("\n" as *u8)
33 if nf != 1 { ok = 0 }
34 if nst != 2 { ok = 0 }
35 if miss != (0 - 1) { ok = 0 }
36
37 // T2 bad definitions file refuses WHOLE (unknown action row)
38 let badp: *u8 = sys_mmap(128)
39 var bo: i64 = 0
40 bo = wf_cat(badp, bo, "/tmp/wfcli_bad_" as *u8)
41 bo = wf_catn(badp, bo, now)
42 badp[bo] = 0 as u8
43 wf_append(badp, "z1|1|explode|-|boom|1\n" as *u8)
44 let rb: i64 = wf_fire_files("knowledge/wflow/demo.flows" as *u8, badp, led, "-" as *u8, "venue-booked~id=B1" as *u8)
45 p(" T2 badDefs rc=" as *u8); pn(rb); p("\n" as *u8)
46 if rb != (0 - 1) { ok = 0 }
47
48 // T3 THE PM COMPOSITION: fire venue-booked through the DATA FILES -> real docgen organ -> notify -> DONE
49 let rc: i64 = wf_fire_files("knowledge/wflow/demo.flows" as *u8, "knowledge/wflow/demo.steps" as *u8, led, "knowledge/wflow/connectors.conf" as *u8, "venue-booked~venue=pavilion~id=D1" as *u8)
50 let d1: i64 = cgl_n(led, " rid=D1.pm1 " as *u8, "status=DONE" as *u8)
51 let o1: i64 = cgl_n(led, " rid=D1.pm1 " as *u8, "status=OK" as *u8)
52 p(" T3 fire started=" as *u8); pn(rc); p(" done=" as *u8); pn(d1); p(" okSteps=" as *u8); pn(o1); p("\n" as *u8)
53 if rc != 1 { ok = 0 }
54 if d1 != 1 { ok = 0 }
55 if o1 != 2 { ok = 0 }
56
57 // T4 durable dedup through the file path
58 let r2: i64 = wf_fire_files("knowledge/wflow/demo.flows" as *u8, "knowledge/wflow/demo.steps" as *u8, led, "knowledge/wflow/connectors.conf" as *u8, "venue-booked~venue=pavilion~id=D1" as *u8)
59 p(" T4 refire rc=" as *u8); pn(r2); p("\n" as *u8)
60 if r2 != (0 - 100) { ok = 0 }
61
62 p("NX-WFLOW-CLI-GATE ledger=" as *u8); p(led); p(" forks=1 " as *u8)
63 if ok == 1 { p("verdict=GREEN\n" as *u8); return 0 }
64 p("verdict=RED\n" as *u8)
65 return 1
66}