CI / quality (push) Failing after 1m9s
MapBuilder.luau
- Suppress the aux lane across samples 525-550 (AUX_SUPPRESS_FROM/TO),
honoring the user's hand deletion in Studio so a rebuild no longer
regenerates it.
- Smoothstep the width ramp over AUX_BLEND=5 samples on each side. A hard
cut produced a 26-stud lateral fence jog; the blend removes it.
- DO NOT remove this suppression. Re-enabling it resurrects geometry the
user deleted by hand.
rokit.toml
- rojo 7.5.1 -> 7.7.0 to match the auto-updating Studio plugin.
Server older than plugin fails the handshake with
"attempt to index number with 'protocolVersion'".
tools/
- 34 read-only probe/verify/capture scripts used to measure the datamodel
instead of reasoning from source.
Verified-good baseline at this commit:
total parts 16788
PAWestSlip 60 segs, 34.4 deg total bend, worst 1.4, 0 kinks >5
PAEastSlip 60 segs, 30.7 deg total bend, worst 1.3, 0 kinks >5
AuxLane parts 30 (samples 525-550 deliberately absent)
barrier coverage 823 samples, 0 unguarded
fence jogs >10st 0
79 lines
2.6 KiB
Luau
79 lines
2.6 KiB
Luau
-- The user hand-edited ramps in Studio. Their work exists ONLY in the live
|
|
-- workspace, not in MapBuilder source. Before touching anything, measure what
|
|
-- is actually there now and how it differs from what source would generate.
|
|
local out = {}
|
|
local function say(s) table.insert(out, s) end
|
|
|
|
say("place: " .. tostring(game.Name))
|
|
|
|
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(("Map parts=%d (source rebuild produced 16820)"):format(parts))
|
|
|
|
-- Slip deck geometry as it stands RIGHT NOW.
|
|
local slip = {}
|
|
for _, d in ipairs(map:GetDescendants()) do
|
|
if d:IsA("BasePart") then
|
|
for _, s in ipairs({ "PAWestSlip", "PAEastSlip" }) do
|
|
local k = d.Name:match("^" .. s .. "_Deck_(%d+)$")
|
|
if k then
|
|
slip[s] = slip[s] or {}
|
|
table.insert(slip[s], {
|
|
i = tonumber(k), pos = d.Position, size = d.Size,
|
|
cf = d.CFrame, inst = d,
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
for _, s in ipairs({ "PAWestSlip", "PAEastSlip" }) do
|
|
local g = slip[s]
|
|
if not g or #g == 0 then
|
|
say(s .. ": ABSENT")
|
|
else
|
|
table.sort(g, function(a, b) return a.i < b.i end)
|
|
local topY, level = g[1].pos.Y, 0
|
|
for _, seg in ipairs(g) do
|
|
if math.abs(seg.pos.Y - topY) < 0.5 then level += 1 else break end
|
|
end
|
|
-- widths and gaps tell us if the user reshaped it
|
|
local wmin, wmax = math.huge, -math.huge
|
|
local maxGap, gapAt = 0, -1
|
|
for j, seg in ipairs(g) do
|
|
wmin = math.min(wmin, seg.size.X); wmax = math.max(wmax, seg.size.X)
|
|
if j > 1 then
|
|
local d2 = (seg.pos - g[j - 1].pos).Magnitude
|
|
if d2 > maxGap then maxGap = d2; gapAt = seg.i end
|
|
end
|
|
end
|
|
say(("%s: segs=%d idx[%d..%d] startY=%.1f endY=%.1f level=%d width=%.1f..%.1f maxGap=%.1f@%d"):format(
|
|
s, #g, g[1].i, g[#g].i, topY, g[#g].pos.Y, level, wmin, wmax, maxGap, gapAt))
|
|
end
|
|
end
|
|
|
|
-- What barrier-ish parts exist, and on what? Name survey first so I know the
|
|
-- real naming scheme before I go hunting for "missing" ones.
|
|
local kinds = {}
|
|
for _, d in ipairs(map:GetDescendants()) do
|
|
if d:IsA("BasePart") then
|
|
local n = d.Name:gsub("_%d+$", "_#")
|
|
if n:lower():match("barrier") or n:lower():match("parapet") or n:lower():match("rail")
|
|
or n:lower():match("wall") or n:lower():match("guard") or n:lower():match("kerb")
|
|
or n:lower():match("curb") or n:lower():match("fence") then
|
|
kinds[n] = (kinds[n] or 0) + 1
|
|
end
|
|
end
|
|
end
|
|
local list = {}
|
|
for k, v in pairs(kinds) do table.insert(list, ("%s=%d"):format(k, v)) end
|
|
table.sort(list)
|
|
say("BARRIER-LIKE PART NAMES: " .. (#list > 0 and table.concat(list, " ") or "NONE"))
|
|
|
|
return table.concat(out, "\n")
|