fix(worker): emit PlanningMergeAborted (not Conflict) on non-conflict merge failures

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-04-24 18:32:52 +02:00
parent 3008c36921
commit ce23f64dc3

View File

@@ -96,11 +96,23 @@ public sealed class PlanningMergeOrchestrator
var current = state.CurrentSubtaskId; var current = state.CurrentSubtaskId;
var result = await _merge.ContinueMergeAsync(current, ct); var result = await _merge.ContinueMergeAsync(current, ct);
if (result.Status != TaskMergeService.StatusMerged)
if (result.Status == TaskMergeService.StatusConflict)
{ {
await _broadcaster.PlanningMergeConflict(planningTaskId, current, result.ConflictFiles); await _broadcaster.PlanningMergeConflict(planningTaskId, current, result.ConflictFiles);
return; return;
} }
if (result.Status != TaskMergeService.StatusMerged)
{
_logger.LogWarning(
"Planning continue blocked on subtask {Subtask}: {Msg}",
current, result.ErrorMessage);
_states.TryRemove(planningTaskId, out _);
await _broadcaster.PlanningMergeAborted(planningTaskId);
return;
}
await _broadcaster.PlanningSubtaskMerged(planningTaskId, current); await _broadcaster.PlanningSubtaskMerged(planningTaskId, current);
state.CurrentSubtaskId = null; state.CurrentSubtaskId = null;
@@ -144,11 +156,11 @@ public sealed class PlanningMergeOrchestrator
if (result.Status != TaskMergeService.StatusMerged) if (result.Status != TaskMergeService.StatusMerged)
{ {
await _broadcaster.PlanningMergeConflict( _logger.LogWarning(
planningTaskId, subtaskId, "Planning merge blocked on subtask {Subtask}: {Msg}",
new[] { result.ErrorMessage ?? "merge blocked" }); subtaskId, result.ErrorMessage);
keepState = true; await _broadcaster.PlanningMergeAborted(planningTaskId);
return; return; // keepState stays false → finally removes the state entry
} }
await _broadcaster.PlanningSubtaskMerged(planningTaskId, subtaskId); await _broadcaster.PlanningSubtaskMerged(planningTaskId, subtaskId);