code wiki / _hdl_build / nx_wflow_obs_gate.nx

nx_wflow_obs_gate.nx source

↩ module page · 105 lines · 4652 B

1// nx_wflow_obs_gate.nx -- R6 RUN OBSERVABILITY gate: the board + 0-JS HTML run page are derived ENTIRELY 2// by replaying the event-sourced run ledger (nothing self-reported). Builds a mixed ledger through REAL 3// engine calls (one DONE run, one FAILED run, one PARKED-on-approval run, one synthetic in-flight RUNNING), 4// then asserts the derived states, the totals, and the real page bytes (title + states present, zero 5// <script, DOCTYPE-led). Neg-controls: empty ledger reports 0 runs (no fabrication); nonsense state absent. 6// ZERO forks. license_tier: ORIGINAL expect_exit: 0 7import "nx_wflow_engine.nx" 8 9func og_file_has(path: *u8, needle: *u8) -> i64 { 10 let szp: *i64 = sys_mmap(8) as *i64 11 let b: *u8 = wf_readall(path, szp) 12 if (b as i64) == 0 { return 0 } 13 if szp[0] == 0 { return 0 } 14 return wf_lines_with2(b, szp[0], needle, needle) 15} 16 17func main() -> i64 { 18 p("=== NX-WFLOW-OBS GATE (R6: run board + 0-JS HTML by ledger replay, nothing self-reported) ===\n" as *u8) 19 var ok: i64 = 1 20 let now: i64 = wf_now() 21 let led: *u8 = sys_mmap(128) 22 var lo: i64 = 0 23 lo = wf_cat(led, lo, "/tmp/wfobs_" as *u8) 24 lo = wf_catn(led, lo, now) 25 lo = wf_cat(led, lo, ".log" as *u8) 26 led[lo] = 0 as u8 27 let page: *u8 = sys_mmap(128) 28 var po: i64 = 0 29 po = wf_cat(page, po, "/tmp/wfobs_" as *u8) 30 po = wf_catn(page, po, now) 31 po = wf_cat(page, po, ".html" as *u8) 32 page[po] = 0 as u8 33 34 let flows: *i64 = sys_mmap(8 * 4) as *i64 35 flows[0] = "f1|deal|-" as *u8 as i64 36 flows[1] = "f3|ops|-" as *u8 as i64 37 flows[2] = "fa|expense|-" as *u8 as i64 38 let steps: *i64 = sys_mmap(8 * 8) as *i64 39 steps[0] = "f1|1|create-task|-|Prep|1" as *u8 as i64 40 steps[1] = "f1|2|notify|-|Advanced|1" as *u8 as i64 41 steps[2] = "f3|1|probe-fail|-|9|1" as *u8 as i64 42 steps[3] = "fa|1|approve|operator|Need signoff|1" as *u8 as i64 43 let cx: *i64 = sys_mmap(32) as *i64 44 cx[0] = steps as i64 45 cx[1] = 4 46 cx[2] = led as i64 47 cx[3] = 0 48 49 // build the mixed ledger through the REAL engine: DONE + FAILED + PARKED + synthetic RUNNING 50 wf_fire(cx, flows, 3, "deal~id=O1" as *u8) 51 wf_fire(cx, flows, 3, "ops~id=O2" as *u8) 52 wf_fire(cx, flows, 3, "expense~id=O3" as *u8) 53 wf_emit(led, "O4.f1" as *u8, "f1" as *u8, 0, "START" as *u8, 0) 54 55 // T1 board: 4 distinct runs, one of each derived state 56 let cnt: i64 = wf_obs_board(led) 57 p(" T1 board runs=" as *u8); pn(cnt); p("\n" as *u8) 58 if cnt != 4 { ok = 0 } 59 let szp: *i64 = sys_mmap(8) as *i64 60 let buf: *u8 = wf_readall(led, szp) 61 let tok: *u8 = sys_mmap(256) 62 wf_obs_tok(tok, "O1.f1" as *u8) 63 if wf_run_state(buf, szp[0], tok) != 3 { ok = 0 } 64 wf_obs_tok(tok, "O2.f3" as *u8) 65 if wf_run_state(buf, szp[0], tok) != 2 { ok = 0 } 66 wf_obs_tok(tok, "O3.fa" as *u8) 67 if wf_run_state(buf, szp[0], tok) != 1 { ok = 0 } 68 wf_obs_tok(tok, "O4.f1" as *u8) 69 if wf_run_state(buf, szp[0], tok) != 0 { ok = 0 } 70 p(" T1b states done/failed/parked/running all derived correctly=" as *u8); pn(ok); p("\n" as *u8) 71 72 // T2 the page: real bytes, DOCTYPE-led, all states named, run ids present, ZERO script tags 73 let pc: i64 = wf_obs_html(led, page) 74 let hasTitle: i64 = og_file_has(page, "Nishi Workflow Runs" as *u8) 75 let hasO2: i64 = og_file_has(page, "O2.f3" as *u8) 76 let hasParked: i64 = og_file_has(page, "PARKED" as *u8) 77 let hasScript: i64 = og_file_has(page, "<script" as *u8) 78 let hasDoc: i64 = og_file_has(page, "DOCTYPE html" as *u8) 79 p(" T2 page runs=" as *u8); pn(pc); p(" title=" as *u8); pn(hasTitle); p(" o2=" as *u8); pn(hasO2) 80 p(" parked=" as *u8); pn(hasParked); p(" script=" as *u8); pn(hasScript); p(" doctype=" as *u8); pn(hasDoc); p("\n" as *u8) 81 if pc != 4 { ok = 0 } 82 if hasTitle < 1 { ok = 0 } 83 if hasO2 < 1 { ok = 0 } 84 if hasParked < 1 { ok = 0 } 85 if hasScript != 0 { ok = 0 } 86 if hasDoc < 1 { ok = 0 } 87 88 // T3 neg-controls: empty ledger -> 0 runs (no fabrication); nonsense state never appears 89 let led2: *u8 = sys_mmap(128) 90 var l2: i64 = 0 91 l2 = wf_cat(led2, l2, "/tmp/wfobs_empty_" as *u8) 92 l2 = wf_catn(led2, l2, now) 93 l2 = wf_cat(led2, l2, ".log" as *u8) 94 led2[l2] = 0 as u8 95 let c0: i64 = wf_obs_board(led2) 96 let ban: i64 = og_file_has(page, "BANANA" as *u8) 97 p(" T3 negctl emptyRuns=" as *u8); pn(c0); p(" nonsense=" as *u8); pn(ban); p("\n" as *u8) 98 if c0 != 0 { ok = 0 } 99 if ban != 0 { ok = 0 } 100 101 p("NX-WFLOW-OBS-GATE page=" as *u8); p(page); p(" forks=0 " as *u8) 102 if ok == 1 { p("verdict=GREEN\n" as *u8); return 0 } 103 p("verdict=RED\n" as *u8) 104 return 1 105}