Because the dummy is close to you, the engine gave you, the client, network ownership of the dummy, so physics is calculated on your client is sent over to the server. I would assume that the server didn’t see the change because you, the client, still have network ownership of the dummy and its position was updated on the server. You should probably try giving the server network ownership of the dummy before teleporting and see the results:
You didn’t mention that the HumanoidRootPart was anchored (why is it even anchored)? If you can’t call SetNetworkOwner on a model, you can loop through it’s descendants, check to see if it’s a BasePart, then call the function
Try using ws:MoveTo() or ws:SetPrimaryPartCFrame() instead of ws.HumanoidRootPart.Position.
I think, since you’re just moving the primary part, a built-in localscript is automatically moving the rest of the model to the root. You can test this via the ‘Clients and Servers’ section of the Test tab in Studio.