code wiki / _hdl_build / nx_workflowmine.nx
nx_workflowmine.nx
buildroot/runtime/_hdl_build/nx_workflowmine.nx
about
nx_workflowmine.nx -- WORKFLOWS-CLASS MINER over the plan-/planrun- planes (miner-sota F1011, 2026-07-23).
The census (nx_minecov MC08) measured workflows at ZERO readers: plans EXECUTE via nx_plan_run and
nobody ever mines them, so a standing beat can rot silently. This derives, per tracked workflow:
DECLARED steps (plan- plane) vs RUN steps (planrun- plane), every step's rc, the FIRST failing
step id, and a health verdict that keeps three states DISTINCT:
NEVER-RUN (no results -- an honest unknown, NOT a failure) | FAILING (some rc != 0) |
PARTIAL (ran fewer steps than declared -- stopped early, or the plan grew) | HEALTHY.
Conflating never-run with failing is the exact dishonesty this organ exists to avoid.
Sources are declared as DATA (knowledge/status/workflow_plans.conf, hot-read); loader "-" reads them
as FILES (deterministic gate fixtures), else forks the ALLOWLIST-RESOLVED loader (nx_store_put load).
Composes nx_sovjson_lib (sj_*). Read-only. No hw writes (Rule 26).
mine <plansconf> [loader] -> JSON per-workflow + totals (healthy/failing/never_run/health_permil)
selftest <scratch-prefix> -> gate T1..T8
conf cols: id TAB plan_src TAB run_src TAB note planrun row: seq TAB rc=<n> TAB snippet
license_tier: ORIGINAL
dependencies 4 imports · 0 importers
imports: nx_sovjson_lib.nxnx_syscalls.nxnx_gate_verdict.nxnx_tool_run.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 20 | const WM_MAGIC_4088: i64 = 4088 |
| 22 | const WM_CAP: i64 = 1048576 |
| 23 | const WM_CONF: i64 = 65536 |
| 24 | const WM_OUT: i64 = 65536 |
| 25 | const WM_PATH: i64 = 512 |
| 26 | const WM_ROWS: i64 = 64 |
| 27 | const WM_ALLOW: i64 = 131072 |
| 28 | const WM_PERMIL: i64 = 1000 |
| 29 | const WM_NAME_MAX: i64 = 120 |
| 30 | const WM_MODE_644: i64 = 420 |
functions
| 32 | func wm_read(path: *u8, buf: *u8, cap: i64) -> i64 |
| 41 | func wm_find(q: *u8, n: i64, lit: *u8) -> i64 |
| 55 | func wm_allow_path(name: *u8, outp: *u8) -> i64 { return sj_allow_path(name, outp) } |
| 56 | func wm_key(d: *u8, o: i64, name: *u8) -> i64 |
| 67 | func wm_load(src: *u8, lp: *u8, lok: i64, buf: *u8) -> i64 |
| 84 | func wm_rows(q: *u8, n: i64) -> i64 |
| 95 | func wm_scan_run(q: *u8, n: i64, rcx: *i64) -> i64 |
| 128 | func wm_mine_json(conf: *u8, loader: *u8, d: *u8) -> i64 |
| 242 | func wm_selftest(prefix: *u8) -> i64 |
| 369 | func main(argc: i64, argv: *i64) -> i64 |