Dashboard › opencode › Distillation
249dac5b-eaa6-42b5-9f38-d149b8a18f47["lore_tm_v1_zm4tQVTOYsoZ22FItp9SiLj527bLbo5I41eMLokKhms","lore_tm_v1_IKsYnbOBPf84V0FZFaP93WOb20FEXTzLgJxFFsZdsGM","lore_tm_v1_0HL2TpZYC6xey1HuTlbpM6h-FfaZgV9tOQb6mrZpYC0","lore_tm_v1_Ux1fEEvu2lZzp5Jsknlqw2GgIBL2d1e6MHNcnlAc5CI"]
Date: Sep 17, 2026
SessionInput.admit checks isRecoveryInput(db, input.id) and dies with new LifecycleConflict({ id: input.id }) when a recovery continuation is improperly admitted through the normal path; stored input data includes requestExecution, timeCreated, and wake state.packages/core/src/session/projector.ts, SessionEvent.Prompted requires event.durable, then calls SessionInput.projectPrompted with promotedSeq: event.durable.seq; SessionEvent.PromptAdmitted similarly calls SessionInput.projectAdmitted with admittedSeq: event.durable.seq and defaults requestExecution via event.data.requestExecution ?? false.SessionEvent.Step.Recovered projection in packages/core/src/session/projector.ts requires a durable aggregate sequence and derives continuationMessageID using continuation(event.data.executionID). Existing recovery rows are idempotently accepted only when sessionID, assistantMessageID, continuationMessageID, and phase all match; otherwise projection dies with Recovery execution identity conflict: ${event.data.executionID}.SessionEvent.Step.Recovered specifies assistantMessageID, the projector loads the latest assistant message for the session by descending SessionMessageTable.seq; it rejects a missing or non-latest target with Recovery target is not the latest assistant: ${event.data.assistantMessageID} and rejects a decoded non-assistant target with Recovery target is not an assistant: ${event.data.assistantMessageID}.Prompt.make({ text: "continue" }), requestExecution: false, and admittedSeq: event.durable.seq, then inserts SessionRecoveryTable fields session_id, execution_id, assistant_message_id, continuation_message_id, phase, wake_pending: true, and time_created. The insert uses .onConflictDoNothing() and treats a non-insert as a recovery identity conflict.packages/core/src/session/projector.ts projects SessionEvent.RevertEvent.Staged by storing the revert payload and cloning revert.files when present; RevertEvent.Cleared sets revert: null. RevertEvent.Committed resolves the boundary message sequence and dies with Revert boundary message not found: ${event.data.messageID} if absent, then deletes later session messages where SessionMessageTable.seq > boundary.seq.Semaphore.makeUnsafe(1).withPermit, context-overflow recovery hooks including compaction.compactAfterOverflow, interruption handling with the defect text "Provider Step outcome unknown after interruption", assistant failure publication, unsettled-tool failure text "Provider did not return a tool result", cancellation-phase checks, and TurnTransitionError defect handling.capture found exactly 3 matches in packages/core/src/snapshot.ts: line 49 declares readonly capture: () => Effect.Effect<ID | undefined>, line 129 defines Effect.fn("Snapshot.capture"), and line 241 provides capture: () => Effect.succeed(undefined).