- Shipped
- August 10, 2026 at 6:22 PM UTC
- Author
- Kamo
- Commit
- 3b734ec
Routing chat requests through round-robin was the wrong model and it broke the thing it was meant to fix. An assigned ticket leaves the claimable queue (SupportQueueService requires assignedAgent IS NULL), so allocating a chat stopped the accept-popup offering it to anybody — the observed result was every chat pinned to a member with a blank alias who was not there, and no popup for anyone. The availability filter added to guard against that does not work either, because availability_status is not presence: logout writes AWAY and nothing else ever clears it, so a member who simply never signs out reads AVAILABLE indefinitely. This org has a dozen such rows, and round-robin walked straight into one. assignTicket now decoders any PRE_TICKET regardless of the topic's strategy. A live chat goes to the queue and the popup pages every Available agent, which is the one path that requires a live browser at the other end; assignment happens when someone accepts. Submitted tickets on the same topic are still allocated by round-robin, and convertPreTicket still routes a chat through allocation once it becomes a real titled ticket. Kept from the previous two commits: the YugabyteDB read-restart and self-lock fixes, and routing running in its own post-commit transaction.