feat(worker): planning finalize enters WaitingForChildren

A finalized planning parent now joins the unified parent lifecycle:
WaitingForChildren while its child chain runs (or WaitingForReview directly
if it has no children), advancing to review like an improvement parent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-06-09 11:19:29 +02:00
parent b3a2daf40d
commit 12732d6dc9
2 changed files with 97 additions and 1 deletions

View File

@@ -289,12 +289,16 @@ public sealed class TaskStateService : ITaskStateService
public async Task<TransitionResult> FinalizePlanningAsync(string parentId, CancellationToken ct)
{
await using var ctx = await _dbFactory.CreateDbContextAsync(ct);
var hasChildren = await ctx.Tasks.AnyAsync(t => t.ParentTaskId == parentId, ct);
var newStatus = hasChildren ? TaskStatus.WaitingForChildren : TaskStatus.WaitingForReview;
var affected = await ctx.Tasks
.Where(t => t.Id == parentId && t.PlanningPhase == PlanningPhase.Active)
.ExecuteUpdateAsync(s => s
.SetProperty(t => t.PlanningPhase, PlanningPhase.Finalized)
.SetProperty(t => t.PlanningFinalizedAt, DateTime.UtcNow)
.SetProperty(t => t.PlanningSessionToken, (string?)null), ct);
.SetProperty(t => t.PlanningSessionToken, (string?)null)
.SetProperty(t => t.Status, newStatus), ct);
if (affected == 0)
return new TransitionResult(false, "No active planning session.");