From d04934359affa7ae6b054f168c0b33252cc2b900 Mon Sep 17 00:00:00 2001 From: Shirone Date: Sat, 24 Jan 2026 15:44:39 +0100 Subject: [PATCH] fix: Invalidate all features query on pipeline_step_started event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a pipeline step starts, the feature status changes to the pipeline column status. Previously, only the single feature query was invalidated, but the Kanban board uses the all features query for column grouping. This caused the UI to not immediately reflect features moving to custom pipeline columns - updates would only appear after the first pipeline step completed. Fixes #668 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- apps/ui/src/hooks/use-query-invalidation.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/ui/src/hooks/use-query-invalidation.ts b/apps/ui/src/hooks/use-query-invalidation.ts index f331f1d3..ae53d1e0 100644 --- a/apps/ui/src/hooks/use-query-invalidation.ts +++ b/apps/ui/src/hooks/use-query-invalidation.ts @@ -115,13 +115,16 @@ export function useAutoModeQueryInvalidation(projectPath: string | undefined) { // This allows polling to be disabled when WebSocket events are flowing recordGlobalEvent(); - // Invalidate features when agent completes, errors, or receives plan approval + // Invalidate features when agent completes, errors, receives plan approval, or pipeline step changes + // Note: pipeline_step_started is included to ensure Kanban board immediately reflects + // feature moving to custom pipeline columns (fixes GitHub issue #668) if ( event.type === 'auto_mode_feature_complete' || event.type === 'auto_mode_error' || event.type === 'plan_approval_required' || event.type === 'plan_approved' || event.type === 'plan_rejected' || + event.type === 'pipeline_step_started' || event.type === 'pipeline_step_complete' ) { queryClient.invalidateQueries({ @@ -142,11 +145,12 @@ export function useAutoModeQueryInvalidation(projectPath: string | undefined) { } // Invalidate specific feature when it starts or has phase changes + // Note: pipeline_step_started is NOT included here because it already invalidates + // features.all() above, which also invalidates child queries (features.single) if ( (event.type === 'auto_mode_feature_start' || event.type === 'auto_mode_phase' || - event.type === 'auto_mode_phase_complete' || - event.type === 'pipeline_step_started') && + event.type === 'auto_mode_phase_complete') && 'featureId' in event ) { queryClient.invalidateQueries({