From 74373f85c7bd09a76e98416b79a56adaddb252b5 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 1 May 2026 22:10:09 -0400 Subject: [PATCH] fix: skip reload disposal for fresh instances Previously reload always called disposeInstance + emitted server.instance.disposed even when no previous entry existed in the cache, sending a phantom dispose event for an instance that was never loaded. --- packages/opencode/src/project/instance-store.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/project/instance-store.ts b/packages/opencode/src/project/instance-store.ts index 3de0bdbc36..80f76d5cfa 100644 --- a/packages/opencode/src/project/instance-store.ts +++ b/packages/opencode/src/project/instance-store.ts @@ -123,9 +123,11 @@ export const layer: Layer.Layer = Layer.effect( cache.set(directory, entry) yield* Effect.gen(function* () { yield* Effect.logInfo("reloading instance", { directory }) - if (previous) yield* Deferred.await(previous.deferred).pipe(Effect.exit, Effect.asVoid) - yield* Effect.promise(() => disposeInstance(directory)) - yield* emitDisposed({ directory, project: input.project?.id }) + if (previous) { + yield* Deferred.await(previous.deferred).pipe(Effect.exit, Effect.asVoid) + yield* Effect.promise(() => disposeInstance(directory)) + yield* emitDisposed({ directory, project: input.project?.id }) + } yield* completeLoad(directory, input, entry) }).pipe(Effect.forkIn(scope, { startImmediately: true })) return yield* restore(Deferred.await(entry.deferred))