This page lists the states of executions and task runs, their transitions, and the reason values of both. Executions and states explains the lifecycle.
| State |
End state |
Meaning |
QUEUED |
no |
The execution waits. A flow concurrency.limit with behavior: queue holds it here. |
RUNNING |
no |
The engine queues and runs its tasks. |
CANCELLING |
no |
A cancel arrived. The engine waits for the running task runs to stop. |
SUCCESS |
yes |
Each task ended SUCCESS, or SKIPPED with the reason run_if_not_met, and the flow outputs resolved. |
FAILED |
yes |
At least one task ended in another state, or the flow outputs did not resolve. |
TIMED_OUT |
yes |
The flow timeout passed. |
CANCELLED |
yes |
A user, a token or an MCP client cancelled the execution. |
SKIPPED |
yes |
The flow concurrency.limit with behavior: skip had no free place when the trigger fired. |
| From |
To |
| (new) |
QUEUED, or SKIPPED with concurrency_limit |
QUEUED |
RUNNING, SKIPPED, CANCELLED |
RUNNING |
SUCCESS, FAILED, TIMED_OUT, CANCELLING |
CANCELLING |
CANCELLED |
A cancel of a RUNNING execution always goes through CANCELLING. A cancel of an ended execution gets 409 execution_ended.
A task run is one attempt of one task. A retry creates a new task run with the next attempt number.
| State |
End state |
Meaning |
PENDING |
no |
The task run waits for its dependencies, or for the retry delay of its attempt. |
QUEUED |
no |
The task run waits for a free slot on an instance that serves its pool and executor type. |
RUNNING |
no |
An instance claimed the task run, and the executor runs it. |
SUCCESS |
yes |
The task ended with success. |
FAILED |
yes |
The task failed. The reason tells why. |
TIMED_OUT |
yes |
The task passed its timeout. |
CANCELLED |
yes |
The execution got a cancel, or the flow timeout stopped the task. |
SKIPPED |
yes |
The engine did not run the task, because of its run_if rule and the states of its dependencies. |
| From |
To |
| (new) |
PENDING, or SUCCESS with reused for a restart |
PENDING |
QUEUED, SKIPPED, CANCELLED |
QUEUED |
RUNNING, CANCELLED |
RUNNING |
SUCCESS, FAILED, TIMED_OUT, CANCELLED |
When an attempt ends FAILED or TIMED_OUT and the task has attempts left, the engine creates the next attempt in PENDING. The execution must still be RUNNING, and its flow timeout must not have passed.
| Reason |
State |
Cause |
| (empty) |
SUCCESS, FAILED |
A normal end. For FAILED, the error field names the first failed task, its state and its error. |
concurrency_limit |
SKIPPED |
The flow concurrency limit with behavior: skip was full at creation. |
cancelled |
CANCELLING, CANCELLED |
A cancel request. |
timeout |
RUNNING, TIMED_OUT |
The flow timeout passed. The engine stops the tasks, and the execution then ends TIMED_OUT. |
output_error |
FAILED |
All tasks succeeded, but a flow output template did not resolve. |
| Reason |
State |
Cause |
Retry applies |
| (empty) |
any |
A normal state change, or a normal end. |
— |
exit_code |
FAILED |
The task process exited with a code other than 0. exit_code holds the code. |
yes |
http_status |
FAILED |
An http task got a status outside its expect_status list. |
yes |
child_failed |
FAILED |
A subflow task with wait got a child execution that did not end SUCCESS. |
yes |
depth_exceeded |
FAILED |
A subflow task passed the limit of 10 nested subflows. |
yes |
template_error |
FAILED |
A template of the task did not resolve at dispatch, a subflow reference or its inputs are invalid, or a script has no runtime. |
yes |
secret_not_found |
FAILED |
No scope defines the secret key, or the provider does not have the value. |
yes |
secret_provider_error |
FAILED |
The provider of a defined secret failed, for example with no access. |
yes |
runtime_not_found |
FAILED |
The task image or host has no uv, bash, bun or node for the script. |
yes |
image_pull_failed |
FAILED |
Docker or Kubernetes did not pull the task image. |
yes |
pod_pending_timeout |
FAILED |
The pod of a kubernetes task stayed pending longer than SLUICE_K8S_PENDING_TIMEOUT. |
yes |
executor_error |
FAILED |
The executor did not start the task, the runner did not prepare the workdir, or an http request failed. |
yes |
lost |
FAILED |
The work of the task run is gone: the runner stopped, the container or Job is gone, or the instance is offline. |
yes |
instance_shutdown |
FAILED |
The instance that ran a process or inline task got SIGTERM. |
yes |
timeout |
TIMED_OUT |
The task passed its timeout. |
yes |
timeout |
RUNNING |
The flow timeout passed. The task run then ends CANCELLED. |
no |
cancelled |
CANCELLED |
The execution got a cancel, or the flow timeout stopped the task. |
no |
upstream_failed |
SKIPPED |
A dependency ended FAILED, TIMED_OUT or CANCELLED, or a dependency has this reason. The task has the default run_if: success. |
no |
run_if_not_met |
SKIPPED |
The run_if rule did not match, for example run_if: failure and no dependency failed. The execution counts this state as a success. |
no |
no_instance_for_pool |
QUEUED |
No online instance serves the pool and the executor type of the task. The reason clears when such an instance comes online. |
— |
reused |
SUCCESS |
A restart copied the successful task run of the old execution. |
— |
A task run that ends with a reason also has an error text. Secret values in the error text show as ***.
| Tool |
How |
| UI |
The execution page shows the state of the execution and of each task. The inspector shows the reason and the error of the selected attempt. |
| CLI |
sluice executions get <id> prints each task run with its state, exit code and error. --output json prints the full record with the reasons. |
| API |
GET /api/v1/executions/{executionId} returns state, reason and error for the execution and each task run. |
| MCP |
The get_execution tool returns the same record. |
| Metrics |
sluice_executions and sluice_task_runs count the rows in each state. See Metrics. |
With --wait, sluice run exits with the end state of the execution. See Exit codes.