Skip to content

Task states

A task’s status field holds one of two things: one of the six ordinary statuses, or a state belonging to its task type. Both are enforced the same way, by refusing a move that is not in the table.

StatusMeans
backlogWritten down, not scheduled. A starting state only
openReady to be picked up. What a new task starts at
in_progressBeing worked, usually by a run
blockedCannot proceed until something else changes
doneFinished and accepted
cancelledDeliberately not doing it
FromMay move to
backlogopen, cancelled
openin_progress, blocked, done, cancelled
in_progressblocked, done, cancelled
blockedopen, in_progress, cancelled
donenothing (reopen only)
cancellednothing (reopen only)

Anything not in that table is refused with a validation error naming both states. Three consequences follow from it:

  • Nothing returns to backlog. It is a starting state.
  • done and cancelled are terminal. They change only through reopen, which is a separate action rather than an ordinary move, and always lands on open.
  • in_progress cannot go back to open. Route it through blocked if work has genuinely stopped.

A task also carries a priority, which affects ordering rather than transitions: low, normal, high, urgent.

A task with a taskType replaces the six statuses entirely. Each type has its own initial state, its own terminal states, and its own transition table.

The content lifecycle, from a captured idea to a measured result. killed is reachable from every non-terminal state.

FromMay move to
captured (initial)ideating, killed
ideatingdrafting, killed
draftingverifying, killed
verifyinghuman_review, drafting, killed
human_reviewscheduling, drafting, killed
schedulingmeasuring, killed
measuringdone, killed

Terminal: done, killed. The two backward edges are the ones that matter in practice: verification and human review both send a draft back to drafting rather than failing it.

FromMay move to
pending (initial)scoring
scoringpassed, failed, needs_revision

Terminal: passed, failed, needs_revision. See verification tasks.

FromMay move to
pending (initial)approved, rejected, expired

Terminal: approved, rejected, expired. See approval and feedback tasks.

FromMay move to
awaiting_window (initial)collecting
collectingcollected, awaiting_window
collectedlearned

Terminal: learned. The edge back to awaiting_window is what lets one feedback task cover several measurement windows.

FromMay move to
waiting (initial)fired, cancelled

Terminal: fired, cancelled. See scheduled triggers.

The blocker a task carries when it needs information from you before work can start.

FromMay move to
pending (initial)collecting, cancelled
collectingcomplete, cancelled

Terminal: complete, cancelled.

The type a task has when it has no type. It accepts any state and any transition, which is why an ordinary task is validated against the six statuses above rather than against a graph.