From 330faabf9a8fec2725d2478ea6ae8669703c98c8 Mon Sep 17 00:00:00 2001 From: Shoubhit Dash Date: Wed, 3 Jun 2026 18:50:03 +0530 Subject: [PATCH] fix(reference): own legacy warmup before core fork --- packages/opencode/src/reference.ts | 5 ++++- packages/opencode/test/reference/reference.test.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/reference.ts b/packages/opencode/src/reference.ts index e602e25b36b..cb9df487ea2 100644 --- a/packages/opencode/src/reference.ts +++ b/packages/opencode/src/reference.ts @@ -9,7 +9,7 @@ import { ProjectReference } from "@opencode-ai/core/project-reference" import { ConfigReference } from "@opencode-ai/core/config/reference" import { RepositoryCache } from "@opencode-ai/core/repository-cache" import { AbsolutePath } from "@opencode-ai/core/schema" -import { Context, Effect, Layer, Schema } from "effect" +import { Context, Effect, Layer, Schema, Scope } from "effect" export type Resolved = ProjectReference.Resolved @@ -51,6 +51,7 @@ export const layer = Layer.effect( Service, Effect.gen(function* () { const config = yield* Config.Service + const scope = yield* Scope.Scope const state = yield* InstanceState.make( Effect.fn("Reference.state")(function* (ctx) { const { Config: ConfigV2 } = yield* Effect.promise(() => import("@opencode-ai/core/config")) @@ -93,6 +94,8 @@ export const layer = Layer.effect( return Service.of({ init: Effect.fn("Reference.init")(function* () { yield* InstanceState.get(state) + // Own the cached warmup from the long-lived legacy scope before the core layer's scheduled fork can claim it. + yield* ensure().pipe(Effect.forkIn(scope, { startImmediately: true }), Effect.asVoid) }), list: Effect.fn("Reference.list")(function* () { return yield* InstanceState.useEffect(state, (service) => service.list()) diff --git a/packages/opencode/test/reference/reference.test.ts b/packages/opencode/test/reference/reference.test.ts index 4cc5eb4506e..907d7d1a3f8 100644 --- a/packages/opencode/test/reference/reference.test.ts +++ b/packages/opencode/test/reference/reference.test.ts @@ -1,5 +1,6 @@ import { afterEach, describe, expect } from "bun:test" import path from "path" +import { pathToFileURL } from "url" import { Effect, Layer } from "effect" import { FSUtil } from "@opencode-ai/core/fs-util" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" @@ -202,7 +203,9 @@ describe("reference", () => { const resolved = yield* reference.get("docs") expect(resolved?.kind).toBe("git") if (resolved?.kind === "git") { - expect(resolved.reference.remote).toBe(`file://${remoteRoot}/opencode-reference-init/repo.git`) + expect(resolved.reference.remote).toBe( + new URL("opencode-reference-init/repo.git", pathToFileURL(remoteRoot + path.sep)).href, + ) } }), {