From 231a4c74eac5f0f058d739ac7642d956353ba4fe Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 21 Jan 2026 01:01:41 +0000 Subject: [PATCH 1/2] feat: Allow drag-to-create dependencies between any non-completed features Previously, the card drag-to-create-dependency feature only worked between backlog features. This expands the functionality to allow creating dependency links between features in any status (except completed). Changes: - Make all non-completed cards droppable for dependency linking - Update drag-drop hook to allow links between any status - Add status badges to the dependency link dialog for better context --- .../components/kanban-card/kanban-card.tsx | 5 +++-- .../board-view/dialogs/dependency-link-dialog.tsx | 12 ++++++++++-- .../views/board-view/hooks/use-board-drag-drop.ts | 6 +++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/ui/src/components/views/board-view/components/kanban-card/kanban-card.tsx b/apps/ui/src/components/views/board-view/components/kanban-card/kanban-card.tsx index ba1dd97e7..89adc6c57 100644 --- a/apps/ui/src/components/views/board-view/components/kanban-card/kanban-card.tsx +++ b/apps/ui/src/components/views/board-view/components/kanban-card/kanban-card.tsx @@ -136,8 +136,9 @@ export const KanbanCard = memo(function KanbanCard({ }); // Make the card a drop target for creating dependency links - // Only backlog cards can be link targets (to avoid complexity with running features) - const isDroppable = !isOverlay && feature.status === 'backlog' && !isSelectionMode; + // All non-completed cards can be link targets to allow flexible dependency creation + // (completed features are excluded as they're already done) + const isDroppable = !isOverlay && feature.status !== 'completed' && !isSelectionMode; const { setNodeRef: setDroppableRef, isOver } = useDroppable({ id: `card-drop-${feature.id}`, disabled: !isDroppable, diff --git a/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx index 152e6702b..84778ac5f 100644 --- a/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx @@ -12,6 +12,8 @@ import { Button } from '@/components/ui/button'; import { ArrowDown, ArrowUp, Link2, X } from 'lucide-react'; import type { Feature } from '@/store/app-store'; import { cn } from '@/lib/utils'; +import { StatusBadge } from '../components/list-view/status-badge'; +import type { FeatureStatusWithPipeline } from '@automaker/types'; export type DependencyLinkType = 'parent' | 'child'; @@ -57,7 +59,10 @@ export function DependencyLinkDialog({
{/* Dragged feature */}
-
Dragged Feature
+
+ Dragged Feature + +
{draggedFeature.description}
@@ -71,7 +76,10 @@ export function DependencyLinkDialog({ {/* Target feature */}
-
Target Feature
+
+ Target Feature + +
{targetFeature.description}
diff --git a/apps/ui/src/components/views/board-view/hooks/use-board-drag-drop.ts b/apps/ui/src/components/views/board-view/hooks/use-board-drag-drop.ts index 327a28927..10b7d1ba9 100644 --- a/apps/ui/src/components/views/board-view/hooks/use-board-drag-drop.ts +++ b/apps/ui/src/components/views/board-view/hooks/use-board-drag-drop.ts @@ -88,10 +88,10 @@ export function useBoardDragDrop({ const targetFeature = features.find((f) => f.id === targetFeatureId); if (!targetFeature) return; - // Only allow linking backlog features (both must be in backlog) - if (draggedFeature.status !== 'backlog' || targetFeature.status !== 'backlog') { + // Don't allow linking completed features (they're already done) + if (draggedFeature.status === 'completed' || targetFeature.status === 'completed') { toast.error('Cannot link features', { - description: 'Both features must be in the backlog to create a dependency link.', + description: 'Completed features cannot be linked.', }); return; } From b29d7c26527e5fbb8f5ccf508ad846f35c14dec2 Mon Sep 17 00:00:00 2001 From: Stefan de Vogelaere Date: Thu, 22 Jan 2026 16:01:53 +0100 Subject: [PATCH 2/2] refactor: use barrel export for StatusBadge import --- .../views/board-view/dialogs/dependency-link-dialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx b/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx index 84778ac5f..c86b41f9f 100644 --- a/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx +++ b/apps/ui/src/components/views/board-view/dialogs/dependency-link-dialog.tsx @@ -12,7 +12,7 @@ import { Button } from '@/components/ui/button'; import { ArrowDown, ArrowUp, Link2, X } from 'lucide-react'; import type { Feature } from '@/store/app-store'; import { cn } from '@/lib/utils'; -import { StatusBadge } from '../components/list-view/status-badge'; +import { StatusBadge } from '../components'; import type { FeatureStatusWithPipeline } from '@automaker/types'; export type DependencyLinkType = 'parent' | 'child';