Task workflow and ordering
This document describes the current Sally task workflow model after the task ordering and blocked-status update line.
Core model
Task identity and task order are now separate concerns.
Task.number- stable human-facing reference number inside a project
- should not change during normal reordering
- used when humans refer to a task by number
Task.position- mutable canonical project-wide order
- updated by reorder actions
- used to determine the current sequence of tasks across the project
This distinction matters because Sally now supports reorder operations that should change execution order without changing the stable task reference.
Status model
TaskStatusType now includes:
BACKLOGTODOIN_PROGRESSBLOCKEDREVIEWDONE
In practice, default Sally project workflows now use:
- Backlog
- In Progress
- Blocked
- Review
- Done
TODO remains available as a valid semantic status type, but it is not part of the current default seeded workflow.
Default project/task initialization
New default project statuses are created with ordered positions.
Current default order:
- Backlog →
position=0 - In Progress →
position=1 - Blocked →
position=2 - Review →
position=3 - Done →
position=4
Seed data was updated to match this model.
Reorder behaviors
Sally now has three different reorder paths.
1. Project status reorder
Purpose:
- reorder the workflow columns/statuses for a project
Behavior:
- the first status is pinned
- only the remaining statuses may be reordered
Interface:
- API:
POST /projects/:projectId/statuses/reorder - MCP:
project.statuses.reorder
2. Board task reorder
Purpose:
- move tasks within a board column or into another status column
Behavior:
- updates task
statusId - updates per-status task ordering through the provided ordered task list
- persists the resulting
positionvalues
Interface:
- API:
POST /tasks/reorder - MCP:
task.reorder
3. Project-wide task reorder
Purpose:
- reorder the canonical project task sequence without changing task status
Behavior:
- updates only
Task.position - preserves current status placement
- powers drag-and-drop ordering in the project task list view
Interface:
- API:
POST /projects/:projectId/tasks/reorder - MCP:
project.tasks.reorder
UI implications
The current UI uses this model in several places.
Project task list
- supports drag-and-drop reorder
- persists the full ordered task id list
- uses canonical
positionordering
Board view
- reads statuses ordered by status
position - reads tasks ordered by task
position - supports move/reorder behavior through the task reorder endpoint
Status settings
- supports drag-and-drop reorder for statuses
- keeps the first status pinned
- allows creation of statuses including
Blocked
API / response shape
Project, task, board, and recent-task responses now expose position so clients can render the canonical order consistently.
Examples include:
- project task list items
- board cards
- project recent tasks
- task detail payloads
- status option payloads
Migration impact
This release line includes:
- schema updates for the
BLOCKEDstatus model - migration
20260415162500_add_blocked_status - seed/default workflow updates
For installer-managed deployments, create-sally update is expected to apply these migrations automatically.