-- The rebuild was interrupted mid-flight; its effect is UNKNOWN. Establish -- ground truth before touching anything else. -- (a) Did the build run? part count vs 16714 (user-edited) / 16820 (source). -- (b) Is the aux lane back? user's edited workspace had 30 aux parts, -- source produces 52 -- so they deleted ~22. -- (c) Did the smoothing pass actually land on the east slip? local out = {} local function say(s) table.insert(out, s) end local map = workspace:FindFirstChild("Map") if not map then return "workspace.Map MISSING" end local parts = 0 for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") then parts += 1 end end say(("parts=%d (16714=user-edited, 16820=source rebuild)"):format(parts)) -- Aux lane inventory, with index range + position so I can tell WHICH lane. local aux = {} for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") then local k = d.Name:match("^AuxLane_(%d+)$") if k then table.insert(aux, { i = tonumber(k), p = d.Position, inst = d }) end end end table.sort(aux, function(a, b) return a.i < b.i end) say(("AuxLane parts=%d (30=after user deletion, 52=source)"):format(#aux)) if #aux > 0 then -- group into contiguous runs so each physical lane shows up separately local runs, cur = {}, nil for _, a in ipairs(aux) do if cur and a.i - cur.last <= 2 then cur.last = a.i; cur.n += 1 else if cur then table.insert(runs, cur) end cur = { first = a.i, last = a.i, n = 1, p = a.p } end end if cur then table.insert(runs, cur) end for _, r in ipairs(runs) do say((" aux run idx %d..%d n=%d at (%.0f,%.0f,%.0f)"):format( r.first, r.last, r.n, r.p.X, r.p.Y, r.p.Z)) end end -- Slip smoothness: did the relaxation take effect? for _, s in ipairs({ "PAWestSlip", "PAEastSlip" }) do local segs = {} for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") then local k = d.Name:match("^" .. s .. "_Deck_(%d+)$") if k then table.insert(segs, { i = tonumber(k), p = d.Position, cf = d.CFrame }) end end end table.sort(segs, function(a, b) return a.i < b.i end) if #segs == 0 then say(s .. ": ABSENT") continue end local total, worst, worstAt, over = 0, 0, -1, 0 for j = 2, #segs do local a, b = segs[j - 1].cf.LookVector, segs[j].cf.LookVector local d = math.deg(math.acos(math.clamp(a:Dot(b), -1, 1))) total += d if d > worst then worst = d; worstAt = segs[j].i end if d > 5 then over += 1 end end local topY, level = segs[1].p.Y, 0 for _, sg in ipairs(segs) do if math.abs(sg.p.Y - topY) < 0.5 then level += 1 else break end end say(("%s: segs=%d total=%.1fdeg worst=%.1f@%d over5=%d level=%d"):format( s, #segs, total, worst, worstAt, over, level)) end return table.concat(out, "\n")