toolspace › registry › Muninn flowing
Muninn flowing
DAG workflow runner. Encode a procedure as Python @task functions with depends_on/when/validate/retry_until; the runner owns control flow (branching, retries, validation, propagation) and the consumer's tasks supply the leaves. A framework, not a transactional tool.
Install
install-manifest install https://toolspace.yepgent.com/examples/muninn-flowing.v0.3.json
manifest JSON · source · docs · issues · homepage
Security
| Kill switch | manual Manual procedure: — |
|---|---|
| Smoke contract | shell timeout 5s |
Scopes
-
compute.localread, writeFramework executes whatever Python callables the consumer registers as @task. Framework itself does no I/O; the side-effect surface is the union of consumer task bodies, which the manifest cannot enumerate. Downstream consumers' manifests cover real data scopes.
Actions
-
validate read idempotent
Statically validate a Python module declaring a Flow — load it, build the topology, check for cycles and dangling deps, render the layers without running anything. ·
compute.local- Goal
- Validate a Flow module's topology without running task bodies.
- Inputs
module (importable, e.g. 'mypkg.pipelines.publish'), terminal (attribute name, e.g. 'final_task')- Outputs
{layers: [[task_name,...],...], total_tasks, detached_count, has_validators, has_gates}- Errors
module_not_importable, terminal_not_found, cycle_detected, missing_dep- Example
validate module=mypkg.publish terminal=final_step
-
run read
Execute a Flow declared in a Python module. The framework's side-effects are zero; the consumer's task bodies determine the actual blast radius. ·
compute.local- Goal
- Run (or resume) a user-defined Flow.
- Inputs
module (importable), terminal (attribute name), resume (bool, default false), max_workers (int, override)- Outputs
{results: [{name, state, value_repr, error, attempts, ms},...], summary}- Errors
module_not_importable, terminal_not_found, task_failed (envelope wraps user task error), validator_failed- Example
run module=mypkg.publish terminal=publish_post
Verify & cost
| Verify suite | — · — cases · pass ≥ — |
|---|---|
| SLA | p50 500 ms · p95 2000 ms · max error rate 0.01 |
| Schedule | cadence: on-install · on install: yes |
| Install fee | 0¢ |
| Monthly fee | 0¢ |
| Usage model | external |
Runtime
runtime: python-module · install method: git · entrypoint: python -m flowing.cli
Pure-compute Python framework. Consumer authors @task-decorated functions, wires them with depends_on=, attaches gates (when=, validate=, retry_until=, retry=, timeout_s=), and runs Flow(terminal).run(). The runner topo-sorts the DAG, executes layers in parallel, propagates SKIPPED through dependents, and never runs a body whose validator raised. Detached side-effect tasks run after main flow completes. Resume() re-executes only failed/skipped/notrun nodes. Written as a deliberate stress-test of install-manifest-spec v0.3 — third in the consumer-test series after muninn-bsky-card and muninn-verify-patch. The manifest is honest fiction in several places (entrypoint, actions[], invocation.kind) because v0.3 assumes a tool exposes a fixed action catalog while flowing's capability surface IS user-extensible — every consumer's @task functions become its operations. Findings filed in muninns-inbox discussion #1.
Tags: workflowdagframeworkpythoncontrol-flowtask-runner
License: MIT
Last fetched (working tree) (local)