Skip to content

Pipeline configuration

Pipelines are YAML files. The server stores them as configs; you run executions against those configs. This guide covers the day-to-day operator loop.

Always validate locally first. Catches errors without touching the server:

Terminal window
factflow config validate backend/config/pipelines/my-pipeline.yaml

Exit 0 on success. Non-zero with stable error codes (E001–E501) on failure.

For JSON output (scriptable):

Terminal window
factflow config validate my-pipeline.yaml --output json

Want a batch validation of every shipped YAML?

Terminal window
factflow config validate backend/config/pipelines/
Terminal window
factflow config create -f my-pipeline.yaml

Returns the stored config record with an id. That id is what you pass to factflow config run.

From stdin:

Terminal window
cat my-pipeline.yaml | factflow config create -f -
Terminal window
factflow config list
factflow config list --active
factflow config list --inactive
factflow config get CONFIG_ID

get returns the full YAML plus metadata (version, source type, hash).

Configs are versioned. Editing increments the version. In-flight executions are unaffected (they run against their snapshot):

Terminal window
factflow config edit CONFIG_ID -f my-pipeline-v2.yaml
Terminal window
factflow config run CONFIG_ID

Returns an execution id. The pipeline starts immediately.

Terminal window
factflow config delete CONFIG_ID

Returns 204 on success. Doesn’t affect executions already run against the config (their snapshots are independent).

On server startup, every shipped YAML under backend/config/pipelines/ is validated. Default is strict — a broken YAML aborts startup. To run warn-only (for rapid iteration):

Terminal window
FACTFLOW_CONFIG_VALIDATOR_STRICT=0 uv run python -m factflow_server serve --embedded

Strict is the production default. Don’t flip it off permanently.

The validator uses a stable taxonomy:

  • E001E099 — YAML parsing errors
  • E100E199 — schema violations (missing fields, wrong types)
  • E200E299 — route errors (unknown queue, bad concurrency)
  • E300E399 — adapter errors (unknown type, invalid config)
  • E400E499 — init message errors (missing route, bad payload)
  • E500E501 — global errors
  • W501W503 — warnings (deprecated fields, suboptimal settings)

Full table in the pipeline YAML reference.