Dashboard › opencode › Distillation
d33dfa0b-1fce-49f1-b601-e5e4be45abab["lore_tm_v1_HLarlkGQePp4g94TESfsGfVg2DK7pe1C3ZFmpu6l3fQ","lore_tm_v1_VosAn6gh5fNwt2bZN0IEdvvzft9s5H6eSuR2IANYcGA"]
Date: Sep 14, 2026
RECORD=true, the listed provider credentials, and CI unset; CI forces replay. Cassettes must remain pretty-printed JSON because compact output makes multi-interaction changes difficult to audit.Schema.UnknownFromJsonString with Schema.decodeUnknownOption rather than manual JSON.parse wrapped in Effect.try.Effect.repeat or Effect.schedule, forked via Effect.forkScoped inside the owning layer definition. Ad hoc promises and handler-started loops are rejected because they escape layer lifetime and cleanup; layer-scoped fibers preserve process-global ownership and deterministic shutdown.effect-smol source to be treated as authoritative rather than memory or Effect v2/v3 examples. If .opencode/references/effect-smol is absent, clone https://github.com/Effect-TS/effect-smol there and inspect nearby source and tests.Effect.gen(function* () {}) for multi-step workflows and named Effect.fn/Effect.fnUntraced for reusable methods over ad hoc Promise chains because they preserve typed composition, tracing, and house style.@opencode/client/effect/api, never redefine inherited functions, and add only operations meaningful in plugin context. Parallel bespoke interfaces are rejected because they duplicate contracts and permit Promise, Effect, and generated-client surfaces to drift.PluginModule.load() requires one default { id, setup } or { id, effect } definition. Configured local targets must be directories with discoverable server or index entrypoints; standalone files work only through auto-discovery. Exporting a legacy async plugin function is not sufficient despite compatibility with older OpenCode loaders.bun-pty@0.4.10 can pass Bun typechecks and smoke tests but is not Node SEA-compatible because its runtime main is src/index.ts; Node SEA refuses TypeScript stripping inside node_modules with ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING. The stated fix is to use the script(1) process adapter or another compiled Node-safe PTY API; @opencode-ai/pty is not an in-process replacement because it exports only binaryPath.git push to a fork such as BYK/opencode can fail with failed to push some refs and Volta’s Node is not available because the husky pre-push hook runs turbo typecheck (tsgo -b) in a shell whose PATH cannot resolve Volta’s Node shim, causing exit code 126. The fix is to prepend the real Volta Node bin directory to PATH; the pre-push hook then completes all turbo tasks successfully or from cache and the push proceeds.**/favicon.{ico,png,svg,jpg,jpeg,webp} in the worktree, selecting the shortest path, base64-encoding it, and storing it in icon.url. Discovery runs once on first load and is skipped when icon.override or icon.url exists; the OpenCode repository has a hardcoded fallback. For existing projects, force discovery by editing through the dialog or clearing cached layout data; for new projects, place favicon.svg at the repository root before first open.packages/core/schema.json remains schema version "7" with dialect "sqlite", but its schema ID changed from f14a9b18-8207-487e-a3d3-227e629ba9ad to 57591e35-6f8f-4cda-932c-6a08e85caae7.packages/core/schema.json diff adds schema entities for tables session_execution and session_recovery, including a session_execution_pk primary-key entry and additional foreign-key/index metadata involving session_id.