From e70227d5810a94af2ec084de35c91a6ac86bcf32 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Mon, 6 Jul 2026 20:59:47 +0800 Subject: [PATCH] =?UTF-8?q?workflow:=20pin=20the=20spec=20engine's=20concu?= =?UTF-8?q?rrency=20=E2=80=94=20the=20auto=20default=20is=20one=20slot=20o?= =?UTF-8?q?n=20small=20CI=20runners?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two tests that wait for two children IN FLIGHT (the pipeline no-barrier test and the dropped-promise cancellation test) inherited the engine's auto-resolved maxConcurrentAgents, which is min(16, max(1, cores - 2)) — exactly 1 on the 2-core CI runner, so the second child never started and vi.waitFor timed out. Reproduced locally under taskset -c 0,1; the full spec passes there with the helper pinning a fixed ceiling. Tests about the ceiling itself keep their explicit overrides, and the auto-resolve arm stays covered by the default-config provider tests. --- packages/workflow/workflow-vm/tests/workflow-vm.spec.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/workflow/workflow-vm/tests/workflow-vm.spec.ts b/packages/workflow/workflow-vm/tests/workflow-vm.spec.ts index a4058303ea..ac037bdb04 100644 --- a/packages/workflow/workflow-vm/tests/workflow-vm.spec.ts +++ b/packages/workflow/workflow-vm/tests/workflow-vm.spec.ts @@ -97,7 +97,10 @@ async function setup(options?: SetupOptions) { options?.disposeDelayMs ?? 0, ) ctx.subagents.registerProvider(provider) - await ctx.plugin(VmWorkflowEngine, { provider: 'stub', ...options?.config }) + // A fixed concurrency ceiling: the auto-resolved default is machine-derived + // (cores - 2, floored at 1), so tests that expect N children in flight + // would wedge on small CI runners. Tests about the ceiling override it. + await ctx.plugin(VmWorkflowEngine, { provider: 'stub', maxConcurrentAgents: 8, ...options?.config }) return { ctx, provider, parent: fakeParent() } }