Files
jesse 6e50f9718d
CI / quality (push) Failing after 1m9s
Aux-lane suppression + PA geometry fixes; probe/verify tooling
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
2026-08-06 08:27:47 -04:00

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")