You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
session.error events are ignored by global sync (stuck busy, no error shown) #48530
A failed session turn is not reflected in the UI's session state and produces no visible error.
When the server emits a session.error event, the global sync reducer ignores it. The session stays in its last non-idle status (busy) and the failed assistant message keeps no error marker, so the user is not told that the turn failed.
Plugins
n/a
OpenCode version
latest dev
Steps to reproduce
Trigger a session that fails with an error event.
The session status stays busy and no error toast appears; the last assistant message does not get an error marker.
Not a duplicate of #42259 or #32366; both are related but describe different layers.
#42259 is a server-side event-ordering problem: \session.error\ is published after \session.status idle, so UI consumers that stop processing on idle never render the error. Its fix (PR #42253) reorders the SSE stream and does not touch the client-side global sync reducer.
#32366 is a desktop 'stuck on thinking' case after a dropped stream (no state recovery, no retry), a different symptom and environment.
This issue (#48530) is the client-side counterpart: when a \session.error\ event reaches the store, the global sync reducer (\�pplyDirectoryEvent) ignores it — the session status stays busy, the last assistant message gets no error marker, and no toast is shown. The fix is purely in \�vent-reducer.ts\ / \server-sync.tsx; even with correct server ordering the reducer must first handle the event. The companion PR #48534 touches no file that #42253 touches.
Thanks for reporting this! Session failures now return the session to idle and display the failure in the desktop conversation, with the error-display fix first released in 2.0.27. Update with opencode upgrade or npm i -g @opencode/cli@latest (desktop: update the app). Please reopen or comment if a failed session still stays busy or hides its error on that version.
Activity
github-actions commentedon Sep 11, 2026
This issue might be a duplicate of existing issues. Please check:
session.errorevents not being properly surfaced to the UI, leaving the session appearing to succeed or staying in an incorrect state.CannonRS commentedon Sep 11, 2026
Not a duplicate of #42259 or #32366; both are related but describe different layers.
#42259 is a server-side event-ordering problem: \session.error\ is published after \session.status idle, so UI consumers that stop processing on idle never render the error. Its fix (PR #42253) reorders the SSE stream and does not touch the client-side global sync reducer.
#32366 is a desktop 'stuck on thinking' case after a dropped stream (no state recovery, no retry), a different symptom and environment.
This issue (#48530) is the client-side counterpart: when a \session.error\ event reaches the store, the global sync reducer (\�pplyDirectoryEvent) ignores it — the session status stays busy, the last assistant message gets no error marker, and no toast is shown. The fix is purely in \�vent-reducer.ts\ / \server-sync.tsx; even with correct server ordering the reducer must first handle the event. The companion PR #48534 touches no file that #42253 touches.
neriousy commentedon Oct 20, 2026
Thanks for reporting this! Session failures now return the session to idle and display the failure in the desktop conversation, with the error-display fix first released in 2.0.27. Update with
opencode upgradeornpm i -g @opencode/cli@latest(desktop: update the app). Please reopen or comment if a failed session still stays busy or hides its error on that version.