fix: sort v2 session list by updated time#27954
Merged
Merged
Conversation
5b1fc4a to
a4cf0b1
Compare
015ae8c to
78335b8
Compare
78335b8 to
2de638b
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes inconsistent ordering between the v2 session list API and the app sidebar. The backend was paginating root sessions by creation time while the sidebar sorted by update time, causing recently-updated older sessions to skip the first page and reappear after "Load more". This change switches the v2 session list query/cursor and the app's trim logic to consistently order by update time.
Changes:
- v2
session.listorders, cursor comparisons, and thestartfilter now usetime_updatedinstead oftime_created. - Encoded session cursor now stores
timeas epoch ms ofsession.time.updated. trimSessionssorts root sessions bycompareSessionRecent(updated time) before slicing.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| packages/opencode/src/v2/session.ts | Switch list query ordering, cursor boundary, and start filter to time_updated. |
| packages/opencode/src/server/routes/instance/httpapi/handlers/v2/session.ts | Encode cursor time from session.time.updated via DateTime.toEpochMillis. |
| packages/app/src/context/global-sync/session-trim.ts | Sort root sessions by recency before trimming. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR: "Load more" looked random because the backend and sidebar disagreed on what "newest" meant.
From the actual local DB investigation, the API was selecting/paginating root sessions by created time, but the app sidebar displays sessions by updated time. That means a session created days ago but touched recently can be outside the first page, then appear near the top after clicking Load more. Concrete example from the repro data: "fix: ResizeObserver crash" now ranks #7 by updated time in C:\Repos\sst\opencode, so it belongs in the initial page.
Per review feedback, this removes the proposed sort parameter and just flips v2 session list ordering to updated time. Nothing was using the v2 endpoint yet.
Summary:
Diff size:
Validation: