From d79355e901f265d1aa785933fd4511026a4cd9ef Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Fri, 16 Jan 2026 20:09:38 -0800 Subject: [PATCH 1/2] improvement(avatar): use selection-update as the source of truth for presence, ignore other socket ops --- .../workspace/providers/socket-provider.tsx | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/apps/sim/app/workspace/providers/socket-provider.tsx b/apps/sim/app/workspace/providers/socket-provider.tsx index f173864273..1ae26cf281 100644 --- a/apps/sim/app/workspace/providers/socket-provider.tsx +++ b/apps/sim/app/workspace/providers/socket-provider.tsx @@ -406,21 +406,12 @@ export function SocketProvider({ children, user }: SocketProviderProps) { socketInstance.on('cursor-update', (data) => { setPresenceUsers((prev) => { const existingIndex = prev.findIndex((user) => user.socketId === data.socketId) - if (existingIndex !== -1) { - return prev.map((user) => - user.socketId === data.socketId ? { ...user, cursor: data.cursor } : user - ) + if (existingIndex === -1) { + return prev } - return [ - ...prev, - { - socketId: data.socketId, - userId: data.userId, - userName: data.userName, - avatarUrl: data.avatarUrl, - cursor: data.cursor, - }, - ] + return prev.map((user) => + user.socketId === data.socketId ? { ...user, cursor: data.cursor } : user + ) }) eventHandlers.current.cursorUpdate?.(data) }) @@ -428,21 +419,12 @@ export function SocketProvider({ children, user }: SocketProviderProps) { socketInstance.on('selection-update', (data) => { setPresenceUsers((prev) => { const existingIndex = prev.findIndex((user) => user.socketId === data.socketId) - if (existingIndex !== -1) { - return prev.map((user) => - user.socketId === data.socketId ? { ...user, selection: data.selection } : user - ) + if (existingIndex === -1) { + return prev } - return [ - ...prev, - { - socketId: data.socketId, - userId: data.userId, - userName: data.userName, - avatarUrl: data.avatarUrl, - selection: data.selection, - }, - ] + return prev.map((user) => + user.socketId === data.socketId ? { ...user, selection: data.selection } : user + ) }) eventHandlers.current.selectionUpdate?.(data) }) From 9ce60aab31881008b659dafd47e1147cb8b19b0d Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Fri, 16 Jan 2026 20:16:49 -0800 Subject: [PATCH 2/2] added logs --- apps/sim/app/workspace/providers/socket-provider.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/sim/app/workspace/providers/socket-provider.tsx b/apps/sim/app/workspace/providers/socket-provider.tsx index 1ae26cf281..434af6891b 100644 --- a/apps/sim/app/workspace/providers/socket-provider.tsx +++ b/apps/sim/app/workspace/providers/socket-provider.tsx @@ -407,6 +407,7 @@ export function SocketProvider({ children, user }: SocketProviderProps) { setPresenceUsers((prev) => { const existingIndex = prev.findIndex((user) => user.socketId === data.socketId) if (existingIndex === -1) { + logger.debug('Received cursor-update for unknown user', { socketId: data.socketId }) return prev } return prev.map((user) => @@ -420,6 +421,9 @@ export function SocketProvider({ children, user }: SocketProviderProps) { setPresenceUsers((prev) => { const existingIndex = prev.findIndex((user) => user.socketId === data.socketId) if (existingIndex === -1) { + logger.debug('Received selection-update for unknown user', { + socketId: data.socketId, + }) return prev } return prev.map((user) =>