From 27e7b0558a70709d85470d58efeda15d80139e93 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Tue, 28 Jul 2026 13:00:24 -0400 Subject: [PATCH] fix(core): preserve plugin update order (#39372) --- packages/core/src/plugin/supervisor.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/src/plugin/supervisor.ts b/packages/core/src/plugin/supervisor.ts index bac17d1945..39bb868678 100644 --- a/packages/core/src/plugin/supervisor.ts +++ b/packages/core/src/plugin/supervisor.ts @@ -277,17 +277,17 @@ const layer = Layer.effect( // Replace the active generation in one scoped, batched activation. yield* registry.activate(plugins) }) - const sourceChanges = config.changes().pipe( - Stream.filterEffect((update) => Effect.map(config.entries(), (entries) => isPluginSource(entries, update.path))), - Stream.merge(Stream.fromPubSub(configuredChanges)), - // Make accepted filesystem work visible to flush before coalescing the burst. + const updates = Stream.merge( + config.changes().pipe( + Stream.filterEffect((update) => Effect.map(config.entries(), (entries) => isPluginSource(entries, update.path))), + Stream.merge(Stream.fromPubSub(configuredChanges)), + ), + bus.subscribe([Event.Updated, SdkPlugins.Updated]), + ).pipe( + // Make accepted work visible to flush before coalescing the burst. Stream.mapEffect(() => Effect.sync(() => ++observed)), - Stream.debounce("100 millis"), ) - const busUpdates = bus - .subscribe([Event.Updated, SdkPlugins.Updated]) - .pipe(Stream.mapEffect(() => Effect.sync(() => ++observed))) - yield* Stream.concat(Stream.succeed(0), Stream.merge(busUpdates, sourceChanges)).pipe( + yield* Stream.concat(Stream.succeed(0), updates).pipe( // Keep observing updates while activation runs, retaining only the latest generation request. Stream.buffer({ capacity: 1, strategy: "sliding" }), Stream.debounce("100 millis"),