Dashboard › opencode › Distillation
2479c226-4cdd-4389-93c2-929b223f0e85["lore_tm_v1_wpki-e46xAtN_lZdNxMnbVqlPuMXqfKTex0a7rCa7Wo","lore_tm_v1_8VewV_x4U7zgI-kkM7_cUh0J5oXKEJDyfj9BnjrW_HY","lore_tm_v1_I9xjMoVThd8IRTEcK1pijjZPouHLbudWKR_TsHtIMSs","lore_tm_v1_-hibVJbbD9R99uAFvN28uA8mpt1g_OPpll2cDcE2dl4","lore_tm_v1_BQXfNjDaygixD2chmiUySG5vHQa0zMItRSjYGtJLw_Q","lore_tm_v1_3b-7dyB9g5k_L36G-nwRNvm0hEkEpiraoOVGjaWijKE","lore_tm_v1_REE4DrPA6GD2yUa-jAYEbtV1TrwAd7Ta6GT7GOId3lc","lore_tm_v1_WABxszLZMHecGD1phjvFpKSd9AgYJ6tUMiepJLBEHsE","lore_tm_v1_kKxcocEZG3NnZiR3lbCnOkhNe_nLdK7cxFkUUryiL1A","lore_tm_v1_DLrF7llerONusw_cbJbGRAByvtBTRzGYxNw5gK65UuU","lore_tm_v1_jIuPS0va-4GfglxoJJ0XLZSwejZo2qQppQSS9NW3MdI","lore_tm_v1_XecMNyikM_zN8KkPCguARUtHxFAhn_bfSUOWEXMhS1c","lore_tm_v1_8n1krf83BUTQ2ojZUcRDLP8tZokOPL2KVpDVS9ZDzLY","lore_tm_v1_KMLn7sEwAx__riU9MmwYmKKN6dwX1aHkUWDe3zizKQ8","lore_tm_v1_XSF5-BEpMMQQbVOAk2gv5NY1940N-6WAIezTkHY1gV0","lore_tm_v1_ikak3nfT8qayw64IzRPqH1mlpO2ABvMZS6rThrhqQMM","lore_tm_v1_EQ4Iddu0Zf8h4mxRw0_u4U1_XfgZz6josiLH-e2IeAU","lore_tm_v1_8Meo2sF2PWqGrqrwgiSTcNMvX7MExKZ1fTs1jqFlawE","lore_tm_v1_ucXBPb4Fa4FwyrF9kfs8PBMeIJg51tARQeMcQNH9s6w","lore_tm_v1_wBd2CcrO5KtZSHEmNIckaCG17dF8eQbXgcWAo_BbrdA","lore_tm_v1_XMZtxx37U_pg1E41QoRg94b26P4b2Dd4hpQvg7uqSQ4","lore_tm_v1_KfN7OLU0SlYUyXq5yDygt5z6BF44MGvkUsXMy5MhoiY","lore_tm_v1_niYuiShEx9e2FoZShdDyBB-ORikdvtrBD7zJT6iwwSw","lore_tm_v1_zrLALTiVTChu5fdvE4kYDkVhSvwBIEZg1Qbd7emk6k4","lore_tm_v1_U4t_ndIgvAPF0ii2Lb8lrZ14mxR1xtd1xGork6oaXik","lore_tm_v1_yWNj3_rnh-LDpanML1g31D5kSdvrS9IlY4iktS3z1LY","lore_tm_v1_wYTMGU4esY3cfz2iyQ6FHZT-G7lH8jrnHVxsOaE5yyM","lore_tm_v1_XIBqys1EI3SLGQOl1cDA33bD_6rD6Fw3-2C7Dyf2KmY","lore_tm_v1_ZpaD8npAr6WcMFGaZ3KWU9gb9POD9FnoqSdobs3W45A","lore_tm_v1_HFJdjFvI0UNgB_A4IzIC20hC9pVUiwENfCkXC7Tn5Tk","lore_tm_v1_igZFTzlcf_Hx_eq-BhxaQ8dc-CYwxBcbUv2jwql6WKM","lore_tm_v1_rAL-lRaWK34T2p4ze8_x0hfUiSWYu9d8NC2fgBu4PNg","lore_tm_v1_L-a6F5Bb6FQ9_ltlgb3Dh8PvD2jFf-wL6mpXFz35fEk"]
Date: Sep 15, 2026
packages/core/src/session/recovery.ts and packages/core/test/session-projector.test.ts; the runnerβs interruption assertions distinguish "Tool execution interrupted" from "Tool execution outcome unknown after interruption".179 pass, 0 fail, and 514 expect() calls across 5 files in 14.55s using Bun v1.3.14 (0d9b296a).tsgo --noEmit succeeded. Migration validation found no incremental schema changes and generated the full migration at /tmp/opencode-core-migration-check-gm7l5d/full/20260915184439_schema/migration.sql; a subsequent standalone $ tsgo --noEmit also completed with no output.packages/core/test/session-projector.test.ts; its focused test passed exactly 1 pass, 25 filtered out, 0 fail, and 4 expect() calls across 1 file in 1.89s.packages/core/test/session-runner.test.ts around recovery redrive behavior. The test "redrives only the synthetic recovery continuation" expects provider user texts exactly ["Session execution interrupted by server restart", "continue"], keeps unrelated input promoted_seq: null, and clears SessionRecoveryTable.wake_pending to false.1 pass, 96 filtered out, 0 fail, and 5 expect() calls across 1 file in 1.52s."never starts a local tool after ownership changes".179 pass, 0 fail, and 517 expect() calls across 5 files in 15.29s.2772 insertions(+) and 548 deletions(-) across 29 files. The largest changes were packages/core/test/session-projector.test.ts (874 insertions, 14 deletions), packages/core/test/session-runner.test.ts (496 insertions, 3 deletions), packages/core/src/session/recovery.ts (259 insertions, 86 deletions), packages/core/src/session/runner/llm.ts (168 insertions, 109 deletions), and packages/core/test/session-execution-local.test.ts (164 insertions, 1 deletion)./tmp/opencode-core-migration-check-nuraC7/full/20260915184926_schema/migration.sql; $ tsgo --noEmit also completed successfully.packages/core/src/session/projector.ts handles SessionEvent.Step.Recovered by requiring a durable aggregate sequence; deriving the continuation ID via continuation(event.data.executionID); validating any supplied assistantMessageID is the latest assistant in the session; projecting the recovery event; admitting a queued synthetic prompt with exact text "continue"; and inserting SessionRecoveryTable with wake_pending: true.packages/core/src/session/message-updater.ts recovery behavior: phase "continue" performs no assistant update; phase "unknown" uses "Provider Step outcome unknown after server restart"; other recoverable phases use "Session execution interrupted by server restart"; recovery without an assistant creates a synthetic message via message(event.data.executionID); recovery with an assistant marks it finished with an error, appends text ID recovery:${event.data.executionID}, and converts pending/running tools to errors with "Tool execution outcome unknown after server restart".packages/schema/src/session-event.ts defines Step.Recovered as event type "session.next.step.recovered" with executionID: Schema.String, optional assistantMessageID: SessionMessage.ID, and phase restricted to exactly "ready", "unknown", or "continue".packages/core/src/session/recovery.ts. Tests then passed exactly 179 pass, 0 fail, and 517 expect() calls across 5 files in 17.47s./tmp/opencode-core-migration-check-i7pksD/full/20260915185244_schema/migration.sql; the final standalone $ tsgo --noEmit completed successfully with no output.