diff --git a/packages/subagent/subagent/src/continuation-activation.ts b/packages/subagent/subagent/src/continuation-activation.ts index f679397432..d5caf0a0e2 100644 --- a/packages/subagent/subagent/src/continuation-activation.ts +++ b/packages/subagent/subagent/src/continuation-activation.ts @@ -369,7 +369,8 @@ export class ContinuableActivationRegistry { activation.execution.cancel(kind, true) } else { activation.execution.controller.abort({ kind }) - void this.dispose(activation).catch((error: unknown) => { this.reportTeardownFailure(activation, error) }) + // The settlement observer reports teardown failures. + void this.dispose(activation).catch(() => undefined) } } diff --git a/packages/subagent/subagent/tests/external-activation.spec.ts b/packages/subagent/subagent/tests/external-activation.spec.ts index 2708ef49c0..6e14b61e5d 100644 --- a/packages/subagent/subagent/tests/external-activation.spec.ts +++ b/packages/subagent/subagent/tests/external-activation.spec.ts @@ -221,6 +221,7 @@ describe('external subagent activations', () => { return { ...backend.run, dispose } }) const activation = await fixture.start() + const warning = vi.spyOn(fixture.ctx.logger, 'warn') const authority = kind === 'user' ? { kind, parentSessionId: fixture.parent.id } : { kind, agent: fixture.parent } @@ -238,6 +239,7 @@ describe('external subagent activations', () => { const rejected = expect(disposal).rejects.toThrow('interrupt cleanup failed') backend.cleanup.reject(new Error('interrupt cleanup failed')) await rejected + await vi.waitFor(() => { expect(warning).toHaveBeenCalledTimes(1) }) } else { backend.cleanup.resolve(undefined) await disposal