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