multica/server/migrations/022_task_lifecycle_guards.up.sql
Jiayuan b112d1f1ae feat(tasks): add coalescing queue and task lifecycle guards
- Coalescing queue: use HasPendingTaskForIssue (queued/dispatched only)
  instead of HasActiveTaskForIssue so comments during a running task
  enqueue exactly one follow-up task that picks up all new comments.
- Stale task cleanup: runtime sweeper now fails orphaned tasks when
  their runtime goes offline (daemon crash/network partition).
- Cancel-aware daemon: handleTask checks task status after execution
  and discards results if the task was cancelled mid-run (e.g. reassign).
- Terminal issue guard: ClaimTaskForRuntime auto-cancels pending tasks
  for done/cancelled issues instead of executing them.
- Race condition safety net: unique partial index ensures at most one
  pending task per issue at the DB level.
2026-03-29 17:52:35 +08:00

5 lines
278 B
SQL

-- Prevent duplicate pending tasks for the same issue (coalescing queue safety net).
-- At most one queued/dispatched task per issue at any time.
CREATE UNIQUE INDEX idx_one_pending_task_per_issue
ON agent_task_queue (issue_id)
WHERE status IN ('queued', 'dispatched');