Give the text-conversations coder a tiebreaker so tied timestamps aren't dropped

FixVOIPService
Shipped
August 26, 2026 at 7:13 AM UTC
Author
Kamo
Commit
ad24ffd

lastActivityAt, so a conversation sharing that exact timestamp was excluded from the lost from the list permanently, not just misordered. Reachable in practice since lastActivityAt falls back to a conversation's own dateCreated when it has no messages, and both message and conversation batches can share a timestamp to the microsecond. Fixes it with a standard keyset pagination tiebreaker: order by (lastActivityAt, legacy timestamp-only value (null id), which intentionally reproduces today's single-column comparison for that one page transition rather than guessing an id that was never encoded. Also: named the duplicated coalesce(max(m.dateCreated), c.dateCreated) expression once instead of leaving it as matching literal text in both SELECT and HAVING; aligned toPayload's null-guard on lastActivityAt so deriving nextcoder from it is as defensive as writing the row field already was; and clamped limit inside list() itself, not only in the controller, so a caller bypassing the controller can't drive

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