fix(state): only planning-active children are drafts; allow improvement children to queue

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-06-04 15:40:26 +02:00
parent 7873e60095
commit 8036de1019

View File

@@ -344,8 +344,9 @@ public sealed class TaskStateService : ITaskStateService
.SetProperty(t => t.Result, resultText), ct);
}
// A subtask is "draft" until its planning parent is finalized. Draft subtasks must not be
// queued or run by any path (UI, queue, RunNow, MCP). Standalone tasks are never draft.
// A subtask is "draft" only while its planning parent has an open (Active) session.
// Improvement children whose parent has PlanningPhase.None are not drafts and may be
// queued freely. Standalone tasks (no parent) are never draft.
private static async Task<bool> IsDraftChildAsync(ClaudeDoDbContext ctx, string taskId, CancellationToken ct)
{
var parentId = await ctx.Tasks.AsNoTracking()
@@ -354,9 +355,8 @@ public sealed class TaskStateService : ITaskStateService
.FirstOrDefaultAsync(ct);
if (parentId is null) return false;
var parentFinalized = await ctx.Tasks.AsNoTracking()
.AnyAsync(p => p.Id == parentId && p.PlanningPhase == PlanningPhase.Finalized, ct);
return !parentFinalized;
return await ctx.Tasks.AsNoTracking()
.AnyAsync(p => p.Id == parentId && p.PlanningPhase == PlanningPhase.Active, ct);
}
private async Task OnChildTerminalAsync(string taskId, TaskStatus finalStatus)