a0f9ab10f2
When someone is added to a 1:1 (DM) call, promoteDmToGroup() now creates a real group conversation (named after the participants) and migrates the live call from dmCalls -> groupCalls, keeping the same room/uuid/history so media and the transcript continue uninterrupted. Two wins: - the call survives anyone leaving (group calls only end when the room empties) - an added person who drops can rejoin from the group's active-call banner (they're now a member, so replayActiveCalls / group-call resurface it) /api/calls/invite promotes on a DM call and lets the group-call broadcast ring the invitees in; it only sends the plain call-invite when NOT promoted. Guarded so inviting an existing pair-member (memberIds < 3) stays a 1:1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>