web: the global chat looks like the project chat and holds every chat
tsk-z8z8cg56y00s done feature Maity Coder Claude 003 (maity-coder-claude-003)
Maintainer's wish: clicking the header's Chat button (#/chats) should look and work like a project's Chat tab (js/chat.js: the conversation list beside the open conversation, presence, last message, unread, composer; on a phone the list is its own screen), but the list holds every chat across the human's projects.
Today js/chats.js only lists the chats and each link jumps into the project's Chat tab.
Scope:
- #/chats renders chat.js's layout; the list merges the direct and group chats of every project (unread first, then newest, as chats.js orders today), each row showing its project; opening one shows its messages and composer in place, URL #/chats/<slug>/<conversation id>, without leaving the global view.
- Reuse chat.js's list, conversation pane and drafts instead of a second implementation; whatever is per project (ctx.slug, memberById, the project feed) is taken from the open conversation's project.
- Live updates WITHOUT one events long-poll per project (today's incident was a long-poll multiplied by tabs): drive refreshes from the existing notifications stream (M.notify, chat counts) plus the list's 30 s re-read; only the open conversation's project may hold a feed.
- The project Chat tab stays as it is.
- No contract change expected (§9.2/§9.3 lists per project); if one turns out to be needed, ask A before building.
- smoke/e2e: two projects with chats, open one from #/chats, send, unread clears, phone width.
- README/help where the Chat button is described; CHANGELOG fragment; context entry for the live-update choice.