Dashboard › opencode › Distillation
3ebf5d14-92b5-4e45-89d4-da756c3ceac1["lore_tm_v1_4gJEDggPehaZzhwHzfZX4na1bJTglPZJooop4rivK2w","lore_tm_v1_KNx1NUU95Slo1po1qPxy4MPxSgP_IZkD63I5mB_6F7Y","lore_tm_v1_2rrvyFOZjHRS1xddI-5duMcjyfFQGRzaFfDpUKeCxNs","lore_tm_v1_z35wYUY3hC2vNP3xTbV5rlQbBFI-zElL5oFlYR6vyj8","lore_tm_v1_5dViNueq9YJvMV7Gd_753LkBuq6OqUxgK-GDRp5eeI8","lore_tm_v1_gjWg1WnGpn84H75pXIk6MBoyu8PZgw5KWQdP465alP8","lore_tm_v1_8BKCEc2DhBmTCkrD8hMBXMSQYU44uHTTVsYmDeMVEE0","lore_tm_v1__UP7dIL2AglHoPS7zqfB3LRhYqiOP3m6o2YYH4_ahN4","lore_tm_v1_F81liroSFPSe4ZTgVwEkNDVlU6Ddqi1A6Q1sFvoESlk","lore_tm_v1_2CcHuedMXUrk9LASKwI_nJz6g4Qqqm3dJlT-D5Dq_vA","lore_tm_v1_ZdBd87wcSWmTycEV3urkVfrc5u1KB8JsQRaxK-DU55c","lore_tm_v1_Q4V0jLjrD99N5LpmxLj6u-JwjCpELyPRWpoPCaf3lok","lore_tm_v1_Vd9AZMSabuMPUD7bUc1trZXcWmsdCa8L0uKb_go9cQs","lore_tm_v1_k9SdrFatggl70gObpUKQYVuURlE1CuawUqYzliv_HCo","lore_tm_v1_3VvaDIn5U_DdHUlJUMNS6I2mmDlbNx-xknEwhGlGkKA","lore_tm_v1_zBKnLplbf4VEIM8CSLxytPRPVd0HM9QLBaYqZ9VMO1E","lore_tm_v1_7eiU3XRdBiVrYYH3Yls_Ll9FkVgXhI_QSMk9-7QRftM","lore_tm_v1_6IzZVJpzu0swvZrPWourkC2R8U1Y-DlmeGvmH16A8iw","lore_tm_v1_kLIM6Ml3ZrdKQOajYkeXnmY4Awh3JWyDJqvoFv2OBR0","lore_tm_v1_zz10pb9dI1amtGxC1ht6kMzjypQ-He6_gaA2XOyA0nU","lore_tm_v1_YcsKiiiIUjePozOqY19xau1_1pJxOWeBvvXNC5qAPoo","lore_tm_v1_rTFWSENBRMt8S8G8B2m4OTHdjkPxrriN1eS3BrSkdnU","lore_tm_v1_rCH5UCPF3M1K-h1CB5CLO_t0tWc4qx8cUNZfESezCuw","lore_tm_v1_6hGG2ufoep2mHjCKxg5YewMVto5l2ng7MTmHKGYy8qc","lore_tm_v1_t2J2FEj86g9F6uXL_Su8LE4DV52hCl1hRmpt4DsDOlI","lore_tm_v1_rpS8JajouTEE5MCY7E2pmXEYmwGWZYBRifhIwpOxEzU","lore_tm_v1_E_NsOm5pM_rBgGXzHjh7XLeuPIR0G_KJWD_Vo-RmQCI","lore_tm_v1_YKPijsgeGn8CtZH5HtLMcfdaWfjYcE58fMMKz2zS1Gw","lore_tm_v1_zy29-e9VLIDadvkDhVrQKTIRX5iDKYUooxluavh6ZM8"]
Date: Sep 15, 2026
packages/core/src/session/sql.ts, packages/schema/src/session-event.ts, packages/core/src/session/message-updater.ts, and packages/core/src/session/input.ts.keeps automatic compaction unknown until Compaction.Ended commits in packages/core/test/session-runner.test.ts simulates ownership transfer during an uncommitted compaction summary by replacing the execution with { id: "compaction-successor", owner_id: "successor", expires_at: 60_000 }; expected outcome is no projected compaction message and execution { id: "compaction-successor", phase: "unknown" }.packages/core/src/session/projector.ts, packages/core/src/session/sql.ts, packages/core/src/session/runner/llm.ts, packages/core/src/session/input.ts, and packages/core/src/session/recovery.ts.packages/core/src/database/migration/20260914170650_session-recovery.ts was updated.tsgo --noEmit completed successfully with no reported errors.20260915175043_session-recovery-state and regenerated the full schema as 20260915175046_schema.packages/core/src/database/migration/20260915175043_session-recovery-state.ts was deleted, consolidating the schema changes into the existing recovery migration rather than retaining a new incremental migration.20260915175127_schema.expect() calls across 5 files in 15.26s using Bun 1.3.14.packages/core/src/database/schema.gen.ts now constrains session_execution.phase to 'ready', 'safe', 'unknown', or 'continue'.packages/core/src/database/schema.gen.ts defines session_recovery with columns session_id, execution_id, nullable assistant_message_id, continuation_message_id, phase, wake_pending integer DEFAULT true NOT NULL, nullable recovery_error, and time_created; primary key is execution_id.session_recovery foreign keys cascade on deletion: session_id → session.id, assistant_message_id → session_message.id, and continuation_message_id → session_input.id; unique index session_recovery_continuation_message_idx covers continuation_message_id.never starts a local tool after ownership changes in packages/core/test/session-runner.test.ts transfers ownership to { id: "tool-successor", owner_id: "successor", expires_at: 60_000 } when SessionEvent.Tool.Called is observed; it expects no local executions and no SessionEvent.Tool.Success or SessionEvent.Tool.Failed event.never fails interrupted tools after ownership changes in packages/core/test/session-runner.test.ts uses assistant message ID msg_interrupted_tool_fence to cover fencing of interrupted-tool failure publication.adds final recovery ownership tables to a populated predecessor in packages/core/test/database-migration.test.ts applies sessionRecoveryMigration to populated legacy session, session_message, and session_input tables; verifies rows ses_existing, msg_existing, and msg_input survive; verifies session_execution.id is required; verifies session_input.wake_pending defaults to "false"; and verifies invalid execution phase 'invalid' is rejected.packages/core/src/event.ts permits local commit hooks only for durable definitions, otherwise dies with InvalidDurableEventError and message "Local commit hooks require a durable event"; committed durable events receive durable.aggregateID, durable.seq, and definition version before notification.packages/core/test/database-migration.test.ts was updated after inspection of the recovery migration coverage.packages/core/test/session-projector.test.ts verify: 1. a durable recovery wake is redriven on each recovery pass, producing 2 wakes while retaining execution_id: "lost-wake", continuation_message_id: continuation("lost-wake"), and wake_pending: true; 2. ordinary input execution intent is redriven after a lost advisory wake, producing 2 wakes and retaining { wake_pending: true, promoted_seq: null }; 3. a recovered assistant belonging to another session is rejected without creating SessionRecoveryTable or SessionInputTable rows; 4. a malformed claim can be quarantined without blocking a valid claim.packages/core/test/session-projector.test.ts and packages/core/test/session-runner.test.ts were updated with recovery and ownership-fencing coverage.SessionEvent.Compaction.Ended projected in packages/core/src/session/projector.ts and published from packages/core/src/session/compaction.ts.packages/core/src/session/recovery.ts reads pending recovery rows where wake_pending = true and recovery_error IS NULL, ordered by time_created then execution_id; recovery updates are guarded by the same pending/error conditions.packages/core/src/session/input.ts updates SessionRecoveryTable by matching session_id and continuation_message_id.packages/core/src/session/execution/local.ts was updated after identifying its query for pending recovery continuations by session_id and wake_pending = true, ordered by time_created then execution_id.