- Shipped
- August 27, 2026 at 8:32 PM UTC
- Author
- Kamo
- Commit
- eb5e727
ChatSessionSubscriptionManager publishes to a topic named after the session it subscribed FOR, never after the session the frame came from. That is safe only while the NATS consumer is filtered to chat.session.<guid>, and it was not — the durable was created with no filter and took the whole stream, so every message, read receipt and member-added event in the platform was forwarded into every open conversation. A read receipt arriving in an unrelated window is a chat window that pops itself open with nothing new in it; a message arriving there is someone else's conversation on a member's screen. The filter (kamo-shared-library, NatsMessageService) is the fix. This is the guard that makes it unrepeatable, including on a consumer that predates the filter and has not been reconciled yet. A frame with no session guid still passes: absent is not 'belongs elsewhere', and the subject filter already vouches for it.