Documentation

eExecutionState Enum

StateMeaningTerminal?
IdleCreated but not yet started. The initial value before execution begins.No
RunningActively executing. Nodes are being dispatched.No
CompletedAll nodes finished successfully. The normal success terminal state.Yes
FailedAn unrecoverable error occurred. Retries (if any) were exhausted.Yes
CancelledThe CancellationToken was signalled, or a WorkflowControl node issued an abort signal.Yes
PausedExecution is durably suspended. A node returned "waiting" or "pending".No — can resume

State Machine Diagram

stateDiagram-v2 direction LR [*] --> Running : Start Running --> Completed : Success Running --> Failed : Error Running --> Cancelled : Abort / Token Running --> Paused : Waiting / Pending Paused --> Running : ContinueAsync Completed --> [*] Failed --> [*] Cancelled --> [*]

State Transitions by Layer

Thread State Transitions

Idle    → Running   (on ExecuteProcessThreadAsync entry)

Running → Completed  (loop exits with stack empty, no errors)
Running → Failed     (node threw, retries exhausted, or thread exception)
Running → Cancelled  (CancellationToken signalled or AbortSignal set)
Running → Paused     (node returned "waiting"/"pending", or pause API called)

Paused  → Running   (on ContinueAsync resume)

Process State Transitions

Running → Completed  (all threads completed)
Running → Failed     (any thread failed — stops processing remaining threads)
Running → Cancelled  (CancellationToken signalled mid-thread-loop)
Running → Paused     (pause signal received between threads)

Node Stage Enum (eNodeStage)

Below the eExecutionState, individual node execution progress is tracked through eNodeStage. Each stage transition is reported via the progress event system and visible in the Studio UI.

StageWhen fired
InitiatedExecution has started, before OnEntry
EntryOnEntry completed
EntryValidateOnEntryValidate completed
PreValidationGuardRailsOnPreValidationGuardRails completed
PreProcessOnPreProcess completed
ProcessOnProcess completed
PostProcessOnPostProcess completed
PostValidationGuardRailsOnPostValidationGuardRails completed
ExitOnExit completed
CompletedResult.IsSuccess == true — node finished successfully
ErrorResult.IsSuccess == false — node reported failure

ExecutionStatusID Constants

When thread executions are persisted to the database, the state enum is mapped to integer status IDs via ExecutionConstants.ExecutionStatusId:

ConstantMaps from
CompletedeExecutionState.Completed
FailedeExecutionState.Failed
CancelledeExecutionState.Cancelled
PausedeExecutionState.Paused
RunningeExecutionState.Running
Paused is not Failed A paused execution is healthy — it is waiting for an external event. Treat it like a running execution that is temporarily sleeping. Only Failed and Cancelled indicate that something went wrong.