Dashboard › opencode › Distillation
cccabcb1-866e-426f-b31a-4a5d88a46361["lore_tm_v1_Pffi14h_qDalep5YsEZVonQVnd1_wyLK79JGnp-jdSA","lore_tm_v1_x0wUo39R1ciQrJLJnRsnk5JJ50DMTWZRWnP7hyFpDAU"]
Date: Sep 16, 2026
Step safe while a sibling tool finalizer is active./tmp/opencode/session-recovery-v10-review/packages/core/test/session-runner.test.ts starts a resumed stream, prompts "Change direction" while it is active, then verifies 3 provider requests: request 2 retains tools with no toolChoice, request 3 has toolChoice: { type: "none" }, and local executions are exactly ["before", "after"]."projects provider errors as terminal assistant step failures" sends LLMEvent.stepStart({ index: 0 }) followed by LLMEvent.providerError({ message: "Provider unavailable" }); one request is made and context durably contains user text "Fail durably" plus an assistant message with finish: "error" and error: { type: "unknown", message: "Provider unavailable" }."projects provider errors emitted before assistant step start" emits only LLMEvent.providerError({ message: "Provider unavailable" }); one request is made and context contains user text "Fail before step" plus the same terminal assistant error, proving a preceding stepStart is unnecessary."does not recover context overflow after durable assistant output" emits durable text "Partial" before LLMEvent.providerError({ message: "prompt too long", classification: "context-overflow" }); it makes only 1 request and preserves an assistant message with finish: "error", error message "prompt too long", and content [{ type: "text", text: "Partial" }]."projects raw provider stream failures as terminal assistant step failures" uses responseStream = Stream.fail(providerUnavailable()); session.resume(sessionID) returns the identical failure, and after replaySessionProjection(sessionID) context contains user text "Fail raw stream durably" plus an assistant error { type: "unknown", message: "Provider unavailable" }."does not continue automatically after a provider error follows a local tool call" emits local echo tool call "call-before-provider-error" with input { text: "settled" }, then a provider error. It verifies exactly 1 request and exactly one new local execution, "settled", with no automatic continuation."durably fails a hosted tool when its provider errors before returning a result" emits provider-executed web_search call "call-hosted-provider-error" with { query: "effect" }, followed by "Provider unavailable"; context records the hosted tool state as { status: "error" }."durably fails a hosted tool left unresolved at normal provider EOF" leaves provider-executed web_search call "call-hosted-eof" unresolved. After resume and replaySessionProjection(sessionID), the assistant has finish: "error", error { type: "unknown", message: "Provider Step ended without settlement" }, and the tool state is { status: "error" }; SessionExecutionTable has no remaining execution."durably fails a hosted tool left unresolved by a raw provider stream failure" emits provider-executed web_search call "call-hosted-raw-failure" and then fails the stream with providerUnavailable(). Resume returns the identical failure; replayed context records assistant finish: "error", error { type: "unknown", message: "Provider unavailable" }, and the hosted tool state { status: "error" }."keeps interleaved assistant text blocks separate" interleaves textStart, textDelta, and textEnd events for IDs "text-1" and "text-2" with text "First" and "Second", then emits stepFinish({ index: 0, reason: "stop" }) and finish({ reason: "stop" }).