Dashboard › opencode › Distillation
05cf8383-78be-4bc6-8113-c438a4cacf3f["lore_tm_v1_dEQmJT4Vp1-QG6FCJrIHwlHbGkoV5OGn79t6ZnehXLA","lore_tm_v1_AcGt15l3uU_yr72kP5D0st3fTpuhKgYrqb3r3HPniSs","lore_tm_v1_3XkDbV9-U7vutVunwFrPPOgoK90e22sWeR89vN-TmJE","lore_tm_v1_vmQgtIb-U3g7CBmXYjgJ5fvk-H1Oh5DauFJA1lavXCY","lore_tm_v1_ACKWQULngpd2z4DJHjV3uBWrsQpnBV6d2Z38AxgQxfc","lore_tm_v1_VpEt6Y2QynfJgfMTju7Pm03gAjafWBOVH2MW0gZ4Ifs","lore_tm_v1_vzrdKQtBgK5Sx0d4E_y85gcih8hAEa8AyaxaPttVZXI","lore_tm_v1_VCtxh4xNaV1z8EUj61-6DYPaBE-G10U-8vHRID5p6G0"]
Date: Sep 16, 2026
packages/core/src/session/recovery-id.ts: message(executionID, assistantMessageID?) returns the supplied assistantMessageID or deterministic SessionMessage.ID.make(\msg_recovery_${executionID}`); continuation(executionID)returnsSessionMessage.ID.make(`msg_recovery_continue_${executionID}`)`.steer.packages/core/test/session-projector.test.ts covering: atomic reconciliation of one abandoned execution into one continuation; recording a recovery continuation without forging an assistant identity; quarantining malformed and cross-session recovery continuations with recovery_error: "Invalid recovery continuation input"; quarantining a full poison batch before redriving valid work; stale recovery-wake handling; supersession before scanner validation, including assistant-less recovery; and preventing quarantined continuations from appearing as pending ordinary steer work.packages/core/test/session-projector.test.ts: poisonCount = SessionRecovery.BATCH_SIZE + 1; the malformed rows are changed with UPDATE session_input SET prompt = '{}'; all poisonCount rows must be quarantined with "Invalid recovery continuation input" before the valid session at sessions[poisonCount] is woken.packages/core/test/session-prompt.test.ts: delegate execution continuation through SessionExecution; wake execution when an exact prompt retry recovers a committed message; replay historical prompt admission without execution intent as admit-only; turn an admit-only exact retry into durable execution intent; promote steers only through the captured inbox cutoff; and return an exact retry of a legacy projected prompt.8,215-byte patch at /tmp/opencode/session-recovery-final-v5.patch.packages/core/src/session/runner/index.ts, where SessionRunner.Interface.run(...) accepts { sessionID, force, executionID, ownerID, recoveryInputID? }; recoveryInputID is an optional SessionMessage.ID.SessionRunner.RunError as the union of LLMError, SessionRunnerModel.Error, MessageDecodeError, ContextSnapshotDecodeError, SystemContext.InitializationBlocked, and ToolOutputStore.Error.packages/opencode/src/server/routes/instance/httpapi/server.ts wiring where createRoutes(corsOptions?) provides AppNodeBuilderV1.build(LayerNode.group([SessionV2.node, SessionRecovery.node]), [[LocationServiceMap.node, locationServiceMapV2], [SessionExecution.node, SessionExecutionLocal.node]]).packages/opencode/src/server/routes/instance/httpapi/server.ts: Observability.layer must remain last because later-provided layers build beneath earlier ones; otherwise eagerly forked fibers such as the ModelsDev background refresh capture Effect’s default stdout logger and corrupt the TUI (#34730).