Skip to main content
Workflows are versioned with monotonic integers. The latest version is the active one (assuming status: active); older versions are kept addressable for replay and audit.

Version anatomy

FieldNotes
versionInteger, bumped on every save. Starts at 1.
statusdraft (not in service) / active (handling events) / archived (no longer used).
createdAtOriginal creation timestamp.
updatedAtLast save timestamp.
createdByThe user who first created the workflow.
_lastEditedByThe user who made the most recent save (optional).

Promotion flow

1

Duplicate as draft

From the active workflow, “Duplicate as draft” creates a sibling with the latest definition copied over. Its status: draft keeps it out of service.
2

Edit + test

Use the test pane (see Testing) against fixtures and historical runs.
3

Promote

Flip the draft’s status to active and archive the prior version (status: archived). The prior version remains readable at its version for replay.
4

Cut over

The engine picks up the new active version on the next event. In-flight runs against the prior version continue to completion under their original version.

Replay against an updated version

Frayme replays historical runs against the current active version — letting you see how a past case would resolve under today’s logic.
POST /api/workflows/:id/replay
{ "run_id": "run_..." }
The replay reads the original input from history and runs it through the current graph. Side-by-side diff shows which nodes route differently.
Input-schema drift. The replay assumes the original input still satisfies the current workflow’s input schema. If you’ve added or removed required fields between versions, replay against an older run will fail validation. Make schema-breaking changes in a coordinated migration: bump the version, and either (a) keep the old version active for replays of old runs, or (b) ship an input adapter that translates old inputs into the new shape before re-running.
Replaying against an old version is also supported (via ?version=N) — useful when you specifically want to reproduce historical behaviour rather than see how new logic would have decided.

Comparing versions

The editor’s Versions panel shows the change log per version with an auto-extracted summary plus the human-written description.

Best practice

Treat the workflow definition like code: every save is a commit, every active workflow has a reviewer.
Use draft duplicates for experimentation; never edit the active version directly.
Keep workflow descriptions current — they’re surfaced as the “what does this do” tooltip in the queue, the decision console, and the audit-export bundles.