diff --git a/packages/dashboard/app/components/Board.tsx b/packages/dashboard/app/components/Board.tsx index 6f109c2a29..9a310bb4b0 100644 --- a/packages/dashboard/app/components/Board.tsx +++ b/packages/dashboard/app/components/Board.tsx @@ -551,7 +551,7 @@ export function Board({ tasks, projectId, maxConcurrent, onMoveTask, onPauseTask prAuthAvailable={prAuthAvailable} autoMerge={autoMerge} {...(isCreateColumn ? { onQuickCreate, onNewTask, onPlanningMode, onSubtaskBreakdown } : {})} - {...(columnDef.flags.mergeBlocker ? { onToggleAutoMerge } : {})} + {...(columnDef.flags.mergeBlocker || columnDef.flags.humanReview ? { onToggleAutoMerge } : {})} /> ); })} diff --git a/packages/dashboard/app/components/__tests__/Board.test.tsx b/packages/dashboard/app/components/__tests__/Board.test.tsx index 2c554b79f5..1fbdbf4534 100644 --- a/packages/dashboard/app/components/__tests__/Board.test.tsx +++ b/packages/dashboard/app/components/__tests__/Board.test.tsx @@ -48,10 +48,10 @@ const columnRenderCounts: Record = {}; // Mock child components so we only test Board's own rendering vi.mock("../Column", () => ({ - Column: React.memo(({ column, tasks, onToggleCollapse, onQuickCreate, onNewTask, favoriteProviders, favoriteModels, onToggleFavorite, onToggleModelFavorite, isSearchActive, workflowStepNameLookup }: { column: string; tasks: Task[]; onToggleCollapse?: () => void; onQuickCreate?: unknown; onNewTask?: unknown; favoriteProviders?: string[]; favoriteModels?: string[]; onToggleFavorite?: (provider: string) => void; onToggleModelFavorite?: (modelId: string) => void; isSearchActive?: boolean; workflowStepNameLookup?: ReadonlyMap }) => { + Column: React.memo(({ column, tasks, onToggleCollapse, onQuickCreate, onNewTask, onToggleAutoMerge, favoriteProviders, favoriteModels, onToggleFavorite, onToggleModelFavorite, isSearchActive, workflowStepNameLookup }: { column: string; tasks: Task[]; onToggleCollapse?: () => void; onQuickCreate?: unknown; onNewTask?: unknown; onToggleAutoMerge?: () => void; favoriteProviders?: string[]; favoriteModels?: string[]; onToggleFavorite?: (provider: string) => void; onToggleModelFavorite?: (modelId: string) => void; isSearchActive?: boolean; workflowStepNameLookup?: ReadonlyMap }) => { columnRenderCounts[column] = (columnRenderCounts[column] ?? 0) + 1; return ( -
+
{onToggleCollapse && }
); @@ -971,6 +971,22 @@ describe("Board", () => { expect(screen.getByTestId("column-idea").getAttribute("data-has-quick-create")).toBe("yes"); }); + it("passes auto-merge toggle to selected workflow human-review columns", async () => { + const workflow = { + ...DEFAULT_WORKFLOW, + columns: [ + { id: "triage", name: "Triage", flags: { intake: true } }, + { id: "review", name: "Review", flags: { humanReview: true } }, + { id: "done", name: "Done", flags: { complete: true } }, + ], + }; + enableFlag({ "FN-1": workflow.id }, [workflow]); + renderBoard({ tasks: [mkTask({ id: "FN-1", column: "review" })] }); + + await waitFor(() => expect(screen.getByTestId("column-review")).toBeDefined()); + expect(screen.getByTestId("column-review").getAttribute("data-has-auto-merge-toggle")).toBe("yes"); + }); + it("keeps workflow create and edit actions visible when only one workflow exists", async () => { const onCreateWorkflow = vi.fn(); const onOpenWorkflowEditor = vi.fn();