Dashboard › opencode › Distillation
2835240b-7e59-4bfd-9413-6e9ee2c528d4["lore_tm_v1_1TDVs8O9MRZ4Duxe_OcQnFSecdo747zDK12HfQu5bQU","lore_tm_v1_9cyprd2ZskV2Ru5EtR9nRT6D_E8GWQsI9YN8OGH_zkM","lore_tm_v1_BIXTKtefCYaTghpNBIueqpnbJ3BLGH0_xUSkG4o0HkU","lore_tm_v1_wl7odu9rfmWDngCI4TzhIajs3ecraqqtrj8MclL91K8","lore_tm_v1_mhGIXwzicR0sZBcaKvFOaE_zF0sRU_GgBjBJZ_B0OMo","lore_tm_v1_E6WADRqcVzRfdAmIvrtL25VhSNEcYdVuWb-C5HxyfoY","lore_tm_v1_0AjamyRoXT5suVY-B-3GJZyO4mt6gYpLy1Z_Iwiwneg","lore_tm_v1_JkeKNU4S0NmBvpKzoxl-8SGtYevSqeA7p8wO-yJ3tME","lore_tm_v1_Wo5gxemLUHJQ1mVE1K17LqhvstcSUgBWIPCPQ2QXyfg","lore_tm_v1_jMpuVy7WSbZJVLfKa_25PpIsQTMyDfOhhXgTUfHx8SA","lore_tm_v1_76xMstnguu7f1LrFK1azrsxbnVulGxrkwMjLh7aOl3k","lore_tm_v1_MyILbUNsno13N2pd-arB6YsgbgeioNCb6ScZLS4tdAk","lore_tm_v1_LovwIVkihmgW7kbvC8MVlo3tpp9ad7eujKABN8vgjWA","lore_tm_v1_Zsxlea8CFF5dVPq_QFF5o0XZjwv0zOFCifraQV10A6Q","lore_tm_v1_aWFdcKr8UHZBMghNWR19B-hgZBrmq4fUT2E6yJvM4cg","lore_tm_v1_DPg_J3i7PVYx1ilvPpfXfiCL3yRC4xi2KrNYsy6XzDg"]
Date: Sep 17, 2026
/tmp/opencode/session-recovery-final-v21.patch SHA-256 was 2ae4eea72024cafe8b69c0461063ee25cbf54608856cd258866b7f3b86620b36; /home/byk/Code/opencode/packages/opencode/dist/server/opencode-server SHA-256 was aa98d64abb3bf6ac0ef88a940f9c41c6eb14ffeab3c3a7846921ba01ef46643d; checked-out base commit was ab9408c81cc9916177641ae8e9f08624fc27b5b9.patch_paths=34, unique_patch_paths=34, worktree_paths=34, unique_worktree_paths=34, path_sets_equal=True, and duplicate_patch_paths=[].packages/client/src/generated/types.ts; packages/core/schema.json; packages/core/src/database/migration.gen.ts; packages/core/src/database/migration/20260914170650_session-recovery.ts; packages/core/src/database/schema.gen.ts; packages/core/src/session.ts; packages/core/src/session/compaction.ts; packages/core/src/session/context-epoch.ts; packages/core/src/session/execution/claim.ts; packages/core/src/session/execution/local.ts; packages/core/src/session/input.ts; packages/core/src/session/message-updater.ts; packages/core/src/session/projector.ts; packages/core/src/session/recovery-id.ts; packages/core/src/session/recovery.ts; packages/core/src/session/run-coordinator.ts; packages/core/src/session/runner/index.ts; packages/core/src/session/runner/llm.ts; packages/core/src/session/runner/publish-llm-event.ts; packages/core/src/session/sql.ts; packages/core/test/database-migration.test.ts; packages/core/test/session-execution-local.test.ts; packages/core/test/session-projector.test.ts; packages/core/test/session-prompt.test.ts; packages/core/test/session-run-coordinator.test.ts; packages/core/test/session-runner-recorded.test.ts; packages/core/test/session-runner-tool-events.test.ts; packages/core/test/session-runner.test.ts; packages/opencode/src/server/routes/instance/httpapi/server.ts; packages/schema/src/session-event.ts; packages/schema/test/event-manifest.test.ts; packages/sdk/js/src/v2/gen/types.gen.ts; packages/sdk/openapi.json; packages/server/src/routes.ts.sdk-next composes Client, Core, and Server.import { foo as bar } from "..." or resolve as pathResolve.import * as Foo from "..." and import type * as Foo from "..."; namespace-style access should import a module’s own exported namespace by name, such as import { Project } from "@opencode-ai/core/project".bun typecheck from package directories, such as packages/opencode, and never run tsc directly.do-not-run-tests-from-root guard.HttpApi, run bun run generate from packages/client; do not directly edit src/generated or src/generated-effect. The legacy JavaScript SDK is regenerated with ./packages/sdk/js/script/build.ts.git diff --stat displayed 29 files because newly added files were untracked in the review worktree; the complete verified patch/worktree set contained 34 paths.packages/core/src/session/execution/claim.ts defines lease fencing through an exact predicate requiring matching session_id, execution id, owner_id, and expires_at > now. update() additionally restricts phase transitions: target cancelled requires current cancelling; target cancelling rejects current cancelled; other updates reject both cancelling and cancelled. Missing updates, renewals, cancellation settlements, or clears die with SessionExecutionClaim.Lost.packages/core/src/session/execution/claim.ts documents wall-clock lease behavior: the lease interval must exceed maximum deployment clock skew plus one renewal interval; execution IDs fence a node immediately after takeover; an expired claim cannot renew itself. transaction() uses an immediate database transaction and validates the claim via update(db, claim) before executing its effect.packages/core/src/session/recovery-id.ts deterministically derives recovery IDs: message(executionID, assistantMessageID?) preserves an existing assistant message ID or creates msg_recovery_${executionID}; continuation(executionID) creates msg_recovery_continue_${executionID}.20260914170650_session-recovery adds session_input.wake_pending (integer DEFAULT false NOT NULL), session.wake_attempts (integer DEFAULT 0 NOT NULL, constrained to 0..9007199254740991), and tables session_execution and session_recovery.20260914170650_session-recovery constrains session_execution.phase to ready, safe, unknown, continue, cancelling, or cancelled; creates a unique execution-per-session index session_execution_session_idx; and adds owner and recovery-scan indexes.20260914170650_session-recovery defines session_recovery with primary key execution_id, unique continuation_message_id, wake_pending DEFAULT true, bounded wake_attempts, and foreign keys to session, optional session_message, and required continuation session_input, all with ON DELETE CASCADE.