diff --git a/.changeset/fn-7320-hide-branch-group-expanded-chat.md b/.changeset/fn-7320-hide-branch-group-expanded-chat.md
new file mode 100644
index 0000000000..049c7f3380
--- /dev/null
+++ b/.changeset/fn-7320-hide-branch-group-expanded-chat.md
@@ -0,0 +1,7 @@
+---
+"@runfusion/fusion": patch
+---
+
+summary: Hide branch group chrome while the task Activity chat is maximized.
+category: fix
+dev: TaskDetailModal skips mounting BranchGroupCard during expanded Activity chat so branch controls are not focusable.
diff --git a/packages/dashboard/app/components/TaskDetailModal.tsx b/packages/dashboard/app/components/TaskDetailModal.tsx
index d045f87e3d..5c05818cc6 100644
--- a/packages/dashboard/app/components/TaskDetailModal.tsx
+++ b/packages/dashboard/app/components/TaskDetailModal.tsx
@@ -2611,6 +2611,11 @@ export function TaskDetailContent({
const effectiveAutoMerge = resolveEffectiveAutoMerge({ autoMerge: task.autoMerge }, { autoMerge: autoMergeEnabled });
const isManualPrFlow = mergeStrategy === "pull-request" && !effectiveAutoMerge;
const isChatExpanded = chatExpanded && activeTab === "chat" && !isEditing;
+ /*
+ FNXC:TaskDetailChat 2026-06-30-23:30:
+ Maximized Activity chat should reserve the detail surface for the header context and chat only. Do not mount branch-group chrome in this mode so its expand/promote controls are not hidden-but-focusable, while normal and embedded task details keep the BranchGroupCard behavior.
+ */
+ const shouldShowBranchGroupCard = Boolean(task.branchContext?.groupId && !isChatExpanded);
const taskActionMenuModel = useMemo(() => buildTaskActionMenuModel({
task,
@@ -3118,7 +3123,7 @@ export function TaskDetailContent({
)}
- {task.branchContext?.groupId && (
+ {shouldShowBranchGroupCard && task.branchContext?.groupId && (
/* FNXC:BranchGroupDetails 2026-06-30-00:00: Task-detail branch groups must return to their compact collapsed default when users switch tasks, including between members of the same shared branch group. Key by task and group so a manual expansion never leaks into the next task detail view. */
)}
diff --git a/packages/dashboard/app/components/__tests__/TaskDetailModal.attachments-and-tabs.test.tsx b/packages/dashboard/app/components/__tests__/TaskDetailModal.attachments-and-tabs.test.tsx
index e919601164..6d0bec2b7e 100644
--- a/packages/dashboard/app/components/__tests__/TaskDetailModal.attachments-and-tabs.test.tsx
+++ b/packages/dashboard/app/components/__tests__/TaskDetailModal.attachments-and-tabs.test.tsx
@@ -17,6 +17,14 @@ import {
} from "./TaskDetailModal.test-helpers";
import { TaskDetailModal, TaskDetailContent } from "../TaskDetailModal";
+vi.mock("../BranchGroupCard", () => ({
+ BranchGroupCard: ({ groupId }: { groupId: string }) => (
+
+
+
+ ),
+}));
+
/*
FNXC:TaskDetailTabs 2026-06-17-08:20:
FN-7306 labels the stable internal `chat` tab as Activity and keeps it as the default TaskDetailModal tab. Definition-tab regression coverage must prove both the no-`initialTab` Activity landing state and the explicit `initialTab="definition"` Definition surface for prompt, GitHub tracking, and dependency sections.
@@ -790,19 +798,20 @@ describe("TaskDetailModal", () => {
);
// For an in-progress task (no workflow steps, no merge commit), the
- // top-level tabs are: Activity, Plan, Changes, Review, Comments,
+ // top-level tabs are: Activity, Chat, Plan, Changes, Review, Comments,
// Artifacts, Model, Workflow, Stats, Routing.
- const tabTexts = ["Activity", "Plan", "Changes", "Review", "Comments", "Artifacts", "Model", "Workflow", "Stats", "Routing"];
+ const tabTexts = ["Activity", "Chat", "Plan", "Changes", "Review", "Comments", "Artifacts", "Model", "Workflow", "Stats", "Routing"];
const tabs = screen.getAllByRole("button").filter((b) =>
tabTexts.includes(b.textContent || "")
);
expect(tabs.map((tab) => tab.textContent)).toEqual(tabTexts);
expect(tabs[0].textContent).toBe("Activity");
- expect(tabs[1].textContent).toBe("Plan");
- expect(tabs[2].textContent).toBe("Changes");
+ expect(tabs[1].textContent).toBe("Chat");
+ expect(tabs[2].textContent).toBe("Plan");
+ expect(tabs[3].textContent).toBe("Changes");
expect(screen.queryByRole("button", { name: "Logs" })).toBeNull();
- expect(container.querySelectorAll(".detail-tab").length).toBe(10);
+ expect(container.querySelectorAll(".detail-tab").length).toBe(11);
// Workflow tab should always appear even when no workflow steps are configured
expect(screen.getByText("Workflow")).toBeInTheDocument();
// Commits tab should NOT appear for non-done tasks
@@ -899,6 +908,56 @@ describe("TaskDetailModal", () => {
expect(screen.getByTestId("task-chat-expand-toggle")).toHaveAttribute("aria-pressed", "false");
});
+ it("FN-7320 removes branch group chrome only while Activity chat is expanded", () => {
+ const branchContext = { groupId: "BG-7320", source: "planning", assignmentMode: "shared" } as const;
+ const { container } = render(
+ ,
+ );
+
+ const content = container.querySelector(".task-detail-content");
+ expect(content).not.toHaveClass("task-detail-content--chat-expanded");
+ expect(screen.getByTestId("mock-branch-group-card")).toBeInTheDocument();
+ expect(screen.getByRole("button", { name: "Mock branch group toggle BG-7320" })).toBeInTheDocument();
+
+ fireEvent.click(screen.getByTestId("task-chat-expand-toggle"));
+ expect(content).toHaveClass("task-detail-content--chat-expanded");
+ expect(screen.queryByTestId("mock-branch-group-card")).toBeNull();
+ expect(screen.queryByRole("button", { name: "Mock branch group toggle BG-7320" })).toBeNull();
+
+ fireEvent.click(screen.getByTestId("task-chat-expand-toggle"));
+ expect(content).not.toHaveClass("task-detail-content--chat-expanded");
+ expect(screen.getByTestId("mock-branch-group-card")).toBeInTheDocument();
+ expect(screen.getByRole("button", { name: "Mock branch group toggle BG-7320" })).toBeInTheDocument();
+ });
+
+ it("FN-7320 expands Activity chat for tasks without branch groups without rendering branch shells", () => {
+ const { container } = render(
+ ,
+ );
+
+ expect(screen.queryByTestId("mock-branch-group-card")).toBeNull();
+ fireEvent.click(screen.getByTestId("task-chat-expand-toggle"));
+ expect(container.querySelector(".task-detail-content")).toHaveClass("task-detail-content--chat-expanded");
+ expect(screen.queryByTestId("mock-branch-group-card")).toBeNull();
+ expect(screen.queryByRole("button", { name: /Mock branch group toggle/ })).toBeNull();
+ });
+
it("FN-6517 keeps the title row visible when embedded chat expands", () => {
const { container } = render(