`SCR_GroupsManagerComponent.MovePlayerToGroup()` removes the player from their previous group before it tests whether the destination group is full. When the destination is full (or not found), the method returns `-1` — but the removal is not undone, so the player ends up in **no group at all**.
## Steps to reproduce (dedicated server)
1. Player A is in group X. Group Y is at its member cap.
2. Cause a move of player A into group Y that reaches `MovePlayerToGroup` — e.g. a private-group join request approved by Y's leader after Y filled up (`RPC_ConfirmJoinPrivateGroup` performs no fullness check before approving, see RFG-002), or any scripted call.
3. Observe player A's group id afterwards.
Player A is removed from group X, the move into Y is rejected, and `RPC_AskJoinGroup` broadcasts the returned `-1` as the player's new group id (`scripts/Game/Groups/SCR_PlayerControllerGroupComponent.c:885-895`). A live player is left with `m_iGroupID == -1`: no squad, no group UI, unreachable by group invites that assume membership.
## Expected
A rejected move is a no-op: the player stays in their previous group.