From ef5dad270062200cb924ea404ba5df287ee39a1b Mon Sep 17 00:00:00 2001 From: mika kuns Date: Thu, 1 Oct 2026 13:26:47 +0200 Subject: [PATCH] fix(worker): batch_get_tasks accept "number" and "id" in fields filter batch_get_tasks with fields: ["number", ...] was rejected with "Unknown field(s)" even though every task DTO always carries id and number. Add both to KnownDetailFields so they are accepted; BuildDetail already emits them regardless of the fields filter. Also add a test verifying fields: ["number", "title"] works and description is properly excluded. --- src/ClaudeDo.Worker/External/BatchMcpTools.cs | 2 +- .../External/BatchMcpToolsTests.cs | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ClaudeDo.Worker/External/BatchMcpTools.cs b/src/ClaudeDo.Worker/External/BatchMcpTools.cs index 5bb0c16c..766c6724 100644 --- a/src/ClaudeDo.Worker/External/BatchMcpTools.cs +++ b/src/ClaudeDo.Worker/External/BatchMcpTools.cs @@ -79,7 +79,7 @@ public sealed class BatchMcpTools private static readonly string[] KnownDetailFields = { - "listId", "title", "description", "status", "result", "createdBy", "createdAt", + "id", "number", "listId", "title", "description", "status", "result", "createdBy", "createdAt", "startedAt", "finishedAt", "isMyDay", "sortOrder", "roadblockCount", "roadblockText", "failureReason", }; diff --git a/tests/ClaudeDo.Worker.Tests/External/BatchMcpToolsTests.cs b/tests/ClaudeDo.Worker.Tests/External/BatchMcpToolsTests.cs index 5d6a680d..2657c01d 100644 --- a/tests/ClaudeDo.Worker.Tests/External/BatchMcpToolsTests.cs +++ b/tests/ClaudeDo.Worker.Tests/External/BatchMcpToolsTests.cs @@ -324,6 +324,26 @@ public sealed class BatchMcpToolsTests : IDisposable Assert.Contains("notAField", ex.Message); } + [Fact] + public async Task BatchGetTasks_NumberAndIdFields_AcceptedAndReturned() + { + var listId = await SeedListAsync(); + var task = await SeedTaskAsync(listId); + task.Description = "full description not requested"; + await _tasks.UpdateAsync(task); + var sut = BuildSut(); + + var results = await sut.BatchGetTasks( + new[] { task.Id }, includeDescription: true, fields: new[] { "number", "title" }, + cancellationToken: CancellationToken.None); + + var found = results.Single(r => r.Id == task.Id).TaskFull!; + Assert.Equal(task.Number, found.Number); + Assert.Equal(task.Id, found.Id); + Assert.Equal(task.Title, found.Title); + Assert.Null(found.Description); // Not requested + } + [Fact] public async Task BatchGetTasks_RoadblockTextField_ExtractsTailOfResult_WithoutFullResult() {