From d774b3f274e17c55eb4f0c5c2ccd84dd9f463c93 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Fri, 20 Mar 2026 01:24:32 -0700 Subject: [PATCH 1/2] fix(ci): isolate jiti-mocked test files --- test/fixtures/test-parallel.behavior.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/fixtures/test-parallel.behavior.json b/test/fixtures/test-parallel.behavior.json index 2de992a45d5..954b5f87557 100644 --- a/test/fixtures/test-parallel.behavior.json +++ b/test/fixtures/test-parallel.behavior.json @@ -183,6 +183,26 @@ "file": "src/infra/heartbeat-runner.returns-default-unset.test.ts", "reason": "Heartbeat default-unset coverage retained a large shared unit-fast heap spike on Linux Node 22 CI." }, + { + "file": "src/infra/heartbeat-runner.ghost-reminder.test.ts", + "reason": "Mocks jiti at file scope, so it is safer outside shared Vitest workers." + }, + { + "file": "src/infra/heartbeat-runner.transcript-prune.test.ts", + "reason": "Mocks jiti at file scope, so it is safer outside shared Vitest workers." + }, + { + "file": "src/infra/heartbeat-runner.sender-prefers-delivery-target.test.ts", + "reason": "Mocks jiti at file scope, so it is safer outside shared Vitest workers." + }, + { + "file": "src/infra/heartbeat-runner.model-override.test.ts", + "reason": "Mocks jiti at file scope, so it is safer outside shared Vitest workers." + }, + { + "file": "src/plugins/loader.git-path-regression.test.ts", + "reason": "Constructs a real Jiti boundary and is safer outside shared workers that may have mocked jiti earlier." + }, { "file": "src/infra/outbound/outbound-session.test.ts", "reason": "Outbound session coverage retained a large shared unit-fast heap spike on Linux Node 22 CI." From df536c324841542636a576bd7b1a70bf8a0c467f Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Fri, 20 Mar 2026 01:33:16 -0700 Subject: [PATCH 2/2] test(signal): harden tool-result infra-runtime mock --- .../src/monitor.tool-result.test-harness.ts | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/extensions/signal/src/monitor.tool-result.test-harness.ts b/extensions/signal/src/monitor.tool-result.test-harness.ts index ad81a4d6da2..7f1c8b7d7cf 100644 --- a/extensions/signal/src/monitor.tool-result.test-harness.ts +++ b/extensions/signal/src/monitor.tool-result.test-harness.ts @@ -66,8 +66,12 @@ export function createMockSignalDaemonHandle( }; } -vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { - const actual = await importOriginal(); +// Use importActual so shared-worker mocks from earlier test files do not leak +// into this harness's partial overrides. +vi.mock("openclaw/plugin-sdk/config-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/config-runtime", + ); return { ...actual, loadConfig: () => config, @@ -78,8 +82,10 @@ vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { }; }); -vi.mock("openclaw/plugin-sdk/reply-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/reply-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/reply-runtime", + ); return { ...actual, getReplyFromConfig: (...args: unknown[]) => replyMock(...args), @@ -104,8 +110,8 @@ vi.mock("openclaw/plugin-sdk/reply-runtime", async (importOriginal) => { }; }); -vi.mock("./send.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./send.js", async () => { + const actual = await vi.importActual("./send.js"); return { ...actual, sendMessageSignal: (...args: unknown[]) => sendMock(...args), @@ -114,8 +120,10 @@ vi.mock("./send.js", async (importOriginal) => { }; }); -vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/conversation-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/conversation-runtime", + ); return { ...actual, readChannelAllowFromStore: (...args: unknown[]) => readAllowFromStoreMock(...args), @@ -123,8 +131,10 @@ vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => { }; }); -vi.mock("openclaw/plugin-sdk/security-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/security-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/security-runtime", + ); return { ...actual, readStoreAllowFromForDmPolicy: (...args: unknown[]) => readAllowFromStoreMock(...args), @@ -137,16 +147,18 @@ vi.mock("./client.js", () => ({ signalRpcRequest: (...args: unknown[]) => signalRpcRequestMock(...args), })); -vi.mock("./daemon.js", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./daemon.js", async () => { + const actual = await vi.importActual("./daemon.js"); return { ...actual, spawnSignalDaemon: (...args: unknown[]) => spawnSignalDaemonMock(...args), }; }); -vi.mock("openclaw/plugin-sdk/infra-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/infra-runtime", async () => { + const actual = await vi.importActual( + "openclaw/plugin-sdk/infra-runtime", + ); return { ...actual, waitForTransportReady: (...args: unknown[]) => waitForTransportReadyMock(...args),