A chat can be named, starred, and have somebody removed from it

Featurekamo-shared-library
Shipped
August 30, 2026 at 1:48 AM UTC
Author
Kamo
Commit
2352064

Three fields and one method, all of which the chat feature already had the shape for and none of which it could record. MEDIA_SESSION_CHAT gains TITLE. That table exists precisely to hold what is true of a chat and of nothing else, and until now held only its own foreign key. Null is not "untitled": it is the instruction to go on deriving the name from who is in the room, which is what every chat did before and what a two-person chat must keep doing forever — so clearing a name restores the derived one and no backfill is needed for the conversations that predate this. MEDIA_SESSION_MEMBERS gains IS_FAVORITE, beside IS_MUTE. Both are one member's private opinion of one session, invisible to everybody else in it. Only a CHAT session can carry one, and not because the feature was scoped down: a SOCIAL session has no rows in that table at all (it belongs to the organization), and a SUPPORT session can be visible to an agent through the ticket's assignee without one. A star offered on those rows would be a control with nowhere to write. removeMemberFromSession is the mirror of addMembersToSession, shaped the same way on purpose: the membership row goes and a MediaObjTransit with isJoin=false stays in the transcript forever. IS_JOIN has been on that table since the beginning and the clients have always rendered "{actor} removed {target}" for it — nothing had ever written one. The chat list queries carry both new fields, and a favourites query answers every starred conversation unpaged. That is the whole reason it is a separate query rather than a filter on the paged one: the list pages by last activity, so a conversation starred precisely because it matters but quiet for a month is several pages down, and a section assembled from whatever had already been scrolled into view would show that person some days and not others. Both columns need DDL by hand — InitializerService is not deployed: ALTER TABLE media_session_members ADD COLUMN is_favorite boolean NOT NULL DEFAULT false; ALTER TABLE media_session_chat ADD COLUMN title varchar(120);

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing