fix(ws): don't drop a tree node when destination parent isn't loaded (RT-28) #65

Closed
opened 2026-06-21 01:56:55 +03:00 by Ghost · 0 comments

Источник: red-team-аудит, RT-28 (docs/red-team-report.md).

Что происходит

Клиент при moveTreeNode (apps/client/src/features/websocket/use-tree-socket.ts:98-104) удаляет ноду, если целевой родитель ещё не загружен в дерево → страница исчезает из сайдбара до ручного resync.

Фикс

Не удалять ноду; отцепить от старого родителя и пометить новый «подгрузить лениво»:

// use-tree-socket.ts (moveTreeNode) — destination parent not loaded: do NOT delete
// the node (that makes the page vanish). Detach from old parent, mark new parent
// stale so a lazy fetch pulls it in on expand.
if (placed === prev) {
  let next = oldParentId ? treeModel.remove(prev, event.payload.id) : prev;
  if (newParentId) next = treeModel.update(next, newParentId, { hasChildren: true, childrenLoaded: false });
  return next;
}

Цена / приоритет

Небольшая клиентская правка; чинит видимый баг «исчезновения» страницы.

**Источник:** red-team-аудит, RT-28 (`docs/red-team-report.md`). ### Что происходит Клиент при `moveTreeNode` (`apps/client/src/features/websocket/use-tree-socket.ts:98-104`) удаляет ноду, если целевой родитель ещё не загружен в дерево → **страница исчезает** из сайдбара до ручного resync. ### Фикс Не удалять ноду; отцепить от старого родителя и пометить новый «подгрузить лениво»: ```ts // use-tree-socket.ts (moveTreeNode) — destination parent not loaded: do NOT delete // the node (that makes the page vanish). Detach from old parent, mark new parent // stale so a lazy fetch pulls it in on expand. if (placed === prev) { let next = oldParentId ? treeModel.remove(prev, event.payload.id) : prev; if (newParentId) next = treeModel.update(next, newParentId, { hasChildren: true, childrenLoaded: false }); return next; } ``` ### Цена / приоритет Небольшая клиентская правка; чинит видимый баг «исчезновения» страницы.
Ghost added the bug label 2026-06-21 02:27:20 +03:00
Ghost closed this issue 2026-06-21 03:02:07 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#65