From d28164caf4a04c0c6cdbbdbf27a3c5ad56b8160d Mon Sep 17 00:00:00 2001 From: mika kuns Date: Thu, 23 Apr 2026 21:04:06 +0200 Subject: [PATCH] feat(worker): PlanningSessionManager.GetPendingDraftCountAsync --- .../Planning/PlanningSessionManager.cs | 6 ++++++ .../Planning/PlanningSessionManagerTests.cs | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/ClaudeDo.Worker/Planning/PlanningSessionManager.cs b/src/ClaudeDo.Worker/Planning/PlanningSessionManager.cs index 61de7c0..e126e15 100644 --- a/src/ClaudeDo.Worker/Planning/PlanningSessionManager.cs +++ b/src/ClaudeDo.Worker/Planning/PlanningSessionManager.cs @@ -56,6 +56,12 @@ public sealed class PlanningSessionManager public Task FinalizeAsync(string taskId, bool queueAgentTasks, CancellationToken ct) => _tasks.FinalizePlanningAsync(taskId, queueAgentTasks, ct); + public async Task GetPendingDraftCountAsync(string taskId, CancellationToken ct) + { + var children = await _tasks.GetChildrenAsync(taskId, ct); + return children.Count(c => c.Status == TaskStatus.Draft); + } + public async Task DiscardAsync(string taskId, CancellationToken ct) { var ok = await _tasks.DiscardPlanningAsync(taskId, ct); diff --git a/tests/ClaudeDo.Worker.Tests/Planning/PlanningSessionManagerTests.cs b/tests/ClaudeDo.Worker.Tests/Planning/PlanningSessionManagerTests.cs index 6d6e4bc..b0196f6 100644 --- a/tests/ClaudeDo.Worker.Tests/Planning/PlanningSessionManagerTests.cs +++ b/tests/ClaudeDo.Worker.Tests/Planning/PlanningSessionManagerTests.cs @@ -176,6 +176,21 @@ public sealed class PlanningSessionManagerTests : IDisposable Assert.Equal(TaskStatus.Planned, loaded!.Status); } + [Fact] + public async Task GetPendingDraftCountAsync_ReturnsDraftCount() + { + var (listId, _) = await SeedListAsync(); + var parent = await SeedManualTaskAsync(listId); + await _sut.StartAsync(parent.Id, CancellationToken.None); + await _tasks.CreateChildAsync(parent.Id, "c1", null, null, null); + await _tasks.CreateChildAsync(parent.Id, "c2", null, null, null); + await _tasks.CreateChildAsync(parent.Id, "c3", null, null, null); + + var n = await _sut.GetPendingDraftCountAsync(parent.Id, CancellationToken.None); + + Assert.Equal(3, n); + } + [Fact] public async Task DiscardAsync_DeletesSessionDirAndResetsTask() {