1. UI shows old data
2. Action updates DB
3. WebSocket streams new response
4. refetchMessages() fetches new data
5. UI updates (flash during step 1-4)
1. UI updates IMMEDIATELY (optimistic)
2. Action updates DB
3. WebSocket streams response
4. refetchMessages() syncs silently
useAction with optimisticUpdates, or manage local state manually?