chore(claude-do): merge [C4] Rebase-after-Merge sichtbar machen + WorktreeMaintenanc

ClaudeDo-Task: 0a64e32d-6308-4f2d-a69e-fb8b3cabd01a
This commit is contained in:
mika kuns
2026-08-21 13:51:01 +02:00
8 changed files with 183 additions and 9 deletions
@@ -64,6 +64,7 @@ public sealed class TaskMergeService
// Phase tokens for the OperationProgress broadcast — stable identifiers, localized by the UI.
public const string PhaseMerging = "merging";
public const string PhaseVerifying = "verifying";
public const string PhaseRebasing = "rebasing";
public const string PreviewClean = "clean";
public const string PreviewConflict = "conflict";
@@ -296,9 +297,15 @@ public sealed class TaskMergeService
var tasks = await new TaskRepository(ctx).GetByListIdAsync(list.Id, ct);
candidates = tasks.Where(t => t.Id != mergedTask.Id && t.Status == TaskStatus.WaitingForReview).ToList();
}
if (candidates.Count == 0) return;
foreach (var candidate in candidates)
await RebaseOneIfOverlappingAsync(candidate, targetBranch, newTargetTip, landedFiles, ct);
// Runs where the stalled "Merging…" phase would otherwise sit unchanged in the UI while
// this loop does real (if best-effort) work — see the correction note in the task spec.
for (var i = 0; i < candidates.Count; i++)
{
await _broadcaster.OperationProgress(mergedTask.Id, PhaseRebasing, i + 1, candidates.Count);
await RebaseOneIfOverlappingAsync(candidates[i], targetBranch, newTargetTip, landedFiles, ct);
}
}
private async Task RebaseOneIfOverlappingAsync(