feat(mcp): allow Done via update_task_status with worktree guard

External tasks finished outside a ClaudeDo run had no way to close out
their tracking task; update_task_status now permits Done alongside
Idle/Queued/Cancelled, refusing it when the task has an active
worktree so review_task stays the only path that merges.
This commit is contained in:
mika kuns
2026-07-29 08:58:34 +02:00
parent 24f999facd
commit d569313598
6 changed files with 78 additions and 10 deletions
@@ -189,6 +189,22 @@ public sealed class BatchMcpToolsTests : IDisposable
Assert.Equal(TaskStatus.Queued, (await _tasks.GetByIdAsync(t2.Id))!.Status);
}
[Fact]
public async Task BatchUpdateTaskStatus_Done_MixedWorktreeState_ReportsPerItemAndDoesNotAbort()
{
var listId = await SeedListAsync();
var noWorktree = await SeedTaskAsync(listId, "no-wt", TaskStatus.Idle);
var missing = "does-not-exist";
var sut = BuildSut();
var results = await sut.BatchUpdateTaskStatus(
new[] { noWorktree.Id, missing }, "Done", CancellationToken.None);
Assert.True(results.Single(r => r.TaskId == noWorktree.Id).Ok);
Assert.False(results.Single(r => r.TaskId == missing).Ok);
Assert.Equal(TaskStatus.Done, (await _tasks.GetByIdAsync(noWorktree.Id))!.Status);
}
[Fact]
public async Task BatchTools_RejectEmptyBatch()
{