Dashboard › opencode › Distillation
ea4d5ddf-6ddb-4d91-9a71-2b325031efba["lore_tm_v1_rncoTT6xnIu8ZaF3BXPLcom083j_94mO4rXvyyBavh4","lore_tm_v1_GXvV8LwfnftocPDL0OAnARNUZzjAAHig_q2QJM7MSK4","lore_tm_v1_2R3sSsJCi71nBhK65J-83G8ZKB_ycaYFZ-icdkAnuhY","lore_tm_v1_9-GE5QgcvM8Mjt5CoU4i1S8u2ClGEuLkCNi3o_kSkN4","lore_tm_v1_x0YqlMyE-mcnU5NyheDcKck3IDSPdBJrFw_DG7r753s","lore_tm_v1_2W0NKGRey_jUTMnSlAxbKNIGdSAfpeEAyMxSQ72jzjM","lore_tm_v1_mzpccmXWDohPV6bPqj7qFQEF4GN_nF7QgpbH8NkCd9g","lore_tm_v1_e8HEne-wa8QLB9kFdGgu2p2spKqfKAkFpPPHX5rQdlI","lore_tm_v1_o34ilexj4YDu1b5heTuLphWy4WinKeeLL5Tv2AYa2Q4","lore_tm_v1_jNc7RbwFnkxsISpTvlLZsCMPXkcbUSLqfwWc3fnrxb8"]
Date: Sep 16, 2026
/tmp/opencode/session-recovery-v7-check/packages/core/test/session-projector.test.ts:1437./tmp/opencode/session-recovery-v7-check/packages/core/test/session-projector.test.ts:1357-1375 tests stale exact recovery promotion: SessionInput.promoteExact(db, events, sessionID, continuation("exact-stale"), () => Effect.void) must fail, leave SessionRecoveryTable.wake_pending=true, set recovery_error="Invalid recovery projection identity", keep SessionInputTable.promoted_seq=null, and emit no session.next.prompted.1 event./tmp/opencode/session-recovery-v7-check/packages/core/test/session-projector.test.ts:1379-1435 tests an assistant-less recovery superseded before scanner validation: recovered execution "synthetic-stale" is followed by SessionEvent.Step.Started; SessionRecovery.recover() must make no SessionExecution.wake calls, set recovery_error="Invalid recovery projection identity", and emit no session.next.prompted.1 event./tmp/opencode/session-recovery-v7-check/packages/core/test/session-projector.test.ts:1437-1490 changes continuation continuation("quarantined-steer") to delivery: "steer" before recovery. SessionRecovery.recover() must quarantine it with recovery_error="Invalid recovery continuation input"; SessionInput.hasPending(db, sessionID, "steer") must be false; and SessionInput.promoteSteers(...) must initially return 0.SessionMessage.ID.make("msg_recovery_later_steer") with prompt text "later" and requestExecution: false; the next SessionInput.promoteSteers(...) must return 1, leave the quarantined continuation’s promoted_seq=null, and assign the ordinary steer a numeric promoted_seq./tmp/opencode/session-recovery-v7-check/packages/core/src/event.ts:205-367 implements commitDurableEvent(...): it validates a string durable aggregate field, rejects aggregate mismatches, runs projectors and an optional local commit(seq) hook inside an immediate database transaction, updates EventSequenceTable, inserts into EventTable, then wakes aggregate-specific durable pubsubs after commit.commitDurableEvent(...) replay handling in /tmp/opencode/session-recovery-v7-check/packages/core/src/event.ts:254-315 rejects strict replay-owner mismatches, accepts an existing sequence only when event ID/type/data exactly match, rejects divergent replay and noncontiguous sequences, ignores new replay events owned by another owner when ownership is non-strict, and rejects duplicate event IDs with their existing aggregate and sequence in the error./tmp/opencode/session-recovery-v7-check/packages/core/src/event.ts:369-379 rejects a local commit hook on a non-durable event with InvalidDurableEventError message "Local commit hooks require a durable event"./tmp/opencode/session-recovery-v7-check/packages/schema/test/event-manifest.test.ts expects EventManifest.ServerDefinitions.length=61, EventManifest.Definitions.length=91, EventManifest.Latest.size=91, and EventManifest.Durable.size=38.SessionV1.Event.Definitions surface as: 1. Created, 2. Updated, 3. Deleted, 4. MessageUpdated, 5. MessageRemoved, 6. PartUpdated, 7. PartRemoved, 8. PartDelta, 9. Diff, 10. Error.Session.Event === SessionEvent; Workspace.Event === WorkspaceEvent; "session.next.step.ended" maps to SessionEvent.Step.Ended; "todo.updated" maps to SessionTodo.Event.Updated; "project.updated" maps to Project.Event.Updated; and "session.next.prompt.execution_requested.1" maps to SessionEvent.PromptExecutionRequested.Project.Event.Definitions=[Project.Event.Updated], FileSystem.Event.Definitions=[FileSystem.Event.Edited], Integration.Event.Definitions=[Integration.Event.Updated, Integration.Event.ConnectionUpdated], Permission.Event.Definitions=[Permission.Event.Asked, Permission.Event.Replied], Reference.Event.Definitions=[Reference.Event.Updated], and IdeEvent.Definitions=[IdeEvent.Installed]; "ide.installed" must not appear in EventManifest.Latest.EventManifest.Durable not to contain "session.next.step.ended.1" and to map "session.next.step.ended.2" to SessionEvent.Step.Ended./tmp/opencode/session-recovery-v7-check/packages/sdk/js/src/v2/gen/types.gen.ts represent recovered-step sync events as "session.next.step.recovered.1" and current events as "session.next.step.recovered"; both require timestamp, sessionID, executionID, and phase, allow optional assistantMessageID, and constrain phase to "ready" | "unknown" | "continue"./tmp/opencode/session-recovery-v7-check/packages/sdk/openapi.json contains corresponding EventSessionNextStepRecovered, SyncEventSessionNextStepRecovered, and SessionNextStepRecovered schemas; their required recovered-step fields are timestamp, sessionID, executionID, and phase.