From 66f1db122b9613e87c1dca442dc08daadca95e3d Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Thu, 4 Jun 2026 23:02:58 -0700 Subject: [PATCH] Fix quality-backfill suites broken by fast-tests x workflow-columns merge race MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Main went red when the fast-tests quality-backfill projects (PR #1385) landed alongside the workflow-columns stream (PR #1424) — the new test projects were written against pre-stream code: - TaskFieldsSection.css toggle knob used background: #fff, violating the theme-token assertion in AgentListModal's styling-parity test; use var(--card) per the SkillsView toggle convention - ListView.test.tsx api mock lacked fetchBoardWorkflows (TaskDetailModal now calls it on mount) - chat.test.ts and routes-agent-import.test.ts @fusion/core mocks lacked registerTraitHookImpl (engine merge-trait registers hooks at import) - auto-merge-toggle-blank.mobile and board-mobile-initial-render used vi.runAllTimers(), which never terminates now that sse-bus starts a keepalive setInterval; use vi.runOnlyPendingTimers() Both quality-backfill projects now pass fully: 7151/7151 across 414 files. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../app/components/TaskFieldsSection.css | 2 +- .../app/components/__tests__/ListView.test.tsx | 1 + .../auto-merge-toggle-blank.mobile.test.tsx | 18 +++++++++--------- .../board-mobile-initial-render.test.tsx | 8 ++++---- packages/dashboard/src/__tests__/chat.test.ts | 1 + .../src/__tests__/routes-agent-import.test.ts | 1 + 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/dashboard/app/components/TaskFieldsSection.css b/packages/dashboard/app/components/TaskFieldsSection.css index 6e0d69f31e..95181aef57 100644 --- a/packages/dashboard/app/components/TaskFieldsSection.css +++ b/packages/dashboard/app/components/TaskFieldsSection.css @@ -139,7 +139,7 @@ width: 14px; height: 14px; border-radius: 50%; - background: #fff; + background: var(--card); transition: transform 0.15s ease; } diff --git a/packages/dashboard/app/components/__tests__/ListView.test.tsx b/packages/dashboard/app/components/__tests__/ListView.test.tsx index a835b80587..c80aacc9a3 100644 --- a/packages/dashboard/app/components/__tests__/ListView.test.tsx +++ b/packages/dashboard/app/components/__tests__/ListView.test.tsx @@ -23,6 +23,7 @@ vi.mock("../../api", () => ({ fetchTaskDetail: vi.fn(), batchUpdateTaskModels: vi.fn(), fetchNodes: vi.fn().mockResolvedValue([]), + fetchBoardWorkflows: vi.fn().mockResolvedValue({ flagEnabled: false, defaultWorkflowId: "", workflows: [], taskWorkflowIds: {} }), })); import { fetchTaskDetail, batchUpdateTaskModels, fetchNodes } from "../../api"; diff --git a/packages/dashboard/app/components/__tests__/auto-merge-toggle-blank.mobile.test.tsx b/packages/dashboard/app/components/__tests__/auto-merge-toggle-blank.mobile.test.tsx index b825adf972..b639379313 100644 --- a/packages/dashboard/app/components/__tests__/auto-merge-toggle-blank.mobile.test.tsx +++ b/packages/dashboard/app/components/__tests__/auto-merge-toggle-blank.mobile.test.tsx @@ -209,13 +209,13 @@ describe("auto-merge toggle mobile blank regression", () => { expectBoardVisible(); act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); board.scrollLeft = 240; act(() => { visualViewport.dispatchResize(); - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expect(board.scrollLeft).toBe(0); @@ -227,7 +227,7 @@ describe("auto-merge toggle mobile blank regression", () => { board.scrollLeft = 240; act(() => { visualViewport.dispatchResize(); - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expectBoardVisible(); @@ -248,7 +248,7 @@ describe("auto-merge toggle mobile blank regression", () => { const board = document.querySelector("main.board") as HTMLElement; act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); const toggle = screen.getByRole("checkbox", { name: "Auto-merge" }); @@ -260,7 +260,7 @@ describe("auto-merge toggle mobile blank regression", () => { board.scrollLeft = 180; act(() => { visualViewport.dispatchResize(); - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expectBoardVisible(); expect(board.scrollLeft).toBe(0); @@ -270,7 +270,7 @@ describe("auto-merge toggle mobile blank regression", () => { board.scrollLeft = 180; act(() => { visualViewport.dispatchResize(); - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expectBoardVisible(); expect(board.scrollLeft).toBe(0); @@ -296,7 +296,7 @@ describe("auto-merge toggle mobile blank regression", () => { ); act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expect(screen.getByTestId("task-card-FN-5936")).toHaveTextContent("true"); @@ -322,7 +322,7 @@ describe("auto-merge toggle mobile blank regression", () => { const board = document.querySelector("main.board") as HTMLElement; act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); fireEvent.click(screen.getByRole("checkbox", { name: "Auto-merge" })); @@ -332,7 +332,7 @@ describe("auto-merge toggle mobile blank regression", () => { Object.defineProperty(pageShow, "persisted", { configurable: true, value: true }); act(() => { window.dispatchEvent(pageShow); - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expectBoardVisible(); diff --git a/packages/dashboard/app/components/__tests__/board-mobile-initial-render.test.tsx b/packages/dashboard/app/components/__tests__/board-mobile-initial-render.test.tsx index 038e12dc0f..b13d9b4e6d 100644 --- a/packages/dashboard/app/components/__tests__/board-mobile-initial-render.test.tsx +++ b/packages/dashboard/app/components/__tests__/board-mobile-initial-render.test.tsx @@ -109,7 +109,7 @@ describe("Board mobile initial render stabilization (FN-4574)", () => { board.scrollLeft = 500; act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expect(board.scrollLeft).toBe(0); expect(raf).toHaveBeenCalled(); @@ -130,7 +130,7 @@ describe("Board mobile initial render stabilization (FN-4574)", () => { const board = document.querySelector("main.board") as HTMLElement; act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expect(board.scrollLeft).toBe(0); @@ -140,7 +140,7 @@ describe("Board mobile initial render stabilization (FN-4574)", () => { window.dispatchEvent(pageShow); act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expect(board.scrollLeft).toBe(0); @@ -190,7 +190,7 @@ describe("Board mobile initial render stabilization (FN-4574)", () => { window.dispatchEvent(pageShow); act(() => { - vi.runAllTimers(); + vi.runOnlyPendingTimers(); }); expect(board.scrollLeft).toBe(500); expect(addEventListenerSpy).not.toHaveBeenCalledWith("pageshow", expect.any(Function)); diff --git a/packages/dashboard/src/__tests__/chat.test.ts b/packages/dashboard/src/__tests__/chat.test.ts index 1fadb23015..e4b205d143 100644 --- a/packages/dashboard/src/__tests__/chat.test.ts +++ b/packages/dashboard/src/__tests__/chat.test.ts @@ -28,6 +28,7 @@ vi.mock("@fusion/core", () => ({ summarizeTitle: vi.fn(), AgentStore: vi.fn(), ChatStore: vi.fn(), + registerTraitHookImpl: vi.fn(), })); describe("resolveFileReferences", () => { diff --git a/packages/dashboard/src/__tests__/routes-agent-import.test.ts b/packages/dashboard/src/__tests__/routes-agent-import.test.ts index 82f9997ff4..5df5cb43a2 100644 --- a/packages/dashboard/src/__tests__/routes-agent-import.test.ts +++ b/packages/dashboard/src/__tests__/routes-agent-import.test.ts @@ -75,6 +75,7 @@ vi.mock("@fusion/core", () => { isEphemeralAgent: (agent: { metadata?: Record }) => agent?.metadata?.agentKind === "task-worker", deterministicGuardLocks: new Map(), + registerTraitHookImpl: () => {}, }; });