diff --git a/extensions/qa-lab/src/suite-planning.test.ts b/extensions/qa-lab/src/suite-planning.test.ts index ee948c2fb2c6..5df8ba015286 100644 --- a/extensions/qa-lab/src/suite-planning.test.ts +++ b/extensions/qa-lab/src/suite-planning.test.ts @@ -749,6 +749,45 @@ describe("qa suite planning helpers", () => { ).toBe(true); }); + it.each([ + { + reason: "explicit scenario isolation", + makeScenario: () => makeQaSuiteTestScenario("isolated", { suiteIsolation: "isolated" }), + }, + { + reason: "gateway runtime changes", + makeScenario: () => + makeQaSuiteTestScenario("runtime-options", { gatewayRuntime: { forwardHostHome: true } }), + }, + { + reason: "scenario-owned plugins", + makeScenario: () => makeQaSuiteTestScenario("plugin", { plugins: ["diagnostics-otel"] }), + }, + { + reason: "memory state", + makeScenario: () => makeQaSuiteTestScenario("memory", { surface: "memory" }), + }, + { + reason: "image generation setup", + makeScenario: () => + makeQaSuiteTestScenario("image-generation", { config: { ensureImageGeneration: true } }), + }, + { + reason: "state-mutating flow calls", + makeScenario: () => readQaScenarioById("plugin-lifecycle-hot-reload"), + }, + ])("isolates serial runs for $reason", ({ makeScenario }) => { + const scenario = makeScenario(); + + expect(scenarioRequiresIsolatedQaSuiteWorker(scenario)).toBe(true); + expect( + shouldUseIsolatedQaSuiteScenarioWorkers({ + scenarios: [makeQaSuiteTestScenario("baseline"), scenario], + concurrency: 1, + }), + ).toBe(true); + }); + it("does not isolate plain serial scenario runs", () => { expect( shouldUseIsolatedQaSuiteScenarioWorkers({ diff --git a/extensions/qa-lab/src/suite-planning.ts b/extensions/qa-lab/src/suite-planning.ts index 87dac841a32c..707ac5284347 100644 --- a/extensions/qa-lab/src/suite-planning.ts +++ b/extensions/qa-lab/src/suite-planning.ts @@ -288,10 +288,8 @@ function shouldUseIsolatedQaSuiteScenarioWorkers(params: { (params.concurrency > 1 || params.scenarios.some( (scenario) => - isQaMergePatchObject(scenario.gatewayConfigPatch) || - (scenario.execution.kind === "flow" && scenario.execution.providerMode !== undefined) || - (scenario.execution.kind === "flow" && scenario.execution.runtime !== undefined) || - (scenario.execution.kind === "flow" && scenario.execution.transportPolicy !== undefined), + scenarioRequiresIsolatedQaSuiteWorker(scenario) || + (scenario.execution.kind === "flow" && scenario.execution.providerMode !== undefined), )) ); }