feat(FN-3567): sync allowParallelExecution runtime toggle

Fixes FN-3567 by synchronizing the `allowParallelExecution` runtime toggle in the AgentDetailView component, adding one line to keep the setting in sync.

Fusion-Task-Id: FN-3567
This commit is contained in:
Fusion
2026-05-06 03:29:36 -07:00
committed by gsxdsm
parent 35d5590d4c
commit f69fb2fc2d
9 changed files with 43 additions and 25 deletions

View File

@@ -3306,6 +3306,7 @@ function ConfigTab({
setHeartbeatEnabled(deriveHeartbeatEnabled(agent.runtimeConfig));
setAutoClaimRelevantTasksEnabled(deriveAutoClaimRelevantTasksEnabled(agent.runtimeConfig));
setRunMissedHeartbeatOnStartup(deriveRunMissedHeartbeatOnStartup(agent.runtimeConfig));
setAllowParallelExecution(deriveAllowParallelExecution(agent.runtimeConfig));
setBudgetValues(deriveBudgetValues(agent.runtimeConfig));
setModelValue(initialModelValue);
setSelectedRuntimeId(initialRuntimeHint);

View File

@@ -1473,17 +1473,6 @@ export function Header({
</button>
)}
{!isCompact && todosEnabled && onOpenTodos && (
<button
className={`btn-icon${todosOpen ? " btn-icon--active" : ""}`}
onClick={onOpenTodos}
title="Open todos"
data-testid="todos-toggle-btn"
>
<CheckSquare size={16} />
</button>
)}
{/* Git Manager button - desktop only (moved to overflow on mobile/tablet) */}
{!isCompact && onOpenGitManager && (
<button

View File

@@ -1687,10 +1687,11 @@ describe("App view switching", () => {
render(<App />);
await waitFor(() => {
expect(screen.getByTestId("todos-toggle-btn")).toBeInTheDocument();
expect(screen.getByTestId("view-toggle-overflow-trigger")).toBeInTheDocument();
});
fireEvent.click(screen.getByTestId("todos-toggle-btn"));
fireEvent.click(screen.getByTestId("view-toggle-overflow-trigger"));
fireEvent.click(screen.getByTestId("view-overflow-todos"));
await waitFor(() => {
expect(screen.getByTestId("todo-view")).toBeInTheDocument();

View File

@@ -381,21 +381,27 @@ describe("Header", () => {
});
});
describe("todos button", () => {
it("renders todos button on desktop when enabled", () => {
renderHeader({ onOpenTodos: vi.fn(), todosEnabled: true }, "desktop");
expect(screen.getByTitle("Open todos")).toBeDefined();
describe("todos navigation", () => {
it("shows Todos only in More views on desktop when enabled", () => {
renderHeader({ onChangeView: noop, onOpenTodos: vi.fn(), todosEnabled: true }, "desktop");
expect(screen.queryByTestId("todos-toggle-btn")).toBeNull();
fireEvent.click(screen.getByTestId("view-toggle-overflow-trigger"));
expect(screen.getAllByText("Todos")).toHaveLength(1);
expect(screen.getByTestId("view-overflow-todos")).toBeInTheDocument();
});
it("does not render todos button when disabled", () => {
renderHeader({ onOpenTodos: vi.fn(), todosEnabled: false }, "desktop");
expect(screen.queryByTitle("Open todos")).toBeNull();
it("does not show Todos entry in More views when disabled", () => {
renderHeader({ onChangeView: noop, onOpenTodos: vi.fn(), todosEnabled: false }, "desktop");
fireEvent.click(screen.getByTestId("view-toggle-overflow-trigger"));
expect(screen.queryByTestId("view-overflow-todos")).toBeNull();
});
it("calls onOpenTodos when clicked", () => {
it("calls onOpenTodos from More views", () => {
const onOpenTodos = vi.fn();
renderHeader({ onOpenTodos, todosEnabled: true }, "desktop");
fireEvent.click(screen.getByTitle("Open todos"));
renderHeader({ onChangeView: noop, onOpenTodos, todosEnabled: true }, "desktop");
fireEvent.click(screen.getByTestId("view-toggle-overflow-trigger"));
fireEvent.click(screen.getByTestId("view-overflow-todos"));
expect(onOpenTodos).toHaveBeenCalled();
});
});

View File

@@ -105,6 +105,22 @@ describe("MobileNavBar", () => {
expect(screen.queryByTestId("mobile-nav-tab-skills")).toBeNull();
});
it("keeps Todos in the mobile More sheet when todoView is enabled", () => {
const onOpenTodos = vi.fn();
render(
<MobileNavBar
{...createDefaultProps()}
onOpenTodos={onOpenTodos}
experimentalFeatures={{ todoView: true }}
/>,
);
fireEvent.click(screen.getByTestId("mobile-nav-tab-more"));
fireEvent.click(screen.getByTestId("mobile-more-item-todos"));
expect(onOpenTodos).toHaveBeenCalled();
});
it("renders dependency graph as a top-level tab and keeps additional plugin views in More", () => {
const props = createDefaultProps();
render(