Why it changes the position

So I just want a code to join two parts like this:

But the code its always changing its position and rotation, making it to look like this:

And the code is this one:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local modelsStage1 = ReplicatedStorage:WaitForChild("Stage1")

--First Stage

task.wait(2)

local function chooseModelStage1()
	local models = modelsStage1:GetChildren()
	if #models == 0 then
		warn("Error1")
		return nil
	end
	
	local randomIndex = math.random(1, #models)
	return models[randomIndex]
end

local stage1 = chooseModelStage1()
if stage1 then
	local clone = stage1:Clone()
	local startPos = game.Workspace.StartingSpot.EndHelper:GetPivot()
	clone.Parent = game.Workspace
	clone:SetPrimaryPartCFrame(startPos)
end

idk, but how do you expect the script to know where to put it and what orientation to use?

seems to me you’re going to need some math to offset and rotate the model you are trying to ‘attach’

I don’t want to change the orientation or rotation of the models, they already have their orientations setted, I just want to move them by moving their primary part to the position of another part.

I think the easiest way for you to do this would be to duplicate an invisible primary part that is in the exact same position in both models, then it will position them the same as the ‘before’ picture.

the two models you have shown have two different center positions, i don’t know how you expec them to line up as shown without some position offsets.