Opening as an issue instead of a PR, since I’m not sure if this is intentional or a bug. Expected behavior was that manually marking as In Progress would move the task from Blocked to In Progress, not back to the Backlog.
Steps to reproduce
- Execute a task and let it become blocked while its executor poller remains alive, such as at a permission prompt.
- Press
Shift-S and change its status to In Progress.
- Observe the task briefly enter In Progress, then move to Backlog.
Expected behavior
The task remains queued/In Progress and resumes through a fresh executor run.
Actual behavior
The previous executor poller sees the internal queued status and returns Interrupted. Finalization treats that as a user cancellation and changes the task to backlog.
Relevant flow:
showChangeStatus maps In Progress to StatusQueued.
pollTmuxSession returns Interrupted: true upon seeing StatusQueued.
executeTask handles every interrupted result by writing StatusBacklog.
This appears timing-dependent because it requires the previous poller to remain registered.
Suggested fix
Distinguish requeueing from genuine interruption. Preserve queued when the old poller exits, release its running-task slot, and wake the worker for a fresh execution.
Environment
- TaskYou: 0.3.18
- Go: 1.24.4
- OS: macOS 26.5.1, arm64
Opening as an issue instead of a PR, since I’m not sure if this is intentional or a bug. Expected behavior was that manually marking as In Progress would move the task from Blocked to In Progress, not back to the Backlog.
Steps to reproduce
Shift-Sand change its status to In Progress.Expected behavior
The task remains queued/In Progress and resumes through a fresh executor run.
Actual behavior
The previous executor poller sees the internal
queuedstatus and returnsInterrupted. Finalization treats that as a user cancellation and changes the task tobacklog.Relevant flow:
showChangeStatusmaps In Progress toStatusQueued.pollTmuxSessionreturnsInterrupted: trueupon seeingStatusQueued.executeTaskhandles every interrupted result by writingStatusBacklog.This appears timing-dependent because it requires the previous poller to remain registered.
Suggested fix
Distinguish requeueing from genuine interruption. Preserve
queuedwhen the old poller exits, release its running-task slot, and wake the worker for a fresh execution.Environment