From dfe8dfd70a369c733e44bcc05336b6b4cef9991c Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Fri, 5 Jun 2026 01:45:48 -0700 Subject: [PATCH] fix(ci): add createWorkflowAuthoringTools to partial engine mocks; bump roadmap schema assertion to 109 --- packages/dashboard/src/__tests__/agent-onboarding.test.ts | 1 + packages/dashboard/src/__tests__/ai-refine.test.ts | 1 + .../dashboard/src/__tests__/chat-attachment-routes.test.ts | 2 +- .../src/__tests__/experiment-routes.finalize.test.ts | 1 + .../dashboard/src/__tests__/milestone-slice-interview.test.ts | 1 + packages/dashboard/src/__tests__/mission-interview.test.ts | 1 + .../dashboard/src/__tests__/pr-metadata-generator.test.ts | 1 + .../src/__tests__/project-pause-resume-routes.test.ts | 1 + .../__tests__/routes-approval-sandbox-provisioning.test.ts | 1 + .../dashboard/src/__tests__/routes-approval-secrets.test.ts | 1 + packages/dashboard/src/__tests__/routes-approval.test.ts | 1 + packages/dashboard/src/__tests__/routes-worktrunk.test.ts | 1 + .../dashboard/src/__tests__/session-error-recovery.test.ts | 1 + .../src/__tests__/session-persistence-roundtrip.test.ts | 1 + packages/dashboard/src/__tests__/session-reconnect.test.ts | 1 + .../dashboard/src/__tests__/session-resume-history.test.ts | 1 + packages/dashboard/src/__tests__/setup-routes.test.ts | 1 + packages/dashboard/src/__tests__/subtask-breakdown.test.ts | 1 + .../src/routes/__tests__/agent-avatar-routes.test.ts | 1 + .../dashboard/src/routes/__tests__/custom-providers.test.ts | 1 + .../dashboard/src/routes/__tests__/docker-node-routes.test.ts | 1 + packages/dashboard/src/test/mockCoreEngine.ts | 3 +++ .../src/store/__tests__/roadmap-store.test.ts | 4 ++-- 23 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/dashboard/src/__tests__/agent-onboarding.test.ts b/packages/dashboard/src/__tests__/agent-onboarding.test.ts index 4da7d5f26d..18e38acc6e 100644 --- a/packages/dashboard/src/__tests__/agent-onboarding.test.ts +++ b/packages/dashboard/src/__tests__/agent-onboarding.test.ts @@ -5,6 +5,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/ai-refine.test.ts b/packages/dashboard/src/__tests__/ai-refine.test.ts index 3833813048..85f99fd2e7 100644 --- a/packages/dashboard/src/__tests__/ai-refine.test.ts +++ b/packages/dashboard/src/__tests__/ai-refine.test.ts @@ -25,6 +25,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ // Mock the engine module to avoid dynamic import issues in tests vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/chat-attachment-routes.test.ts b/packages/dashboard/src/__tests__/chat-attachment-routes.test.ts index 8d889a797d..12df25d642 100644 --- a/packages/dashboard/src/__tests__/chat-attachment-routes.test.ts +++ b/packages/dashboard/src/__tests__/chat-attachment-routes.test.ts @@ -43,7 +43,7 @@ const { mockChatStreamManager, mockSendMessage, mockCancelGeneration, mockBeginG }; }); -vi.mock("@fusion/engine", () => ({ createFnAgent: vi.fn() })); +vi.mock("@fusion/engine", () => ({ createFnAgent: vi.fn(), createWorkflowAuthoringTools: vi.fn(() => []) })); vi.mock("../planning.js", () => ({ getSession: vi.fn(), cleanupSession: vi.fn(), __setCreateFnAgent: vi.fn(), __resetPlanningState: vi.fn(), setAiSessionStore: vi.fn(), rehydrateFromStore: vi.fn().mockReturnValue(0), })); diff --git a/packages/dashboard/src/__tests__/experiment-routes.finalize.test.ts b/packages/dashboard/src/__tests__/experiment-routes.finalize.test.ts index be311a27aa..b50d6b94bb 100644 --- a/packages/dashboard/src/__tests__/experiment-routes.finalize.test.ts +++ b/packages/dashboard/src/__tests__/experiment-routes.finalize.test.ts @@ -21,6 +21,7 @@ const mockErrors = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), defaultGitOps: vi.fn(() => ({})), ExperimentFinalizeService: vi.fn(() => ({ previewPlan: previewPlanMock, finalize: finalizeMock })), ExperimentFinalizeStateError: mockErrors.StateError, diff --git a/packages/dashboard/src/__tests__/milestone-slice-interview.test.ts b/packages/dashboard/src/__tests__/milestone-slice-interview.test.ts index a7d530e0d1..741dacaa23 100644 --- a/packages/dashboard/src/__tests__/milestone-slice-interview.test.ts +++ b/packages/dashboard/src/__tests__/milestone-slice-interview.test.ts @@ -7,6 +7,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/mission-interview.test.ts b/packages/dashboard/src/__tests__/mission-interview.test.ts index 16bb874fe9..cef7ed5709 100644 --- a/packages/dashboard/src/__tests__/mission-interview.test.ts +++ b/packages/dashboard/src/__tests__/mission-interview.test.ts @@ -7,6 +7,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/pr-metadata-generator.test.ts b/packages/dashboard/src/__tests__/pr-metadata-generator.test.ts index aa2ed8c1ec..65c0cff75d 100644 --- a/packages/dashboard/src/__tests__/pr-metadata-generator.test.ts +++ b/packages/dashboard/src/__tests__/pr-metadata-generator.test.ts @@ -14,6 +14,7 @@ vi.mock("node:child_process", () => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: vi.fn(async () => ({ session: { prompt: promptMock, diff --git a/packages/dashboard/src/__tests__/project-pause-resume-routes.test.ts b/packages/dashboard/src/__tests__/project-pause-resume-routes.test.ts index 810b8d9f75..d00cc92f9f 100644 --- a/packages/dashboard/src/__tests__/project-pause-resume-routes.test.ts +++ b/packages/dashboard/src/__tests__/project-pause-resume-routes.test.ts @@ -33,6 +33,7 @@ vi.mock("@fusion/core", async () => { }); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: vi.fn(async () => ({ session: { state: { messages: [] as Array<{ role: string; content: string }> }, diff --git a/packages/dashboard/src/__tests__/routes-approval-sandbox-provisioning.test.ts b/packages/dashboard/src/__tests__/routes-approval-sandbox-provisioning.test.ts index 837e866342..633c6b7eb4 100644 --- a/packages/dashboard/src/__tests__/routes-approval-sandbox-provisioning.test.ts +++ b/packages/dashboard/src/__tests__/routes-approval-sandbox-provisioning.test.ts @@ -55,6 +55,7 @@ vi.mock("@fusion/core", async () => { }); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), executeApprovedAgentProvisioning: vi.fn(async () => undefined), })); diff --git a/packages/dashboard/src/__tests__/routes-approval-secrets.test.ts b/packages/dashboard/src/__tests__/routes-approval-secrets.test.ts index 34c91b605b..b7200c6316 100644 --- a/packages/dashboard/src/__tests__/routes-approval-secrets.test.ts +++ b/packages/dashboard/src/__tests__/routes-approval-secrets.test.ts @@ -38,6 +38,7 @@ class MockApprovalRequestStore { vi.mock("@fusion/core", async (importOriginal) => ({ ...(await importOriginal()), ApprovalRequestStore: MockApprovalRequestStore, AgentStore: class { async init() {} async getAgent() { return null; } } })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), executeApprovedAgentProvisioning: vi.fn(), executeApprovedWorktrunkInstall: vi.fn(), assertNoSecretPlaintext: (metadata?: Record) => { diff --git a/packages/dashboard/src/__tests__/routes-approval.test.ts b/packages/dashboard/src/__tests__/routes-approval.test.ts index c6e9b386d3..aafd087dda 100644 --- a/packages/dashboard/src/__tests__/routes-approval.test.ts +++ b/packages/dashboard/src/__tests__/routes-approval.test.ts @@ -86,6 +86,7 @@ vi.mock("@fusion/core", async (importOriginal) => ({ const executeApprovedWorktrunkInstall = vi.fn(async () => ({ binaryPath: "~/.fusion/bin/wt", source: "installed-release" })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), executeApprovedAgentProvisioning, executeApprovedWorktrunkInstall, })); diff --git a/packages/dashboard/src/__tests__/routes-worktrunk.test.ts b/packages/dashboard/src/__tests__/routes-worktrunk.test.ts index f505afcc82..d6f93f1707 100644 --- a/packages/dashboard/src/__tests__/routes-worktrunk.test.ts +++ b/packages/dashboard/src/__tests__/routes-worktrunk.test.ts @@ -26,6 +26,7 @@ class MockApprovalRequestStore { } vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), WORKTRUNK_INSTALL_PATH: "~/.fusion/bin/wt", WORKTRUNK_PINNED_RELEASE: { source: "upstream-pending-verification", diff --git a/packages/dashboard/src/__tests__/session-error-recovery.test.ts b/packages/dashboard/src/__tests__/session-error-recovery.test.ts index 264173fd4d..e7f8a7de10 100644 --- a/packages/dashboard/src/__tests__/session-error-recovery.test.ts +++ b/packages/dashboard/src/__tests__/session-error-recovery.test.ts @@ -45,6 +45,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/session-persistence-roundtrip.test.ts b/packages/dashboard/src/__tests__/session-persistence-roundtrip.test.ts index 64885a2809..4ee0590c0f 100644 --- a/packages/dashboard/src/__tests__/session-persistence-roundtrip.test.ts +++ b/packages/dashboard/src/__tests__/session-persistence-roundtrip.test.ts @@ -38,6 +38,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/session-reconnect.test.ts b/packages/dashboard/src/__tests__/session-reconnect.test.ts index 0ea96430b8..ad35ecf5bc 100644 --- a/packages/dashboard/src/__tests__/session-reconnect.test.ts +++ b/packages/dashboard/src/__tests__/session-reconnect.test.ts @@ -41,6 +41,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, createResolvedAgentSession: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() }, diff --git a/packages/dashboard/src/__tests__/session-resume-history.test.ts b/packages/dashboard/src/__tests__/session-resume-history.test.ts index 72b2b070c8..affc9a6877 100644 --- a/packages/dashboard/src/__tests__/session-resume-history.test.ts +++ b/packages/dashboard/src/__tests__/session-resume-history.test.ts @@ -38,6 +38,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/__tests__/setup-routes.test.ts b/packages/dashboard/src/__tests__/setup-routes.test.ts index e83c9265b8..697b2dae81 100644 --- a/packages/dashboard/src/__tests__/setup-routes.test.ts +++ b/packages/dashboard/src/__tests__/setup-routes.test.ts @@ -34,6 +34,7 @@ vi.mock("@fusion/core", async () => { }); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: vi.fn(async () => ({ session: { state: { messages: [] as Array<{ role: string; content: string }> }, diff --git a/packages/dashboard/src/__tests__/subtask-breakdown.test.ts b/packages/dashboard/src/__tests__/subtask-breakdown.test.ts index 885e4097ee..83b6fb2c4b 100644 --- a/packages/dashboard/src/__tests__/subtask-breakdown.test.ts +++ b/packages/dashboard/src/__tests__/subtask-breakdown.test.ts @@ -9,6 +9,7 @@ const { mockCreateFnAgent } = vi.hoisted(() => ({ })); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: mockCreateFnAgent, })); diff --git a/packages/dashboard/src/routes/__tests__/agent-avatar-routes.test.ts b/packages/dashboard/src/routes/__tests__/agent-avatar-routes.test.ts index 6da54a347f..475579ae8e 100644 --- a/packages/dashboard/src/routes/__tests__/agent-avatar-routes.test.ts +++ b/packages/dashboard/src/routes/__tests__/agent-avatar-routes.test.ts @@ -49,6 +49,7 @@ vi.mock("@fusion/core", async () => { }); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() } })), createResolvedAgentSession: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() }, diff --git a/packages/dashboard/src/routes/__tests__/custom-providers.test.ts b/packages/dashboard/src/routes/__tests__/custom-providers.test.ts index e23d3b7a3d..1fad6bcd14 100644 --- a/packages/dashboard/src/routes/__tests__/custom-providers.test.ts +++ b/packages/dashboard/src/routes/__tests__/custom-providers.test.ts @@ -28,6 +28,7 @@ vi.mock("@fusion/core", async () => { }); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() } })), createResolvedAgentSession: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() }, diff --git a/packages/dashboard/src/routes/__tests__/docker-node-routes.test.ts b/packages/dashboard/src/routes/__tests__/docker-node-routes.test.ts index 5037d1371b..87565ec805 100644 --- a/packages/dashboard/src/routes/__tests__/docker-node-routes.test.ts +++ b/packages/dashboard/src/routes/__tests__/docker-node-routes.test.ts @@ -34,6 +34,7 @@ vi.mock("@fusion/core", async () => { }); vi.mock("@fusion/engine", () => ({ + createWorkflowAuthoringTools: vi.fn(() => []), createFnAgent: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() } })), createResolvedAgentSession: vi.fn(async () => ({ session: { state: { messages: [] }, prompt: vi.fn(), dispose: vi.fn() }, diff --git a/packages/dashboard/src/test/mockCoreEngine.ts b/packages/dashboard/src/test/mockCoreEngine.ts index 4dc76852cc..ff39ad45dd 100644 --- a/packages/dashboard/src/test/mockCoreEngine.ts +++ b/packages/dashboard/src/test/mockCoreEngine.ts @@ -47,6 +47,9 @@ export function createEngineMock(overrides: AnyModule = {}): AnyModule { return withFallbackFunctions(actual, { createFnAgent: vi.fn(), promptWithFallback: vi.fn(), + // Returns an iterable tool list; dashboard code spreads its result + // (`...createWorkflowAuthoringTools(...)`), so it must not be undefined. + createWorkflowAuthoringTools: vi.fn(() => []), ...overrides, }); } diff --git a/plugins/fusion-plugin-roadmap/src/store/__tests__/roadmap-store.test.ts b/plugins/fusion-plugin-roadmap/src/store/__tests__/roadmap-store.test.ts index 2e16e018ca..b6629d51ee 100644 --- a/plugins/fusion-plugin-roadmap/src/store/__tests__/roadmap-store.test.ts +++ b/plugins/fusion-plugin-roadmap/src/store/__tests__/roadmap-store.test.ts @@ -743,10 +743,10 @@ describe("RoadmapStore", () => { }); describe("schema version", () => { - it("schema version is 108 after init", () => { + it("schema version is 109 after init", () => { // Tracks @fusion/core's SCHEMA_VERSION (the roadmap store layers on core's // Database). Bump this in lockstep when core adds a migration. - expect(db.getSchemaVersion()).toBe(108); + expect(db.getSchemaVersion()).toBe(109); }); });