Both tests rely on JS-level spies that the upstream Workspace refactor bypasses:
1. spyOn(globalThis, "fetch") doesn't intercept anymore. The Effect FetchHttpClient layer holds fetch as a fiber-ref with defaultValue: () => globalThis.fetch, captured at fiber start. The spy descriptor isn't observed through that ref — calls go to the original fetch and produce Transport errors against workspace.test.
2. spyOn(SyncEvent, "replayAll") spies the module-level wrapper. Upstream's Workspace.Service now yields SyncEvent.Service inside the layer and calls sync.replayAll(events) on the Service directly, never touching the module-level export.
Restoring coverage requires injecting Effect-side mock layers (custom HttpClient + SyncEvent.Service). Out of scope for the merge resolution. Tracked for follow-up.
Moves effect logging, observability, runtime utilities, flags, installation
version info, and process utilities from opencode to core package. This
enables better code sharing across packages and establishes core as the
single source of truth for foundational utilities.
All internal imports updated to use @opencode-ai/core paths for consistency.