From 2f88378608cd33dbca114c137a922482dcb95d04 Mon Sep 17 00:00:00 2001 From: Anh Chu Date: Wed, 10 Jun 2026 11:22:37 +0700 Subject: [PATCH] fix: move ended sessions out of waiting --- Sources/KanbanCodeCore/UseCases/AssignColumn.swift | 6 ++++-- Tests/KanbanCodeCoreTests/AssignColumnTests.swift | 8 ++++---- Tests/KanbanCodeCoreTests/CardLifecycleTests.swift | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Sources/KanbanCodeCore/UseCases/AssignColumn.swift b/Sources/KanbanCodeCore/UseCases/AssignColumn.swift index efcd6625..c6aa0ba3 100644 --- a/Sources/KanbanCodeCore/UseCases/AssignColumn.swift +++ b/Sources/KanbanCodeCore/UseCases/AssignColumn.swift @@ -68,8 +68,10 @@ public enum AssignColumn { // Only .activelyWorking should keep a card in In Progress. return .waiting case .ended: - if hasWorktree { return .waiting } - // No worktree: fall through to recency check below + // Finished assistant sessions should leave the triage lanes. + // PR cards are handled above, and genuinely idle sessions use + // `.needsAttention` or `.idleWaiting`. + return .allSessions case .stale: break // No hook data: fall through to recency check below } diff --git a/Tests/KanbanCodeCoreTests/AssignColumnTests.swift b/Tests/KanbanCodeCoreTests/AssignColumnTests.swift index ba19a4a6..8c31b0a0 100644 --- a/Tests/KanbanCodeCoreTests/AssignColumnTests.swift +++ b/Tests/KanbanCodeCoreTests/AssignColumnTests.swift @@ -105,11 +105,11 @@ struct AssignColumnTests { #expect(col == .waiting) } - @Test("Ended with worktree → waiting") + @Test("Ended with worktree → allSessions") func endedWithWorktree() { let link = Link(sessionLink: SessionLink(sessionId: "s1")) let col = AssignColumn.assign(link: link, activityState: .ended, hasWorktree: true) - #expect(col == .waiting) + #expect(col == .allSessions) } @Test("Stale + recent → waiting (falls through to recency check)") @@ -126,11 +126,11 @@ struct AssignColumnTests { #expect(col == .allSessions) } - @Test("Ended without worktree, recent → waiting") + @Test("Ended without worktree, recent → allSessions") func endedNoWorktreeRecent() { let link = Link(lastActivity: Date.now.addingTimeInterval(-3600), sessionLink: SessionLink(sessionId: "s1")) let col = AssignColumn.assign(link: link, activityState: .ended) - #expect(col == .waiting) + #expect(col == .allSessions) } @Test("Ended without worktree, old → allSessions") diff --git a/Tests/KanbanCodeCoreTests/CardLifecycleTests.swift b/Tests/KanbanCodeCoreTests/CardLifecycleTests.swift index b4b4c2f7..38d79d43 100644 --- a/Tests/KanbanCodeCoreTests/CardLifecycleTests.swift +++ b/Tests/KanbanCodeCoreTests/CardLifecycleTests.swift @@ -86,7 +86,7 @@ struct CardLifecycleTests { #expect(link.column == .done) } - @Test("Ended session with worktree → waiting") + @Test("Ended session with worktree → allSessions") func endedWithWorktree() { var link = Link( column: .inProgress, @@ -94,7 +94,7 @@ struct CardLifecycleTests { worktreeLink: WorktreeLink(path: "", branch: "feature-x") ) UpdateCardColumn.update(link: &link, activityState: .ended, hasWorktree: true) - #expect(link.column == .waiting) + #expect(link.column == .allSessions) } @Test("Stale session → allSessions")