Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

State Machine Diagrams

Auto-generated from Rust source analysis. Do not edit manually.

Regenerate with: cargo make generate-state-machines

Tasker uses two state machines to manage the lifecycle of tasks and workflow steps. Both are implemented in tasker-shared/src/state_machine/.

Task State Machine

The task state machine manages the overall lifecycle of a task through 12 states. Tasks progress from Pending through initialization, step enqueuing, processing, and evaluation phases, with support for dependency waiting, retry, and manual resolution.

stateDiagram-v2
    [*] --> Pending
    Complete --> [*]
    Error --> [*]
    Cancelled --> [*]
    ResolvedManually --> [*]

    Pending --> Initializing : Start
    Initializing --> EnqueuingSteps : ReadyStepsFound
    Initializing --> Complete : NoStepsFound
    Initializing --> WaitingForDependencies : NoDependenciesReady
    EnqueuingSteps --> StepsInProcess : StepsEnqueued
    EnqueuingSteps --> Error : EnqueueFailed
    StepsInProcess --> EvaluatingResults : AllStepsCompleted
    StepsInProcess --> EvaluatingResults : StepCompleted
    StepsInProcess --> WaitingForRetry : StepFailed
    EvaluatingResults --> Complete : AllStepsSuccessful
    EvaluatingResults --> EnqueuingSteps : ReadyStepsFound
    EvaluatingResults --> WaitingForDependencies : NoDependenciesReady
    EvaluatingResults --> BlockedByFailures : PermanentFailure
    WaitingForDependencies --> EvaluatingResults : DependenciesReady
    WaitingForRetry --> EnqueuingSteps : RetryReady
    BlockedByFailures --> Error : GiveUp
    BlockedByFailures --> ResolvedManually : ManualResolution
    Pending --> Cancelled : Cancel [guard]
    Initializing --> Cancelled : Cancel [guard]
    EnqueuingSteps --> Cancelled : Cancel [guard]
    StepsInProcess --> Cancelled : Cancel [guard]
    EvaluatingResults --> Cancelled : Cancel [guard]
    WaitingForDependencies --> Cancelled : Cancel [guard]
    WaitingForRetry --> Cancelled : Cancel [guard]
    BlockedByFailures --> Cancelled : Cancel [guard]
    StepsInProcess --> Complete : Complete
    StepsInProcess --> Error : Fail
    Error --> Pending : Reset
    note right of ResolvedManually : From any state via ResolveManually

Task State Transitions

From StateEventTo StateNotes
PendingStartInitializing
InitializingReadyStepsFoundEnqueuingSteps
InitializingNoStepsFoundComplete
InitializingNoDependenciesReadyWaitingForDependencies
EnqueuingStepsStepsEnqueuedStepsInProcess
EnqueuingStepsEnqueueFailedError
StepsInProcessAllStepsCompletedEvaluatingResults
StepsInProcessStepCompletedEvaluatingResults
StepsInProcessStepFailedWaitingForRetry
EvaluatingResultsAllStepsSuccessfulComplete
EvaluatingResultsReadyStepsFoundEnqueuingSteps
EvaluatingResultsNoDependenciesReadyWaitingForDependencies
EvaluatingResultsPermanentFailureBlockedByFailures
WaitingForDependenciesDependenciesReadyEvaluatingResults
WaitingForRetryRetryReadyEnqueuingSteps
BlockedByFailuresGiveUpError
BlockedByFailuresManualResolutionResolvedManually
(any non-terminal)CancelCancelledGuard: !state.is_terminal()
StepsInProcessCompleteComplete
StepsInProcessFailError
ErrorResetPending
(any non-terminal)ResolveManuallyResolvedManually

Workflow Step State Machine

The workflow step state machine manages individual step execution through 10 states. Steps follow a worker-to-orchestration handoff pattern: workers execute steps and enqueue results for orchestration processing.

stateDiagram-v2
    [*] --> Pending
    Complete --> [*]
    Error --> [*]
    Cancelled --> [*]
    ResolvedManually --> [*]

    Pending --> Enqueued : Enqueue
    Enqueued --> InProgress : Start
    Pending --> InProgress : Start
    InProgress --> EnqueuedForOrchestration : EnqueueForOrchestration
    InProgress --> EnqueuedAsErrorForOrchestration : EnqueueAsErrorForOrchestration
    EnqueuedForOrchestration --> Complete : Complete
    EnqueuedForOrchestration --> Error : Fail
    EnqueuedAsErrorForOrchestration --> Error : Fail
    EnqueuedAsErrorForOrchestration --> Complete : Complete
    InProgress --> Complete : Complete
    InProgress --> Error : Fail
    Pending --> Error : Fail
    Enqueued --> Error : Fail
    Pending --> Cancelled : Cancel
    Enqueued --> Cancelled : Cancel
    InProgress --> Cancelled : Cancel
    EnqueuedForOrchestration --> Cancelled : Cancel
    EnqueuedAsErrorForOrchestration --> Cancelled : Cancel
    Error --> Cancelled : Cancel
    Error --> Pending : Retry
    InProgress --> WaitingForRetry : WaitForRetry
    Enqueued --> WaitingForRetry : WaitForRetry
    Pending --> WaitingForRetry : WaitForRetry
    EnqueuedAsErrorForOrchestration --> WaitingForRetry : WaitForRetry
    WaitingForRetry --> Pending : Retry
    WaitingForRetry --> Cancelled : Cancel
    note right of Complete : From any state via CompleteManually
    note right of ResolvedManually : From any state via ResolveManually
    Error --> Pending : ResetForRetry

Workflow Step State Transitions

From StateEventTo State
PendingEnqueueEnqueued
EnqueuedStartInProgress
PendingStartInProgress
InProgressEnqueueForOrchestrationEnqueuedForOrchestration
InProgressEnqueueAsErrorForOrchestrationEnqueuedAsErrorForOrchestration
EnqueuedForOrchestrationCompleteComplete
EnqueuedForOrchestrationFailError
EnqueuedAsErrorForOrchestrationFailError
EnqueuedAsErrorForOrchestrationCompleteComplete
InProgressCompleteComplete
InProgressFailError
PendingFailError
EnqueuedFailError
PendingCancelCancelled
EnqueuedCancelCancelled
InProgressCancelCancelled
EnqueuedForOrchestrationCancelCancelled
EnqueuedAsErrorForOrchestrationCancelCancelled
ErrorCancelCancelled
ErrorRetryPending
InProgressWaitForRetryWaitingForRetry
EnqueuedWaitForRetryWaitingForRetry
PendingWaitForRetryWaitingForRetry
EnqueuedAsErrorForOrchestrationWaitForRetryWaitingForRetry
WaitingForRetryRetryPending
WaitingForRetryCancelCancelled
(any state)CompleteManuallyComplete
(any state)ResolveManuallyResolvedManually
ErrorResetForRetryPending

Generated by generate-state-machines.sh from tasker-core Rust source analysis