Help with algorithm

Heya! I have been working on an A* algorithm for the past 2 or more days and here is what I have achieved:


As you can see, it is able to handle ladders and stairs with ease and is undoubtedly BETTER than roblox’s stupid pathfinding. Though, it is quite laggy. But that’s not my question. My question is that how can I make it not do this:

As you can see, a simple 3 stud cut can put an end to it’s reign and make it crash my brand new computer with it.

Question?

How can I make it traverse simple cuts in parts and do simple parkour?

As this is an idea related question so it does not require any code to be given. But just in case here it is:

local function CreateNodes(startNode)
	for _,direction in pairs(Directions) do
		local endPos = startNode.Position + direction * spacing
		local ray = Blockcast(startNode.Position,direction)
		local ray2 = Raycast(startNode.Position+Vector3.yAxis*5,direction)
		local topRay = Raycast(endPos+Vector3.yAxis*7,-Vector3.yAxis*100)
		local upRay = Raycast(topRay.Position,Vector3.yAxis*3)
		local condition = false
		local condition2 = false
		local trussTop = Vector3.zero
		local isTruss = false
		
		if ray and not ray2 then
			condition = true
		elseif not ray then
			condition = true
		elseif ray and ray2 and ray.Instance:FindFirstChild("Climbable") then
			local height = (ray.Instance.Position - ray.Position).Y + ray.Instance.Size.Y/2
			isTruss = true
			trussTop = ray.Position+Vector3.yAxis*height
		end
		if topRay.Instance:IsDescendantOf(workspace.Nodes) then condition = false end
		
		if condition and not upRay then
			Visualize(startNode.Position,endPos)
		elseif not condition and ray and ray.Instance:IsDescendantOf(workspace.Nodes) and not upRay then
			Visualize(startNode.Position,endPos)		
		end
		
		endPos = isTruss and trussTop or topRay.Position
		
		local distance,closestNode = FindClosestTo(endPos)
		if condition and not upRay or isTruss and distance >= spacing then
			local part = MakeNode()
			part.Position = endPos
			local node = {
				Position = endPos,
				Parent = startNode,
				G = startNode.G + 1,
				Node = part
			}
			table.insert(openList,node)
		end
	end
end

This is where all the rules are assigned and so if I want to detect parts then it should be done here.