Statuses and status machines
Every status a record, a flow run, a step, a task, a sandbox, or an environment can hold, the transitions between work-model statuses, and how the platform enforces them. The full status reference.
A status answers one question: where is this thing right now. Disco Parrot uses statuses in two distinct ways, and the difference is the key to this page. Your work records, initiatives, plans, bugs, and test cases, move through a status machine: a fixed set of states with defined transitions between them, which the platform enforces and which you can customize. Your runs and your infrastructure, a flow run, a step, a background task, a sandbox, an environment, report a runtime status: a state the system sets as work happens, so you can read what it is doing without driving it.
This page is the catalog of both. The work-model machines come first, with each one's states and the moves allowed between them. The runtime statuses follow, with what each value means and when you see it. The fields that carry these statuses are named on the work items reference; the concept behind the machines is on the workflows page, and customizing them is covered under customizing workflows.
How a status machine works
A work-model status machine has three parts: an ordered set of statuses, one of them the starting status, and a set of allowed transitions that say which status can move to which. When you move a record, the platform checks the move against that machine and refuses any transition the machine does not allow, so a plan cannot jump straight from draft to complete if no transition connects them. Moving a record to the status it already holds is always allowed and does nothing.
Five record types have a status machine: initiatives, plans, bugs, test cases, and flows. You can tailor the statuses and the transitions for initiatives, plans, and bugs to match how your team works. Test cases use a fixed machine, since their passing and failing states come from running the test rather than from editing it. A flow's lifecycle is driven by the run engine rather than by manual moves, so its states are covered with the runtime statuses below. Goals have no status machine at all: a goal's status is a health label you set, and its progress is a number derived from its key results.
Initiative statuses
The initiative machine starts at planning and ends at done, with blocked and cancelled reachable from the active states. Both end states can be reopened.
| Status | Moves to |
|---|---|
planning | approved, blocked, cancelled |
approved | in-progress, planning, cancelled |
in-progress | blocked, done, cancelled |
blocked | in-progress, planning, cancelled |
done | in-progress |
cancelled | planning |
Starting status: planning. End states: done and cancelled, each reopenable.
Plan statuses
The plan machine is the simplest of the three you can customize: draft to in-progress to complete, with blocked alongside and cancelled as the off-ramp.
| Status | Moves to |
|---|---|
draft | in-progress, blocked, cancelled |
in-progress | complete, blocked, draft, cancelled |
complete | in-progress |
blocked | in-progress, draft, cancelled |
cancelled | draft |
Starting status: draft. End states: complete and cancelled, each reopenable. A plan's pull-request status is a separate field from this lifecycle: a merged PR sets the plan's PR status without moving its workflow status, so completing the plan stays a deliberate step.
Bug statuses
The bug machine is the longest, walking a defect from triage through review to a verified fix.
| Status | Moves to |
|---|---|
triage | backlog, todo, in-progress, canceled |
backlog | todo, in-progress, canceled |
todo | in-progress, backlog, canceled |
in-progress | in-review, fixed, backlog, canceled |
in-review | in-progress, fixed |
fixed | verified, in-progress |
verified | closed |
closed | in-progress |
canceled | triage |
Starting status: triage. Moving a bug to canceled requires a resolution, so a canceled bug always records why it was settled. When a pull request that fixes a bug opens and merges, the platform advances the bug's status from the webhook, which is the one path that moves a status without a manual transition.
A bug's status and its resolution are different fields. Status is where the bug sits in the workflow; resolution is why it was settled. A bug in its fixed, verified, or closed status still carries a separate resolution value such as fixed, duplicate, or wont-fix.
On a sprint board, these nine statuses map onto three columns, so a long machine still reads at a glance.
Test case statuses
A test case has two kinds of state. Its authoring states, draft, active, and obsolete, you set by editing the test. Its outcome states, passing and failing, are recorded by exercising the test against a plan, not by editing the record.
| Status | Moves to |
|---|---|
draft | active, obsolete |
active | draft, passing, failing, obsolete |
passing | failing, active, obsolete |
failing | passing, active, obsolete |
obsolete | active |
Starting status: draft. The passing and failing states are recorded only by running the test, which is why this machine is fixed rather than customizable.
Runtime statuses
Runtime statuses are set by the platform as work runs. You read them rather than drive them, and they answer what a run, a task, a sandbox, or an environment is doing right now.
Five things report a runtime status: a flow run and the steps inside it, a background task, a sandbox, and an environment. The first two are the run itself, the last three are the machinery a run uses, and each table below says what every value means and when you see it.
Flow run statuses
A flow run reports one of nine statuses. The first four are the happy path; the rest are the ways a run pauses, stops, or needs attention.
| Status | Meaning |
|---|---|
pending | The run is created and has not started. |
running | The run is executing its steps. |
paused | The run is waiting at a checkpoint for an approval. |
completed | Every step finished and the run succeeded. |
failed | A step failed and the run stopped. It can be retried. |
rejected | A person rejected the run at a checkpoint. |
cancelled | A person cancelled the run. |
blocked | The run is parked waiting on a precondition: credentials or repository access it could not get, an environment policy that holds it, or a connected tool it could not reach. |
interrupted_by_deploy | The host that was running the work rotated to a new revision mid-run. The run can be retried. |
The completed, failed, and interrupted runs can be started again, which sends them back to pending. A cancelled run is the one true end. See running a flow and managing checkpoints for how these play out in a run.
Flow step statuses
Each step inside a run reports its own status.
| Status | Meaning |
|---|---|
pending | The step has not been reached yet. |
running | The step is executing. |
completed | The step finished successfully. |
failed | The step's work failed. |
blocked | The step is parked on a precondition, the same way a run can be. |
skipped | The step's condition told the run to skip it, or a rejected checkpoint skipped it. |
cancelled | The step was cancelled along with its run. |
Background task statuses
A background task is agent work you are not watching. It carries a status that tells you where it stands.
| Status | Meaning |
|---|---|
provisioning | The task's sandbox is spinning up before the agent starts. |
running | The agent is working in its sandbox. |
review | The agent finished, or a flow paused at a checkpoint, and the task is waiting with its results for you. |
merged | The work ran to completion and landed: a background flow that went all the way to its pull request. |
failed | The task hit an error, was cancelled, or was interrupted by a server restart. |
A backgrounded chat settles into review, which is your cue to open it, look at what changed, and continue in chat if you want to take it further. A background flow can run further still, all the way to merged, because it has a pull request to land its work in.
Sandbox statuses
A sandbox reports where its container is in its short life.
| Status | Meaning |
|---|---|
creating | The container is being provisioned and is not ready yet. The chat indicator shows this as starting. |
running | The container is up and reachable. |
paused | The container scaled to zero after sitting idle, and will resume on the next use. |
destroyed | The container is gone, either torn down after use or recreated because its launch settings changed. |
failed | The container hit an error while launching. |
A sandbox pauses on its own once it has been idle past its timeout, and resumes when work comes back to it. If a profile, image, host, or identity behind a sandbox changes, the platform destroys the old container and creates a fresh one so a run never inherits stale settings.
Environment health statuses
An environment reports a health status derived from the open blockers against it.
| Status | Meaning |
|---|---|
healthy | No open blockers. |
degraded | An open warning, but nothing blocking. |
blocked | An open blocking event is holding runtime-dependent work. |
unknown | The environment's health has not been evaluated yet. |
A blocker is an event with a severity, blocking or warning, and a reason that says what it is about. A person resolves or dismisses it to clear it. The platform raises a blocker for one of these reasons:
| Reason | What it is about |
|---|---|
infra_required | The change touches infrastructure, such as Terraform, Bicep, or Kubernetes manifests. |
schema_migration_required | The change includes a database migration. |
pipeline_environment_required | The change needs a pipeline environment to be in place. |
secret_identity_required | The change needs a secret or an identity that is not yet provisioned. |
capability_gap | A tool the work needs, such as Terraform, kubectl, or the cloud CLI, is not available in the sandbox. |
When an environment is blocked, the flow runs that depend on it park at their blocked status until a person clears the event. The connection between the two is what makes propose-only environments enforceable rather than advisory; the governance view is on human oversight and approvals.
Why statuses work this way
The split between a status machine and a runtime status is the whole idea, and it is worth saying why it holds. A work record's status is a promise about process. When your team agrees that a plan goes draft, to in-progress, to complete, that agreement is only worth anything if the platform keeps it, which is why the transitions are enforced rather than suggested and why a move the machine does not allow is refused. You get to write the rule, by customizing the machine, and then the rule holds for everyone, including the agent, because the agent moves a record through the same transitions a person does.
A runtime status is the opposite kind of thing. Nobody agrees that a sandbox should pause when it goes idle; it pauses because it went idle, and the status is the platform telling you so. Trying to make those states editable would be a category error, because they are observations, not decisions. Keeping the two kinds of status apart, one you govern and one you read, is what lets a status mean something precise in both directions: a plan in review is there because someone moved it, and a run that is blocked is there because something is genuinely in its way.
For an administrator, the transition tables here are the starting point for a custom workflow. When you add a status or a transition to the initiative, plan, or bug machine, these defaults are what you are changing, and the customizing workflows page is how.
For a power user, the status values are exactly what a board column maps to and what a filtered view matches. A view that gathers every bug in triage or in-review keys off the values listed here.
For an engineer, the runtime statuses are the vocabulary of a run. A blocked run, an interrupted-by-deploy run, a sandbox that recreated itself, each has a precise meaning here, so a blocked status on a card tells you to clear a precondition and an interrupted-by-deploy status tells you to retry, with no guesswork about which.
For a prospect, the enforcement is the point worth weighing. A platform that lets agents move work is only trustworthy if the work follows the same rules people do, and a status machine the platform actually enforces is how that rule gets kept.
The fields that carry these statuses, and every other field on a record.
The status machines explained as a concept, not a catalog.
How to change the statuses and transitions for your team.
When a run reaches a stopped state, the fix for each one.