diff --git a/packages/core/src/plugin/supervisor.ts b/packages/core/src/plugin/supervisor.ts index 2677aec148d..f782ddc8839 100644 --- a/packages/core/src/plugin/supervisor.ts +++ b/packages/core/src/plugin/supervisor.ts @@ -125,9 +125,9 @@ export const layer = Layer.effect( Stream.debounce("100 millis"), Stream.runForEach((target) => Effect.gen(function* () { - yield* activate() + yield* activate().pipe(Effect.catchCause((cause) => Effect.logError("failed to reload plugins", { cause }))) if (observed === target) yield* ready.open - }).pipe(Effect.catchCause((cause) => Effect.logError("failed to reload plugins", { cause }))), + }), ), Effect.forkScoped({ startImmediately: true }), ) diff --git a/packages/core/test/config/plugin.test.ts b/packages/core/test/config/plugin.test.ts index c243a5ef5ce..2d119f87496 100644 --- a/packages/core/test/config/plugin.test.ts +++ b/packages/core/test/config/plugin.test.ts @@ -427,6 +427,20 @@ describe("PluginSupervisor config", () => { }), ), ) + + it.live("unblocks flush when plugin activation fails", () => + Effect.gen(function* () { + const sdk = yield* SdkPlugins.Service + yield* sdk.register(EffectPlugin.define({ id: "duplicate-id", effect: () => Effect.void })) + yield* sdk.register(EffectPlugin.define({ id: "duplicate-id", effect: () => Effect.void })) + yield* withLocation( + undefined, + Effect.gen(function* () { + yield* ready().pipe(Effect.timeout("2 seconds")) + }), + ) + }), + ) }) const ready = Effect.fnUntraced(function* () {