Summary
In multi-backend Agent Canvas setups, conversation IDs are scoped to the backend that owns them. Sidebar conversation links currently point to /conversations/:id without encoding the backend selection.
When a user cmd-clicks, ctrl-clicks, or opens one of these links in a new tab, the new tab initializes active backend selection from session/local/default state instead of the backend that produced the sidebar list. If that selected backend differs, the conversation fetch targets the wrong backend and reports that the conversation was not found.
Expected behavior
Opening a conversation from the sidebar in a new tab should select or otherwise use the backend/org scope that owns that conversation before the first conversation fetch runs.
Observed likely root cause
ConversationPanel and CompactConversationRow generate bare /conversations/:id links. NavigationLink intentionally lets modified clicks use the browser href, so no in-memory backend state is carried into the new tab.
Suggested fix
Encode the active backend/org selection in conversation URLs and have active backend initialization prefer valid URL query parameters over stored fallback state.
Suggested tests
- Conversation row hrefs include backend/org scope.
- URL backend scope initializes active backend before conversation fetches.
- Modified-click behavior keeps using the encoded href for browser new-tab navigation.
Summary
In multi-backend Agent Canvas setups, conversation IDs are scoped to the backend that owns them. Sidebar conversation links currently point to
/conversations/:idwithout encoding the backend selection.When a user cmd-clicks, ctrl-clicks, or opens one of these links in a new tab, the new tab initializes active backend selection from session/local/default state instead of the backend that produced the sidebar list. If that selected backend differs, the conversation fetch targets the wrong backend and reports that the conversation was not found.
Expected behavior
Opening a conversation from the sidebar in a new tab should select or otherwise use the backend/org scope that owns that conversation before the first conversation fetch runs.
Observed likely root cause
ConversationPanelandCompactConversationRowgenerate bare/conversations/:idlinks.NavigationLinkintentionally lets modified clicks use the browser href, so no in-memory backend state is carried into the new tab.Suggested fix
Encode the active backend/org selection in conversation URLs and have active backend initialization prefer valid URL query parameters over stored fallback state.
Suggested tests