Tween doing weird spin instead of expected move

I have a bit of code here that is supposed to un-anchor a “pet” welded behind the player move up in front of the player, then re-enable the weld. Instead of doing the move as I would expect, the pet instead spins for a second, then re-welds. It is very odd.

targetStand.WeldConstraint.Enabled = false
local goalCFrame = 
targetPlayer.Character.HumanoidRootPart.CFrame:ToWorldSpace(CFrame.new(0,0,-4))
local tween = tweenService:Create(targetStand.HumanoidRootPart, TweenInfo.new(1), {Position = goalCFrame.p})
tween:Play()
--targetStand.HumanoidRootPart.CFrame = targetPlayer.Character.HumanoidRootPart.CFrame:ToWorldSpace(CFrame.new(0,0,-4))
targetStand.WeldConstraint.Enabled = true  

There is a line of code above that iscommented out, that is the original cframe move I was using and this works perfectly, like so:

targetStand.WeldConstraint.Enabled = false
targetStand.HumanoidRootPart.CFrame = targetPlayer.Character.HumanoidRootPart.CFrame:ToWorldSpace(CFrame.new(0,0,-4))
targetStand.WeldConstraint.Enabled = true  

Since as far as I can see, int he Tween above in the first code block, I am only tweening Position, why would it be spinning instead of moving?

Any ideas?

Can we get a video by any chance? Are you making sure to anchor the object before Tweening it?

its not anchored, no, its a humanoid. Shoud i anchor it?

Definitely. By anchoring the HumanoidRootPart before Tweening it, and them un-anchoring it afterwards, you can prevent at lot of weirdness since physics won’t be acting on the object you are moving.

Why not just create CFrame values? One for the front, one for the back. I do this for my fps viewmodels

I dont follow, I am creating CFrame value, then converting them to Vector3 because that what TweenService uses.

Unless I dont understand what you saying?

look at th second block of code, this code work perfectly, but the pet just teleports into position. I want to tween it there, hence my issue in the first block of code.

CFrame.p is deprecated, use CFrame.Position for new work, also try doing:
{CFrame = goalCFrame}

Anchoring is not the issue, the parts are a character model with the humanoid removed and all parts are set to massless and cancollide off.

here is a video

at that point in the code, I dont need a Cframe at all because TweenService does not use CFrames

You can use CFrames, though. I’ve even used it for FPS so I honestly don’t know what you’re talking about