diff --git a/src/ClaudeDo.Worker/Services/TaskMergeService.cs b/src/ClaudeDo.Worker/Services/TaskMergeService.cs index df54264..3691345 100644 --- a/src/ClaudeDo.Worker/Services/TaskMergeService.cs +++ b/src/ClaudeDo.Worker/Services/TaskMergeService.cs @@ -88,8 +88,15 @@ public sealed class TaskMergeService List files; try { files = await _git.ListConflictedFilesAsync(list.WorkingDir, ct); } catch { files = new(); } + + // If abort fails the repo is left mid-merge; the caller must resolve manually. + // Return Blocked (not conflict) so the UI does not offer a stale conflict list. try { await _git.MergeAbortAsync(list.WorkingDir, ct); } - catch (Exception ex) { _logger.LogWarning(ex, "git merge --abort failed after conflict"); } + catch (Exception ex) + { + _logger.LogError(ex, "git merge --abort failed after conflict — repo is mid-merge"); + return Blocked($"merge conflict and abort failed: {ex.Message} — repo is mid-merge, resolve manually"); + } if (files.Count == 0) {