fix(worker): advance parent when the last non-terminal child is deleted
DeleteTask never re-evaluated a WaitingForChildren parent, so deleting the last non-terminal child left it stuck (the BlockedByTaskId SET NULL FK only repairs the blocked chain, not parent status). Expose TaskStateService.TryAdvanceParentAsync on the interface and call it from ExternalMcpService.DeleteTask after a child delete.
This commit is contained in:
@@ -395,9 +395,18 @@ public sealed class TaskStateService : ITaskStateService
|
||||
_logger.LogWarning(ex, "PlanningChain advance failed for {TaskId}", taskId);
|
||||
}
|
||||
|
||||
await TryAdvanceParentAsync(parentId);
|
||||
}
|
||||
|
||||
// Any parent (planning or improvement) sitting in WaitingForChildren surfaces for review
|
||||
// once every child is terminal (Done/Failed/Cancelled). A failed or cancelled child does
|
||||
// not wedge the parent — it is flagged on the result. Also called directly after a child
|
||||
// is deleted, since no terminal transition fires in that case.
|
||||
public async Task TryAdvanceParentAsync(string parentId)
|
||||
{
|
||||
try
|
||||
{
|
||||
await TryAdvanceParentAsync(parentId);
|
||||
await AdvanceParentIfAllChildrenTerminalAsync(parentId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -405,10 +414,7 @@ public sealed class TaskStateService : ITaskStateService
|
||||
}
|
||||
}
|
||||
|
||||
// Any parent (planning or improvement) sitting in WaitingForChildren surfaces for review
|
||||
// once every child is terminal (Done/Failed/Cancelled). A failed or cancelled child does
|
||||
// not wedge the parent — it is flagged on the result.
|
||||
private async Task TryAdvanceParentAsync(string parentId)
|
||||
private async Task AdvanceParentIfAllChildrenTerminalAsync(string parentId)
|
||||
{
|
||||
string? parentResult;
|
||||
List<TaskStatus> childStatuses;
|
||||
|
||||
Reference in New Issue
Block a user