v0.6.0 — Workflow + Job model
What's new
The previous flat Pipelines page becomes Workflows (user-named groupings) on top of Jobs (individual tasks). The DAG between jobs lives on the workflow declaration, not on individual jobs. Existing @ematix.pipeline code keeps working as single-job workflows-of-one, so this is a non-breaking model upgrade.
Added
ematix.workflow(name=..., jobs=[...], depends_on={...})— new declaration.depends_onreads as{downstream: [upstream, ...]}. Edges are mirrored into the existing per-job depends-on table so the scheduler's freshness gating keeps working.@ematix.job— alias for@ematix.pipeline. New code should prefer.job./api/workflows— endpoint returning declared workflows + their jobs/edges, plus synthetic single-job workflows for any job not in a declared workflow.flow web --module <name>— pre-imports a pipelines module so the UI can render schedule, next-run, and DAG before any scheduler tick.- Pipelines API now forecasts
next_run_atfor batch jobs from the registered cron + timezone when no scheduler record exists yet.
Changed
- Web UI restructured to Workflows | Jobs | Runs | DAG tabs.
- DAG view is now an SVG flowchart with cubic-Bézier arrows replacing the rank-as-column layout.
- New shared
DagFlowchart.svelteused by both the Workflows card preview and the full DAG view. - Loopback bind no longer requires a bearer token by default.
See CHANGELOG.md for the full set of additions + migration notes, and docs/USER_GUIDE.md for the new Workflows section.
Install
pip install ematix-flow==0.6.0
Wheels published: linux-x86_64 (py3.11/3.12/3.13/3.14), macos-arm64 (py3.11/3.12/3.13/3.14), plus sdist.