- Shipped
- September 18, 2026 at 5:12 AM UTC
- Author
- Kamo
- Commit
- d2e49c5
Where a face already opened the member card and the name beside it did not, and on the lines that name people. Every id is the string the data already carries, checked at the server: MediaService's history rows and live frames, ChatListRowDto, ReceiptDto, SupportAgentMetricsDTO, SystemBugDTO, HoldemTableView.SeatView, ChessGameView and SecurityService's feed author all send ids as text. - Chat transcript: the author's name above each run of messages (msg.memberId), in two-person chats too, which wear no face. The system lines "X added / removed Y", "X left" (memberId, transitMemberId) and the opening "created with" line (roster memberId) are cut around their slots (new app/lib/sentenceSlots.ts, the LeadsHistory split, tested) so each name opens its own card; the opening line's faces are MemberAvatar in the group's MUI slots, hover only. - Seen indicator: in a conversation of three or more, the people who have seen the last message are faces beside the label (five, then +N), each opening its card. They existed only inside the label's tooltip, which is drawn over the card; the tooltip keeps names and times. No faces between two people, the bubbles' rule. - Chats list row: an unnamed chat's title is each member's name (a group's too, not only a one-to-one), hover only; the preview's author (lastMessage.memberId) on CHAT rows when they are one of the row's members. A social contact's words are stored under the owner, so no other kind. - Ticket and social windows: the sender name above a bubble, on the terms the face already uses (TicketChat's own side only; SocialChat never the contact). - Interaction Center row: the More tooltip sat on the card's own trigger, over the card. Removed; "More" stays as the button's screen-reader name. The hand-drawn avatar is MemberAvatar (38px, ring and inactive greying kept). - Softphone CRM recent activity author (post.author.id); support analytics agent (agentId). - Hold'em compact rail: the player's name (seat.memberId), hover only inside the puck's button; its name-only tooltip removed, the card gives the full name. - Chess: the opponent's disc and name (opponentMemberId) at all three seat sizes, never the reader's seat or the computer's. The disc keeps its side colour, so it stays the seat's own drawing. - System Bugs card and drawer: the reporter's name (reporterId), only when reporterOrgId is the reader's own organization (reporterCardId, tested): the board is every organization's. Left plain: pickers (add-members dialog, mailbox switcher, move-to-folder, the composer's From list, the Hold'em invite panel, the games menu's confirmations); people who are not members (address-book contacts, SMS numbers, call-history parties; mail correspondents keep their own card); other organizations (Exec2Exec, a ticket's far side and requestor, the agent-availability notice); the viewer's own face (NavTop's profile link, the post composer); dead code (clubhouse ChatArea and OpenChatTabs have no importers); places a card cannot live: HexHeadPopover (itself the member's actions, drawn over the card), reaction chips (names inside a toggle's tooltip), the tool window title bar (the drag handle), the typing line and the Hold'em result banner (both unmount under the card within seconds); the chess status sentences (the seat beside them has the card). No id in the data: reply quotes (parentSenderName only), support system events (actorName only), notifications (MemberNotification has no actor), Hold'em hand history (ActionView has no memberId), System Bugs thread rows (a memberId but no organization, on a global board), post mentions.