Side a message by which side sent it, not by who is reading

Fixkamo-internal
Shipped
August 13, 2026 at 5:55 PM UTC
Author
kamo
Commit
1460039

A support conversation has exactly two sides, and they are not "me" and "everyone else". One side is the person who asked for help — always exactly one member. The other is everyone helping them, which since tickets became multi-agent can be several people: the current assignee, whoever held it before a handover, anyone who joined from the queue. Sides were decided by sender identity, so a colleague's reply was drawn next to the customer's, and the same conversation looked different depending on which agent had it open. Alignment now follows the side a message came from, and ownership decides only whether a sender name is printed — which is why a colleague's message can sit on your side and still be attributed. The rule lives in app/lib/supportChatSides.ts and is tested there: it is pure, it is the thing that was wrong, and it should not be provable only by opening two browsers. The mirror property is asserted directly — the two sides never agree about a single message. Two window-management fixes alongside it: A window opened to FILE a support request has no props.ticketId — it is created empty and the ticket appears inside it — so the store's dedupe could not see the conversation the member had just started, and anything that later raised that ticket opened a SECOND window on it. The window now tells the store which ticket it is showing. And raising a support window now records that it happened. The live path opened one without recording anything, so a member who closed it — often before the conversation had finished loading and marking itself read — met the very same message again on the next page, which reads as the window re-opening itself for no reason. Closing one is recorded too, through a new tool:closed event fired from the single chokepoint every close already passes through: only something that arrives AFTER the close can raise it again.

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