From 00a065bf7ff5e9a431691600edf3d86783ecece7 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Tue, 9 Jun 2026 09:53:57 +0200 Subject: [PATCH] fix(review): populate review queue from WaitingForReview tasks ReviewFilter matched Status==Done && active worktree, but a successful run lands a task in WaitingForReview, so the Review virtual list was always empty. Match WaitingForReview instead; update VirtualFilterTests accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/ClaudeDo.Data/Filtering/Filters/ReviewFilter.cs | 3 +-- .../Filtering/VirtualFilterTests.cs | 12 ++++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ClaudeDo.Data/Filtering/Filters/ReviewFilter.cs b/src/ClaudeDo.Data/Filtering/Filters/ReviewFilter.cs index 58a8f74..50c479c 100644 --- a/src/ClaudeDo.Data/Filtering/Filters/ReviewFilter.cs +++ b/src/ClaudeDo.Data/Filtering/Filters/ReviewFilter.cs @@ -7,8 +7,7 @@ public sealed class ReviewFilter : ITaskListFilter { public string Id => "virtual:review"; public bool Matches(TaskEntity t) => - t.Status == TaskStatus.Done && - t.Worktree is { State: WorktreeState.Active }; + t.Status == TaskStatus.WaitingForReview; public bool ShouldCount(TaskEntity t) => Matches(t); public bool MatchesAsContext(TaskEntity t, IReadOnlyList all) => false; } diff --git a/tests/ClaudeDo.Data.Tests/Filtering/VirtualFilterTests.cs b/tests/ClaudeDo.Data.Tests/Filtering/VirtualFilterTests.cs index 0f97f71..20d56bd 100644 --- a/tests/ClaudeDo.Data.Tests/Filtering/VirtualFilterTests.cs +++ b/tests/ClaudeDo.Data.Tests/Filtering/VirtualFilterTests.cs @@ -78,20 +78,20 @@ public sealed class VirtualFilterTests // --- Review --- [Fact] - public void Review_matches_only_done_with_active_worktree() + public void Review_matches_only_waiting_for_review() { var f = new ReviewFilter(); - Assert.True (f.Matches(TaskFactory.Make("a", status: TaskStatus.Done, worktreeState: WorktreeState.Active))); - Assert.False(f.Matches(TaskFactory.Make("b", status: TaskStatus.Done, worktreeState: WorktreeState.Merged))); - Assert.False(f.Matches(TaskFactory.Make("c", status: TaskStatus.Done, worktreeState: null))); - Assert.False(f.Matches(TaskFactory.Make("d", status: TaskStatus.Failed, worktreeState: WorktreeState.Active))); + Assert.True (f.Matches(TaskFactory.Make("a", status: TaskStatus.WaitingForReview, worktreeState: WorktreeState.Active))); + Assert.True (f.Matches(TaskFactory.Make("b", status: TaskStatus.WaitingForReview, worktreeState: null))); + Assert.False(f.Matches(TaskFactory.Make("c", status: TaskStatus.Done, worktreeState: WorktreeState.Active))); + Assert.False(f.Matches(TaskFactory.Make("d", status: TaskStatus.Failed, worktreeState: WorktreeState.Active))); } [Fact] public void Review_count_equals_match() { var f = new ReviewFilter(); - var t = TaskFactory.Make("a", status: TaskStatus.Done, worktreeState: WorktreeState.Active); + var t = TaskFactory.Make("a", status: TaskStatus.WaitingForReview, worktreeState: WorktreeState.Active); Assert.Equal(f.Matches(t), f.ShouldCount(t)); } }