diff --git a/src/ClaudeDo.Worker/Services/TaskMergeService.cs b/src/ClaudeDo.Worker/Services/TaskMergeService.cs index 005cf68..4884095 100644 --- a/src/ClaudeDo.Worker/Services/TaskMergeService.cs +++ b/src/ClaudeDo.Worker/Services/TaskMergeService.cs @@ -171,6 +171,7 @@ public sealed class TaskMergeService } if (wt is null) return Blocked("task has no worktree"); + if (wt.State != WorktreeState.Active) return Blocked($"worktree state is {wt.State}"); if (string.IsNullOrWhiteSpace(list.WorkingDir)) return Blocked("list has no working directory"); if (!await _git.IsMidMergeAsync(list.WorkingDir, ct)) return Blocked("repo is not mid-merge"); @@ -181,7 +182,8 @@ public sealed class TaskMergeService if (remaining.Count > 0) return new MergeResult(StatusConflict, remaining, "conflicts not fully resolved"); - await _git.CommitAsync(list.WorkingDir, $"Merge branch '{wt.BranchName}'", ct); + try { await _git.CommitAsync(list.WorkingDir, $"Merge branch '{wt.BranchName}'", ct); } + catch (Exception ex) { return Blocked($"commit failed: {ex.Message}"); } using (var ctx = _dbFactory.CreateDbContext()) {