From 60775d8aa0729282feeb1ab65a6a97a5734aac3f Mon Sep 17 00:00:00 2001 From: "vercel-gh-bot-3[bot]" <282332853+vercel-gh-bot-3[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 03:36:29 +0000 Subject: [PATCH] fix(eve): isolate local Workflow state in TUI smoke tests Co-authored-by: ruiconti <1834568+ruiconti@users.noreply.github.com> --- ...velopment-world-server.integration.test.ts | 24 ++++++++++++++++++- .../workflow/local-world-data-directory.ts | 5 +++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/eve/src/internal/workflow/development-world-server.integration.test.ts b/packages/eve/src/internal/workflow/development-world-server.integration.test.ts index 99574c389..e4ce1a236 100644 --- a/packages/eve/src/internal/workflow/development-world-server.integration.test.ts +++ b/packages/eve/src/internal/workflow/development-world-server.integration.test.ts @@ -1,7 +1,7 @@ import { access, mkdir, rm, writeFile } from "node:fs/promises"; import { join } from "node:path"; -import { afterEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { turnWorkflowReference, workflowEntryReference } from "#execution/workflow-runtime.js"; import { useTemporaryDirectories } from "#internal/testing/use-temporary-app-roots.js"; @@ -37,11 +37,16 @@ const QUEUE_PREFIX = deriveEveWorkflowQueuePrefix(AGENT_NAME); const originalFetch = globalThis.fetch; +beforeEach(() => { + vi.stubEnv("WORKFLOW_LOCAL_DATA_DIR", ""); +}); + afterEach(() => { globalThis.fetch = originalFetch; delete process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]; delete process.env[DEVELOPMENT_WORKER_APP_ROOT_ENV]; delete process.env.WORKFLOW_LOCAL_BASE_URL; + vi.unstubAllEnvs(); }); describe("parent development Workflow World", () => { @@ -62,6 +67,23 @@ describe("parent development Workflow World", () => { } }); + it("honors the local Workflow data directory override", async () => { + const appRoot = await createScratchDirectory("eve-parent-workflow-app-"); + const dataDirectory = await createScratchDirectory("eve-parent-workflow-data-"); + vi.stubEnv("WORKFLOW_LOCAL_DATA_DIR", dataDirectory); + const world = createWorld({ activeGenerationId: () => "generation-a", appRoot }); + + try { + await world.start(); + await expect(access(join(dataDirectory, "version.txt"))).resolves.toBeUndefined(); + await expect( + access(join(appRoot, LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH)), + ).rejects.toMatchObject({ code: "ENOENT" }); + } finally { + await world.close(); + } + }); + it("pins a turn delivery to its recorded generation", async () => { const appRoot = await createScratchDirectory("eve-parent-workflow-world-"); await seedGeneration(appRoot, "generation-a"); diff --git a/packages/eve/src/internal/workflow/local-world-data-directory.ts b/packages/eve/src/internal/workflow/local-world-data-directory.ts index 845ba2bc6..feea800e1 100644 --- a/packages/eve/src/internal/workflow/local-world-data-directory.ts +++ b/packages/eve/src/internal/workflow/local-world-data-directory.ts @@ -3,5 +3,8 @@ import { join } from "node:path"; export const LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH = ".eve/.workflow-data"; export function resolveLocalWorkflowWorldDataDirectory(appRoot: string): string { - return join(appRoot, LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH); + return ( + process.env.WORKFLOW_LOCAL_DATA_DIR || + join(appRoot, LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH) + ); }