contract+hub+web: pinned chats always stay on top of the chat list
tsk-0km9ys53dynd open
Owner decision req-cch3p5aszxpy (o1, 2026-11-05): an unpinned chat with unread messages must not move above the pinned chats.
Today docs/api.md §9.3 ("Pinned") orders both lists (GET …/conversations and GET /me/conversations) in four bands: pinned with unread, unpinned with unread, quiet pinned, rest.
New order: pinned with unread, quiet pinned, unpinned with unread, rest. Each band keeps the activity order. unread and pinned decide the band as before. The cursor (§1.4) follows the new order.
PRs in this order, small and one after another:
- Contract: §9.3 text and the reason sentence ("a pin never hides a new message" goes; a new message stays visible through the unread counts and the header's Chat badge). Check web/context/views.md:1521, web/js/chat.js:57 and web/js/chats.js:5, which quote the old order.
- Hub: the band order in both listings plus the cursor; tests for all four bands and paging across a band edge.
- Web: comments and fixture hub to the new order; e2e for the list order.
Not in scope: tsk-4nf344w4c52c (pin column), which stays separate.