- Shipped
- September 10, 2026 at 6:27 AM UTC
- Author
- Kamo
- Commit
- f2d91da
One standing conversation between a customer executive and the KamoCRM executives, keyed on the USER rather than on a member — which is what lets it follow somebody who owns four organizations from whichever one they are signed into, while every party is still stored as a member id so each message records which organization its author wrote it from. - MediaSessionType.EXEC2EXEC(5) — appended, never inserted; the column is @Enumerated(ORDINAL). Not shaped like SUPPORT_TICKET: no status, no queue, no assignment, nothing that closes. - **************** — appended last, because getSortOrder() returns ordinal(). It gates who ANSWERS the desk, never who is entitled to one; conflating the two would hand every executive the desk. - Exec2ExecChat, a satellite on the MediaSession spine the way SystemBug is, with UNIQUE on USER_ID: "there is only ever one Exec2Exec chat" is a database fact rather than a convention, which is what settles the race between the NavTop button and the auto-open resolving the same chat on one sign-in. - ChatMessageDto gains **************** The relay copies from an allowlist, so a field it does not declare reaches no browser at all — history would read correctly while live messages showed a bare name. - **************** the greeting the platform sends first. - findChatMembershipsByMemberId names EXEC2EXEC. That query is an ALLOWLIST, and leaving the type out of it is the whole reason a social conversation could once never show an unread count anywhere.