feat(runner): route standalone success with children to WaitingForChildren + enqueue them

This commit is contained in:
mika kuns
2026-06-04 15:46:38 +02:00
parent 8036de1019
commit c10f564265
2 changed files with 106 additions and 1 deletions

View File

@@ -340,7 +340,29 @@ public sealed class TaskRunner
await new TaskRepository(ctx).SetRoadblockCountAsync(task.Id, result.Blocks.Count, CancellationToken.None);
}
var reviewResult = ComposeReviewResult(result.ResultMarkdown, result.Blocks);
if (task.ParentTaskId is null && task.PlanningPhase == PlanningPhase.None)
bool isStandalone = task.ParentTaskId is null && task.PlanningPhase == PlanningPhase.None;
List<TaskEntity> pendingChildren = new();
if (isStandalone)
{
using var ctx = _dbFactory.CreateDbContext();
var children = await new TaskRepository(ctx).GetChildrenAsync(task.Id, CancellationToken.None);
pendingChildren = children
.Where(c => c.Status is TaskStatus.Idle or TaskStatus.Queued)
.ToList();
}
if (isStandalone && pendingChildren.Count > 0)
{
await _state.SubmitForChildrenAsync(task.Id, finishedAt, reviewResult, CancellationToken.None);
foreach (var child in pendingChildren)
await _state.EnqueueAsync(child.Id, CancellationToken.None);
await _broadcaster.WorkerLog(
$"Finished \"{task.Title}\" (waiting on {pendingChildren.Count} improvement(s))",
WorkerLogLevel.Success, DateTime.UtcNow);
await _broadcaster.TaskFinished(slot, task.Id, "waiting_for_children", finishedAt);
}
else if (isStandalone)
{
await _state.SubmitForReviewAsync(task.Id, finishedAt, reviewResult, CancellationToken.None);
await _broadcaster.WorkerLog($"Finished \"{task.Title}\" (waiting for review)", WorkerLogLevel.Success, DateTime.UtcNow);