diff --git a/apps/frontend/src/renderer/components/task-detail/task-review/WorkspaceMessages.tsx b/apps/frontend/src/renderer/components/task-detail/task-review/WorkspaceMessages.tsx index e2b33dc9..d9ea0e2f 100644 --- a/apps/frontend/src/renderer/components/task-detail/task-review/WorkspaceMessages.tsx +++ b/apps/frontend/src/renderer/components/task-detail/task-review/WorkspaceMessages.tsx @@ -107,15 +107,22 @@ export function StagedInProjectMessage({ task, projectPath, hasWorktree = false, try { // Call the discard/delete worktree command - const result = await window.electronAPI.discardWorktree(task.id); + // Pass skipStatusChange=true to prevent backend from resetting to 'backlog' + // since we explicitly set status to 'done' immediately after + const result = await window.electronAPI.discardWorktree(task.id, true); if (!result.success) { setError(result.error || 'Failed to delete worktree'); return; } - // Mark task as done - await persistTaskStatus(task.id, 'done'); + // Mark task as done - check result since worktree is already deleted + const statusResult = await persistTaskStatus(task.id, 'done'); + if (!statusResult.success) { + // Worktree is already deleted but status update failed - inform user of inconsistent state + setError('Worktree deleted but failed to update task status: ' + (statusResult.error || 'Unknown error')); + return; + } // Auto-close modal after marking as done onClose?.(); diff --git a/apps/frontend/src/renderer/lib/mocks/workspace-mock.ts b/apps/frontend/src/renderer/lib/mocks/workspace-mock.ts index 838410e8..6275895c 100644 --- a/apps/frontend/src/renderer/lib/mocks/workspace-mock.ts +++ b/apps/frontend/src/renderer/lib/mocks/workspace-mock.ts @@ -62,7 +62,7 @@ export const workspaceMock = { } }), - discardWorktree: async () => ({ + discardWorktree: async (_taskId: string, _skipStatusChange?: boolean) => ({ success: true, data: { success: true,