- Shipped
- September 10, 2026 at 7:49 PM UTC
- Author
- Kamo
- Commit
- 02639c4
- Standing membership: every explicit EXEC2EXEC_ACCESS holder sits on every Exec2Exec conversation. Exec2ExecDeskReconciler seats and unseats from the grants on securityservice's exec2exec.desk.changed event, a 5-minute sweep, startup, and whenever a chat is opened or back-filled; the desk is re-read per conversation so a sweep cannot undo a grant another pod just applied. - GET /chat/{id}/participants lists the KamoCRM executives on a chat (memberId, userId, name, jobTitle). - Sender lines carry senderPhone (the top-level org's Phone (Main)) and senderPhoneExt (the enabled VOIP extension, else the team-member one) for KamoCRM staff. The welcome is always signed by god. - Roster rows carry awaitingDesk (the customer spoke last) for the console's sign-in sweep. - Security: /topic/chat/incoming/{memberId} and /topic/chat/unread/{memberId} may now be subscribed only by that member and never sent to by a client. Both were unguarded, so any signed-in client could follow any member's arrivals and unread by id. - The generic add/remove/leave/rename member routes refuse Exec2Exec sessions (409 MEMBERSHIP_MANAGED): the reconciler owns that membership. - Offline email: a customer's message mails the desk, an executive's reply mails only the customer, instead of every executive about everything. - Back Fill greets and seats in the transaction that opens a chat, so a customer's first reply is never marked read for the desk.