Bugs with ledge-climbing system (Positioning)

Currently, I have a bug occurring in my ledge-climbing system which makes it so when I attempt to climb on disproportional parts, my character’s position is set to the middle of the part and is far away from the ray?

Bugged GIF: https://gyazo.com/f575359d1f45e82564b18db623c91c64

Intended GIF: https://gyazo.com/4455a9db020bc00c0d6c09949bdec060

Code:

if Head.Position.Y >= WallInstance.Size.Y - 3 and Head.Position.Y <= WallInstance.Size.Y and WallInstance.Size.Y > 8 then

			local Visulizer = Instance.new("Part")
			Visulizer.BrickColor = BrickColor.Blue()
			Visulizer.Anchored = true
			Visulizer.CanCollide = false
			Visulizer.Parent = workspace.GarbadgeCollector
			Visulizer.Size = Vector3.new(.5,.5,.5)
			Visulizer.Material = Enum.Material.Neon
			
			local X = math.clamp(WallInstance.CFrame:ToObjectSpace(HumanoidRootPart.CFrame).Position.X, -WallInstance.Size.X / 2, WallInstance.Size.X / 2)
			local Z = math.clamp(WallInstance.CFrame:ToObjectSpace(HumanoidRootPart.CFrame).Position.Z, -WallInstance.Size.Z / 2, WallInstance.Size.Z / 2)
	
			local pos1 = nil;
			local CFramePos = nil;
			
			print(result.Normal)
			
			if result.Normal == Vector3.new(0,0,1) or result.Normal == Vector3.new(0,0,-1) then
				Visulizer.Position = WallInstance.Position + result.Normal * WallInstance.Size.Z / 2 + WallInstance.CFrame.UpVector * WallInstance.Size.Y / 2 + WallInstance.CFrame.RightVector * X
			end
			
			if result.Normal == Vector3.new(1,0,0) or result.Normal == Vector3.new(-1,0,0) then
				Visulizer.Position = WallInstance.Position + result.Normal * WallInstance.Size.X / 2 + WallInstance.CFrame.UpVector * WallInstance.Size.Y / 2 + WallInstance.CFrame.LookVector * -Z
			end
			
			local distance = (HumanoidRootPart.Position - Visulizer.Position).Magnitude

			local Part = Instance.new("Part")
			Part.Anchored = true
			Part.Transparency = 0.5
			Part.Parent = workspace.GarbadgeCollector
			Part.CanCollide = false
			Part.Size = Vector3.new(0.1, 0.1, distance)
			Part.CFrame = CFrame.lookAt(HumanoidRootPart.Position, Visulizer.Position)*CFrame.new(0, 0, -distance/2)
			Part.BrickColor = BrickColor.Red()

			if result.Normal == Vector3.new(1,0,0) then
				CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(45),0)
			end

			if result.Normal == Vector3.new(0,0,-1) then
				CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(180),0)
			end
			
			if result.Normal == Vector3.new(-1,0,0) then
				CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(-90),0)
			end
			
			if result.Normal == Vector3.new(0,0,1) then
				CFramePos = CFrame.new(Visulizer.Position+Vector3.new(0,-2,0.4)) * CFrame.Angles(0,math.rad(0),0)
			end
			
			Humanoid.AutoRotate = false
			HumanoidRootPart.Anchored = true
			HumanoidRootPart.CFrame = CFramePos
			
		end