Skip to main content

Task statuses and transitions

This page lists the statuses of a task and of a pick assignment, and what moves them. The rules live in crates/libs/wms-tasks/src/domain/task/aggregate.rs, crates/libs/wms-tasks/src/service/ and crates/libs/wms-outbound/src/picking/.

Task statuses​

StatusMeaning
CreatedIn the pool. Nobody holds it. Operators take their next task from here.
AssignedTaken by an operator (or given by a supervisor). Not started.
InProgressThe holder reported the first progress.
CompletedFinished with the full quantity. Final.
ShortedFinished with less than the planned quantity. Final.
CancelledDeclared, but nothing writes it. A task whose pick is removed is deleted instead (owner ruling, 2026-09-04). You will not see this status.

Source: crates/libs/wms-lib-core/src/model/tasks/task.rs:36-56.

Transitions​

FromActionToPage
CreatedThe operator takes it on the RF terminalAssigned
Created and escalatedReassign on the Task BoardAssigned to the chosen operator. The refusal counter is reset.Reassigning a task
AssignedFirst progress is reportedInProgress
Assigned, InProgressThe source finishes it (pick commit or short, count result)Completed if the quantity done reaches the plan, else Shorted
Assigned, InProgressThe operator refuses (reason) or hands back (no reason)CreatedSkip History
Assigned, InProgressReturn to PoolCreated, How Returned = SeizedReturning a task to the pool
Assigned, InProgressThe lease runs outCreated, How Returned = Expired
Assigned, InProgressA supervisor dissolves its pick assignmentCreated, How Returned = SeizedDissolving a pick assignment
Assigned, InProgressReassignThe same status, a new holderReassigning a task
CreatedDelete TaskThe row is deletedDeleting tasks
Completed, ShortedNothingNothing

Sources: aggregate.rs:60-200 (start, finish), release.rs:93-180 (refuse, hand back), release.rs:224-400 (reassign, return), task.rs:1886-1923 (lease), dissolve.rs (dissolve).

When a task goes back to the pool, Qty Done stays and Version goes up by one. The holder, the claim time, the start time and the lease are cleared.

How a task was returned​

The column How Returned on the Task Board holds one of four values. It is cleared when the task is taken again.

ValueDoorReason textCooldownRefusal counterLogged in Skip History
RefusedThe operator gives it back with a reasonThe operator's textYesPlus 1Yes
HandedBackThe operator gives it back with no reasonNoneNoNo changeYes
SeizedA supervisor: Return to Pool or DissolveThe supervisor's textNoNo changeNo
ExpiredThe lease ran outauto-release (lease expired)NoNo changeNo

Source: task.rs:1512-1575 (refused, handed back), task.rs:1685-1708 (seized), task.rs:1904-1923 (expired), task.rs:854-885 (set release by dissolve), constraint ck_task_return_kind in 001_baseline.sql.

Numbers that decide what you see​

These are system settings. The values below are the defaults of a new database. An administrator can change them on the system settings screen.

SettingDefaultWhat it does
TASK_LEASE_TTL_MIN15Minutes an operator may keep a task without a sign of life. Then the lease reaper returns it.
TASK_SKIP_COOLDOWN_MIN10Minutes after a refusal during which nobody is offered the task.
TASK_SKIP_ESCALATE_AFTER3Number of refusals after which the task is escalated: it leaves the pool and waits for a supervisor.
TASK_MAX_CONCURRENT_DEFAULT1Tasks one operator may hold at once when the terminal names no work area.
TASK_ALLOW_RELEASE_DEFAULT1Whether an operator may refuse or hand back a task when the terminal names no work area. 0 forbids it.

Source: crates/libs/wms-lib-sql/sql/wms-app/migrations/001_baseline.sql (table system_settings, ids 1014 to 1018) and crates/libs/wms-tasks/src/service/claim.rs:189-261. A setting of zero or less for the lease, the cooldown or the escalation limit is ignored and the built-in default is used.

A work area can also forbid returns (allow_task_release = off). Then both a refusal and a hand back are refused with returning a task is not allowed in work area {area} — ask a supervisor to move it. The supervisor's way out is Return to Pool or Reassign. Source: crates/libs/wms-tasks/src/error.rs (ReleaseNotAllowed).

Pick assignment statuses​

StatusMeaning
BuildingPositions are being bound to physical boxes.
ReadyEvery position is bound. The route may start.
PickingThe operator picks along the route.
DeliveringEverything is picked. The cart goes to its delivery place.
CompletedDelivered. Final.
DissolvedEnded without delivery. Final.

Building, Ready, Picking and Delivering are live: they hold an operator, a cart, cartons and picks. Source: crates/libs/wms-lib-core/src/model/outbound/pick_assignment.rs:27-47.

FromActionTo
Building, Ready, PickingDissolve on the Pick Assignments listDissolved
Building, Ready, PickingThe holder dissolves it on the terminal (PKA09). After the first pick this needs a supervisor's confirmation.Dissolved
Building, Ready, PickingThe lease sweeper, when the assignment's lease ran out or it has no live memberDissolved
DeliveringDissolveRefused with PICK_ASSIGNMENT_DELIVERING
DeliveringThe holder delivers the cart (PKA30)Completed
Completed, DissolvedNothingNothing. Dissolve is refused with PICK_ASSIGNMENT_NOT_LIVE.

Source: crates/libs/wms-outbound/src/picking/commands/dissolve.rs:1-90, crates/libs/wms-outbound/src/domain/pick_assignment/aggregate.rs:538-581.

How the other statuses change (crates/libs/wms-lib-core/src/model/outbound/pick_assignment.rs):

  • Building becomes Ready in the same statement that binds the last Open position: no position is Open any more (PickAssignmentBmc::record_position_change, ruling R7).
  • After every route command (commit, short, skip, reject inside the assignment), the assignment becomes Delivering when no live member pick is Released any more. Otherwise a Ready assignment becomes Picking; a Picking one stays (PickAssignmentBmc::record_route_change, ruling R3). So a route whose last pick is committed or shorted goes straight to Delivering, also from Ready.

Position statuses are on Pick assignment card. Exception statuses are on Pick Target Exceptions.