GeezerVison is showing github.com — feat(site): keep project chat list caches in sync by jaaydenh · Pull Request #30292 · coder/coder
Conversation
jaaydenh
commented
Oct 2, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
Adds a project chat list query family (projectChatsKey) next to the sidebar's chat lists, so the project page's chat list stays current.
updateInfiniteChatsCache, invalidateChatListQueries, cancelChatListRefetches, cancelChatListQueries, and the archive-state patching cover both families. Project lists only hold unarchived chats, so archived chats are dropped.
archiveChat snapshots project lists and restores them when archiving fails.
- A new project chat invalidates its project list instead of being prepended. Prepending would shift the offset pages and repeat a row on the next page.
findChatInListCaches looks a chat up across both families. AgentsPageLayout uses it for the chime's previous status and the archive-and-delete created_at.
The family is kept outside chatListFamilyKey because the sidebar helpers assume sidebar-shaped keys. The query factory that fills these caches lands with its consumer in the chats list PR.
Stack (merge top to bottom). #30377 through #29583 are f0ssel's split of the original #29583, and this stack sits on #29583:
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Summarizes the newest successful consolidation run in one line under
the memory list.
# Conflicts:
# docs/reference/api/schemas.md
# Conflicts:
# coderd/database/db2sdk/db2sdk.go
# coderd/database/dbauthz/dbauthz.go
# coderd/database/dbmetrics/querymetrics.go
# coderd/database/dbmock/dbmock.go
# coderd/database/modelmethods.go
# coderd/database/querier.go
# coderd/database/querier_test.go
# coderd/database/queries.sql.go
…ories
# Conflicts:
# coderd/database/dbauthz/dbauthz.go
# coderd/database/dbmetrics/querymetrics.go
# coderd/database/querier.go
# coderd/database/querier_test.go
# coderd/database/queries.sql.go
# coderd/x/chatd/memory_extract_internal_test.go
# coderd/x/chatd/projectmemory_extract.go
…olidation
# Conflicts:
# coderd/database/dbauthz/dbauthz.go
# coderd/database/dbmetrics/querymetrics.go
# coderd/database/querier.go
# coderd/x/chatd/memory_extract.go
…emories
Memory permissions now derive from the project owner and ACL, memory tools
and the extractor use scope-neutral names, and the extraction cursor table
is chat_memory_cursors.
…onsolidation
Drops personal memory: consolidation now runs only for project memory and
its journal follows the project ACL.
…' into f0ssel/chat-projects-ui-folders
The chat sharing popover now takes a chat or project target, and the
project page shows a Share control to users who may share it.
Sharing (#29597) is parked; memory permissions follow the project owner
only and the memory migration returns to 000599.
…to f0ssel/chat-memory-consolidation
…ers-resync
# Conflicts:
# site/src/pages/AgentsPage/components/ChatsSidebar/chats/ChatsPanel.tsx
…ct folder review feedback
- Show an empty state when every visible chat is filed in a project.
- Reuse the chat list empty-state copy for empty folders.
- Make the projects loading and error props required.
- Rename ProjectDialogMode to ProjectDialogState.
- Add mock prefixes to new test fixtures.
- Add stories for loading, error, and empty emoji-icon folder states.
…lar empty state when every chat is in a project
Project chats live only in their folders, so the Chats section uses its
usual empty-state copy when nothing outside a project remains.
…folders open when navigating between projects
A folder that was open because its project was active now stays open
when the user opens a chat in another project. Only an explicit toggle
collapses a folder.
…roject's page after creating it
…t folders with the chat list
The Projects section no longer has its own bounded scroll area. It sits
in the sidebar's scroll area above the Chats section, so expanding a
folder pushes the chats down.
…coder/coder into f0ssel/chat-projects-ui-folders
# Conflicts:
# site/src/pages/AgentsPage/components/ChatsSidebar/chats/ChatsPanel.tsx
…ct's page after deleting it
…ew feedback on project deletion and stories
…s empty state while projects load
When every chat belongs to a project, those chats are held back until
the project list loads. The Chats section showed "No agents yet" in the
meantime, which falsely told users their chats did not exist.
… into chat-project-page/composer-frame
…' into chat-project-page/list-queries
# Conflicts:
# site/src/pages/AgentsPage/exp/chatBoard/refreshChatList.test.tsx
jaaydenh
added a commit
that referenced
this pull request
Oct 6, 2026
`AgentCreateForm` no longer takes the `header`/`footer` slots added in
#30378, and no longer owns the page wrapper. The centered `max-w-3xl`
wrapper moves into `AgentCreateFormFrame`, which the new-chat page, the
project page, and the board draft wrap around the form. The project page
renders its existing `ProjectComposerHeader` and `ProjectComposerFooter`
(#30379) around the form inside the frame, so nothing changes visually.
The form keeps its `project` prop, per-project drafts, and remount per
project from #30378.
`ChatDiffStats` (from `ChatTreeNode`) and `ProjectActionsMenuItems`
(from `ProjectFolders`) are moved into their own files unchanged so the
redesigned project page can reuse them.
Most of the `AgentCreateForm.tsx` diff is re-indentation; review with
whitespace hidden.
---
Stack (merge top to bottom). #30377 through #29583 are f0ssel's split of
the original #29583, and this stack sits on #29583:
- #30377 data layer and project dialog (f0ssel)
- #30378 new-chat form locked to a project (f0ssel)
- #30379 project page route (f0ssel)
- #29583 sidebar folders (f0ssel), the base of this stack
- #30291 composer frame 👈
- #30292 project chat list caches
- #30293 project page header
- #30294 project chats list
- #30367 instructions storage and prompt injection
- #30368 instructions API
- #30369 instructions editor dialog
- #30370 instructions Details panel
---------
Co-authored-by: Garrett Delfosse <[email protected]>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
Uh oh!
There was an error while loading. Please reload this page.
Reviewers
jakehwll
jakehwll approved these changes
Uh oh!
There was an error while loading. Please reload this page.
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
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.
|