# flow-on-sx Scoreboard **All tests pass: 49 / 49 across 2 suites.** `bash lib/flow/conformance.sh` ## Per-suite breakdown | Suite | Passing | Covers | |-------|--------:|--------| | basic | 18 | Phase 1: single nodes, linear sequence, data-flow threading, defflow, parallel fan/join, nested composition, publish-shaped flow | | control | 31 | Phase 2: `branch` (6); error model `fail`/`failed?`/`fail-reason` (6); `try-catch` (6); `retry n` (6); `timeout` cooperative step budget (7) | ## Architecture Flow combinators are a **Scheme prelude** (`lib/flow/spec.sx`) loaded onto `scheme-standard-env`. A flow is a Scheme procedure `input -> output`. The whole flow executes inside the Scheme interpreter, so Phase 3's `suspend` (call/cc) will capture the flow continuation directly. - `lib/flow/spec.sx` — combinators: `flow-node`, `flow-id`, `flow-const`, `sequence`, `parallel`, `defflow`; `flow-load-combinators!`. - `lib/flow/api.sx` — `flow/start` (Scheme); `flow-make-env`, `flow-run`, `flow-run-in` (SX helpers). - `lib/flow/tests/basic.sx` — 18 cases. - `lib/flow/conformance.sh` — loads substrate + flow layer, runs suites. ## Semantics notes - **node** = 1-arg Scheme procedure; the upstream value is the argument. A node ignoring its argument is effectively a thunk. - **sequence** threads left-to-right; empty sequence = identity. - **parallel** fans the same input to every branch and joins results into a list. Evaluation is **sequential** for now; true concurrency arrives in Phase 3. ## Phases - [x] Phase 1 — Declarative DAG + sequential execution (combinators + 18 tests, `flow/start`) - [x] Phase 2 — Control flow + error handling (branch, error model, try-catch, retry, timeout) - [ ] Phase 3 — Suspend / resume (the showcase) - [ ] Phase 4 — Distributed nodes via fed-sx