Calculating shortest rotational path given 2 CFrames

My goal is simple. Calculate the shortest rotational direction between 2 CFrames. I feel like I’m close to the answer but it seems slightly off. Below is my set up:

image

I want the blue brick to align rotationally with the grey one. I used a basic delta equation to find the difference in rotation between the final and initial rotation:

local p1 = workspace.Part1
local p2 = workspace.Part2
local cf1 = p1.CFrame - p1.CFrame.Position
local cf2 = p2.CFrame - p2.CFrame.Position
local dir = cf2 * cf1:Inverse() -- delta = final - inital
p1.CFrame = p1.CFrame * dir

And this code works. No matter how the blue brick is aligned, running this will align it perfectly with the grey one instantaneously.
The problem comes when I try to find a way to turn this dir variable into torque. This code makes the blue brick rotate initially in the correct direction but it misses the target somehow.

RunService.Stepped:Connect(function()
	local cf1 = p1.CFrame - p1.CFrame.Position
	local cf2 = p2.CFrame - p2.CFrame.Position
	local dir = cf2 * cf1:Inverse()
	local x, y, z = dir:ToOrientation()
	
	p1.Torque.Torque = Vector3.new(x, y, z) * 10
end)

This is the result:


I’m not very good with rotational math, so any help is appreciated!

This post talks about just that I do believe.