diff --git a/apps/app/src/components/views/board-view/components/kanban-card.tsx b/apps/app/src/components/views/board-view/components/kanban-card.tsx index 0cb7a366..8602b375 100644 --- a/apps/app/src/components/views/board-view/components/kanban-card.tsx +++ b/apps/app/src/components/views/board-view/components/kanban-card.tsx @@ -1102,7 +1102,23 @@ export const KanbanCard = memo(function KanbanCard({ Refine )} - {onCommit && ( + {/* Show Verify button if PR was created (changes are committed), otherwise show Commit button */} + {feature.prUrl && onManualVerify ? ( + + ) : onCommit ? ( Commit - )} + ) : null} > )} {!isCurrentAutoTask && feature.status === "backlog" && ( diff --git a/apps/app/src/components/views/board-view/worktree-panel/components/worktree-tab.tsx b/apps/app/src/components/views/board-view/worktree-panel/components/worktree-tab.tsx index 4f130db7..0c7adbbe 100644 --- a/apps/app/src/components/views/board-view/worktree-panel/components/worktree-tab.tsx +++ b/apps/app/src/components/views/board-view/worktree-panel/components/worktree-tab.tsx @@ -1,8 +1,14 @@ "use client"; import { Button } from "@/components/ui/button"; -import { RefreshCw, Globe, Loader2 } from "lucide-react"; +import { RefreshCw, Globe, Loader2, CircleDot } from "lucide-react"; import { cn } from "@/lib/utils"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; import type { WorktreeInfo, BranchInfo, DevServerInfo } from "../types"; import { BranchSwitchDropdown } from "./branch-switch-dropdown"; import { WorktreeActionsDropdown } from "./worktree-actions-dropdown"; @@ -10,6 +16,8 @@ import { WorktreeActionsDropdown } from "./worktree-actions-dropdown"; interface WorktreeTabProps { worktree: WorktreeInfo; cardCount?: number; // Number of unarchived cards for this branch + hasChanges?: boolean; // Whether the worktree has uncommitted changes + changedFilesCount?: number; // Number of files with uncommitted changes isSelected: boolean; isRunning: boolean; isActivating: boolean; @@ -46,6 +54,8 @@ interface WorktreeTabProps { export function WorktreeTab({ worktree, cardCount, + hasChanges, + changedFilesCount, isSelected, isRunning, isActivating, @@ -78,8 +88,24 @@ export function WorktreeTab({ onStopDevServer, onOpenDevServerUrl, }: WorktreeTabProps) { + // Determine border color based on state: + // - Running features: cyan border (high visibility, indicates active work) + // - Uncommitted changes: amber border (warning state, needs attention) + // - Both: cyan takes priority (running is more important to see) + const getBorderClasses = () => { + if (isRunning) { + return "ring-2 ring-cyan-500 ring-offset-1 ring-offset-background"; + } + if (hasChanges) { + return "ring-2 ring-amber-500 ring-offset-1 ring-offset-background"; + } + return ""; + }; + + const borderClasses = getBorderClasses(); + return ( -
{changedFilesCount ?? "Some"} uncommitted file{changedFilesCount !== 1 ? "s" : ""}
+