According to the DevHub changing the Orientation of Part2 instead of the CFrame should solve your issue because when you change Part2’s CFrame, Part1’s CFrame also gets updated unlike when using the Position and Orientation properties.
But this was just a simplified example.
Think about a car with wheels. If I move the car, the wheels must follow the car. But if I spin a wheel (child), it will not rotate the car (Parent)… However, the rotation of the wheel must rotate their children, such as tires, screws, hubcaps, etc.
I can’t do a calculation of absolute displacement and rotation on a fixed screw, which is attached to a rotating wheel, which is attached to an axle, which is attached to a car that moves and turns, you know?
Incredibly, no one was able to answer.
But I found an alternative solution: temporarily setting Part2.WeldConstraint.Part0 to nil, which will force Part2 to disconnect from its parent.
Then, the CFrame rotation of Part2 will work, rotating only its children.
Finally, reconnect Part2.WeldConstraint.Part0 to Part1.