code wiki / _hdl_build / nx_wflow_data_gate.nx

nx_wflow_data_gate.nx source

↩ module page · 120 lines · 5356 B

1// nx_wflow_data_gate.nx -- R8 DATA-PASSING gate: run-scoped variables on the event-sourced ledger. 2// Trigger-event fields auto-bind as vars (WFVAR records) -> {key} placeholders substitute into ANY step 3// arg at execution -> set-var writes DERIVED vars (its own arg substitutes first) -> LAST write wins -> 4// unknown or unclosed placeholder = LOUD step failure, run FAILED (the send_merge law) -> vars reach a 5// FORKED organ argv (argecho receives the event's values). ONE fork. license_tier: ORIGINAL expect_exit: 0 6import "nx_wflow_engine.nx" 7 8func dg_n(led: *u8, ridtok: *u8, st: *u8) -> i64 { 9 let szp: *i64 = sys_mmap(8) as *i64 10 let b: *u8 = wf_readall(led, szp) 11 if (b as i64) == 0 { return 0 - 1 } 12 return wf_lines_with2(b, szp[0], ridtok, st) 13} 14func dg_row(conf: *u8, name: *u8, elf: *u8, flag: *u8) -> i64 { 15 let ln: *u8 = sys_mmap(600) 16 var o: i64 = 0 17 o = wf_cat(ln, o, name) 18 ln[o] = 9 as u8 19 o = o + 1 20 o = wf_cat(ln, o, elf) 21 ln[o] = 9 as u8 22 o = o + 1 23 o = wf_cat(ln, o, flag) 24 ln[o] = 10 as u8 25 ln[o+1] = 0 as u8 26 return wf_append(conf, ln) 27} 28 29func main() -> i64 { 30 p("=== NX-WFLOW-DATA GATE (R8: event data -> variables -> any step arg, incl forked organ argv) ===\n" as *u8) 31 var ok: i64 = 1 32 let now: i64 = wf_now() 33 let led: *u8 = sys_mmap(128) 34 var lo: i64 = 0 35 lo = wf_cat(led, lo, "/tmp/wfdata_" as *u8) 36 lo = wf_catn(led, lo, now) 37 lo = wf_cat(led, lo, ".log" as *u8) 38 led[lo] = 0 as u8 39 let conf: *u8 = sys_mmap(128) 40 var co: i64 = 0 41 co = wf_cat(conf, co, "/tmp/wfdata_" as *u8) 42 co = wf_catn(conf, co, now) 43 co = wf_cat(conf, co, ".conf" as *u8) 44 conf[co] = 0 as u8 45 dg_row(conf, "argecho" as *u8, "./_offc/nx_tool_argecho.elf" as *u8, "GREEN" as *u8) 46 47 let flows: *i64 = sys_mmap(8 * 8) as *i64 48 flows[0] = "fd1|deal-won|-" as *u8 as i64 49 flows[1] = "fd2|bad-sub|-" as *u8 as i64 50 flows[2] = "fd3|override|-" as *u8 as i64 51 flows[3] = "fd4|unclosed|-" as *u8 as i64 52 let steps: *i64 = sys_mmap(8 * 12) as *i64 53 steps[0] = "fd1|1|set-var|-|greet=Congrats {name}|1" as *u8 as i64 54 steps[1] = "fd1|2|notify|-|{greet} on {deal}|1" as *u8 as i64 55 steps[2] = "fd1|3|exec-organ|argecho|{name}~{deal}|1" as *u8 as i64 56 steps[3] = "fd2|1|notify|-|hello {missing}|1" as *u8 as i64 57 steps[4] = "fd3|1|set-var|-|name=Override|1" as *u8 as i64 58 steps[5] = "fd3|2|set-var|-|msg={name}|1" as *u8 as i64 59 steps[6] = "fd4|1|notify|-|broken {oops|1" as *u8 as i64 60 let cx: *i64 = sys_mmap(32) as *i64 61 cx[0] = steps as i64 62 cx[1] = 7 63 cx[2] = led as i64 64 cx[3] = conf as i64 65 66 // T0 load: 7 rows ok; set-var without key=value refused 67 let l0: i64 = wf_load(steps, 7) 68 let bad: *i64 = sys_mmap(16) as *i64 69 bad[0] = "f9|1|set-var|-|novalue|1" as *u8 as i64 70 let lb: i64 = wf_load(bad, 1) 71 p(" T0 load=" as *u8); pn(l0); p(" badSetvar=" as *u8); pn(lb); p("\n" as *u8) 72 if l0 != 7 { ok = 0 } 73 if lb != (0 - 1) { ok = 0 } 74 75 // T1 the dataflow: event fields bind -> derived set-var substitutes -> notify uses both -> vars reach argecho argv 76 let r1: i64 = wf_fire(cx, flows, 4, "deal-won~name=Rose~deal=Riverside~id=V1" as *u8) 77 let d1: i64 = dg_n(led, " rid=V1.fd1 " as *u8, "status=DONE" as *u8) 78 let o1: i64 = dg_n(led, " rid=V1.fd1 " as *u8, "status=OK" as *u8) 79 let vb: i64 = dg_n(led, " rid=V1.fd1 " as *u8, "k=name v=Rose" as *u8) 80 let vg: i64 = dg_n(led, " rid=V1.fd1 " as *u8, "v=Congrats Rose" as *u8) 81 p(" T1 flow started=" as *u8); pn(r1); p(" done=" as *u8); pn(d1); p(" okSteps=" as *u8); pn(o1) 82 p(" eventBound=" as *u8); pn(vb); p(" derivedVar=" as *u8); pn(vg); p("\n" as *u8) 83 if r1 != 1 { ok = 0 } 84 if d1 != 1 { ok = 0 } 85 if o1 != 3 { ok = 0 } 86 if vb != 1 { ok = 0 } 87 if vg != 1 { ok = 0 } 88 89 // T2 unknown variable -> LOUD step failure, run FAILED, nothing fabricated 90 wf_fire(cx, flows, 4, "bad-sub~id=V2" as *u8) 91 let f2: i64 = dg_n(led, " rid=V2.fd2 " as *u8, "status=FAILED" as *u8) 92 let d2: i64 = dg_n(led, " rid=V2.fd2 " as *u8, "status=DONE" as *u8) 93 p(" T2 unknownVar failed=" as *u8); pn(f2); p(" done=" as *u8); pn(d2); p("\n" as *u8) 94 if f2 != 1 { ok = 0 } 95 if d2 != 0 { ok = 0 } 96 97 // T3 LAST WRITE WINS: set-var name=Override beats the event's name=Rose for later steps 98 wf_fire(cx, flows, 4, "override~name=Rose~id=V3" as *u8) 99 let d3: i64 = dg_n(led, " rid=V3.fd3 " as *u8, "status=DONE" as *u8) 100 let vo: i64 = dg_n(led, " rid=V3.fd3 " as *u8, "k=msg v=Override" as *u8) 101 p(" T3 override done=" as *u8); pn(d3); p(" msgIsOverride=" as *u8); pn(vo); p("\n" as *u8) 102 if d3 != 1 { ok = 0 } 103 if vo != 1 { ok = 0 } 104 105 // T4 unclosed placeholder -> LOUD failure 106 wf_fire(cx, flows, 4, "unclosed~id=V4" as *u8) 107 let f4: i64 = dg_n(led, " rid=V4.fd4 " as *u8, "status=FAILED" as *u8) 108 p(" T4 unclosed failed=" as *u8); pn(f4); p("\n" as *u8) 109 if f4 != 1 { ok = 0 } 110 111 // T5 negctl: nonsense value never appears 112 let ban: i64 = dg_n(led, "WFVAR" as *u8, "v=BANANA" as *u8) 113 p(" T5 negctl nonsense=" as *u8); pn(ban); p("\n" as *u8) 114 if ban != 0 { ok = 0 } 115 116 p("NX-WFLOW-DATA-GATE ledger=" as *u8); p(led); p(" forks=1 " as *u8) 117 if ok == 1 { p("verdict=GREEN\n" as *u8); return 0 } 118 p("verdict=RED\n" as *u8) 119 return 1 120}