Describe the bug
Session switching has three compounding responsiveness issues:
- deferRender mechanism blanks the review panel and composer for one animation frame on every session switch, and a 140ms
setTimeout in session-composer-region stacks on top, causing a ~170ms gap where the composer is invisible.
- sessionSync createResource JSX read —
{sessionSync() ?? ""} is read in JSX, triggering the app-level <Suspense> boundary (splash screen) on every session switch while the sync Promise is pending. The resource returns void and contributes nothing to the DOM.
- messagesReady gate blocks rendering until messages have loaded from the API, even though the session exists in the session list and could be shown immediately with a loading spinner.
Steps to reproduce
- Open the web UI
- Switch between sessions rapidly
- Observe blank flashes, splash screen flickers, and delayed composer appearance
Expected behavior
Session switching should be instant — show the session frame immediately with cached data and load messages in the background with a spinner.
System info
- OpenCode version: v1.15.3
- OS: Linux
Describe the bug
Session switching has three compounding responsiveness issues:
setTimeoutinsession-composer-regionstacks on top, causing a ~170ms gap where the composer is invisible.{sessionSync() ?? ""}is read in JSX, triggering the app-level<Suspense>boundary (splash screen) on every session switch while the sync Promise is pending. The resource returns void and contributes nothing to the DOM.Steps to reproduce
Expected behavior
Session switching should be instant — show the session frame immediately with cached data and load messages in the background with a spinner.
System info