Added
- Added a desktop inbox conversation tab strip above the chat pane.
- Selecting a conversation creates or updates a tab with the contact display name; group conversations use the group display name and participant metadata.
- Tabs use Chrome-like flex sizing so they stay readable with a few conversations and shrink to fit as more conversations are opened.
Reliability and accessibility
- Remembered tabs are capped to the latest eight conversations to avoid unbounded UI growth.
- Clicking a remembered tab triggers a targeted conversation refresh, so older tabs can recover even when the sidebar's current page or filters no longer include that thread.
- Active tabs expose
aria-current, close buttons have localized labels, and the tab strip labels are localized across supported app locales.
Verification
pnpm --filter app exec vitest run components/inbox/conversation-tabs.test.tsx components/inbox-workspace-selection.test.ts --no-file-parallelism --maxWorkers=1pnpm --filter app typecheckpnpm lintpnpm audit:i18npnpm release:hygiene