diff --git a/packages/api/src/agents/files/processing.spec.ts b/packages/api/src/agents/files/processing.spec.ts index 279c8d1045b..adfce5822e7 100644 --- a/packages/api/src/agents/files/processing.spec.ts +++ b/packages/api/src/agents/files/processing.spec.ts @@ -177,6 +177,35 @@ describe('worker lifecycle', () => { } }); + it.each([false, true])( + 'keeps timers running while a worker reply is pending, warm=%s', + async (warm) => { + const processor = createHostEditProcessor(fixture); + const controller = new AbortController(); + try { + if (warm) await processor.apply('ready', [edit]); + let settled = false; + const pending = processor.apply('wait', [edit], undefined, controller.signal).then( + () => { + settled = true; + return 'completed'; + }, + (error: Error) => { + settled = true; + return error.name; + }, + ); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(settled).toBe(false); + controller.abort(); + await expect(pending).resolves.toBe('AbortError'); + } finally { + controller.abort(); + await processor.close(); + } + }, + ); + it('has no queue and releases capacity only after cancellation terminates the worker', async () => { const processor = createHostEditProcessor(fixture); const controller = new AbortController(); diff --git a/packages/api/src/agents/handlers.spec.ts b/packages/api/src/agents/handlers.spec.ts index 719bf075831..e98aa808880 100644 --- a/packages/api/src/agents/handlers.spec.ts +++ b/packages/api/src/agents/handlers.spec.ts @@ -5545,7 +5545,7 @@ describe('createToolExecuteHandler', () => { ]; it.each(['SKILL.md', 'references/a.md'])( - 'rejects compact amplification atomically for %s without starving timers', + 'rejects compact amplification atomically for %s', async (file) => { const updateSkill = jest.fn(); const saveSkillFileContent = jest.fn(); @@ -5570,10 +5570,6 @@ describe('createToolExecuteHandler', () => { updateSkill, saveSkillFileContent, }); - let timerFired = false; - const timer = setTimeout(() => { - timerFired = true; - }, 0); const [result] = await invokeHandler(handler, [ { id: 'amplification', @@ -5581,10 +5577,8 @@ describe('createToolExecuteHandler', () => { args: { path: `skills/bounded-skill/${file}`, edits: amplificationEdits() }, }, ]); - clearTimeout(timer); expect(result.status).toBe('error'); expect(result.errorMessage).toContain('budget exceeded'); - expect(timerFired).toBe(true); expect(updateSkill).not.toHaveBeenCalled(); expect(saveSkillFileContent).not.toHaveBeenCalled(); },