Welds not attaching properly + rendering not updating

Code that is used to weld parts in-place to a primary part is re-orienting parts. I have tried in multiple place files. (edit: It was because I was parenting the weld before setting the C0, causing the part to have its offset reset before calculations could be made – the other two issues are still problems though) See repro file and code at the bottom of the OP:

The selection box updates fine, but rendering fails to update the part to the correct position. Copying+pasting will show the part in the updated position in both the copy and original. Copying/pasting before welding does not cause any changes.

The Part0 of the welds is getting rotated instead of Part1 because of the dumb joint behavior that thinks it’s a good idea to swap the idea of Part0/Part1 around at random. Can we finally fix this so Part0 is always Part0, the root of the joint, regardless of size or any other factors?

Code (run in command bar):

-- This should not move parts relative to the primary, but it does!
model = workspace.Model
for i,v in next,model:GetChildren() do 
    if v ~= model.PrimaryPart then 
        local w = Instance.new("Weld", model.PrimaryPart) 
        w.Part0 = model.PrimaryPart 
        w.Part1 = v
        w.C0 = model.PrimaryPart.CFrame:toObjectSpace(v.CFrame) 

Repro.rbxl (38.7 KB)