Aux-lane suppression + PA geometry fixes; probe/verify tooling
CI / quality (push) Failing after 1m9s
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
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
-- The require sweep passing only proves the modules LOAD. What runs on Play is
|
||||
-- MapBuilder actually building. Execute it for real and capture the error.
|
||||
local SS = game:GetService("ServerScriptService")
|
||||
local out = {}
|
||||
local function say(s) table.insert(out, s) end
|
||||
|
||||
local serverScript = SS:FindFirstChild("Server")
|
||||
local mb
|
||||
for _, d in ipairs(SS:GetDescendants()) do
|
||||
if d:IsA("ModuleScript") and d.Name == "MapBuilder" then mb = d end
|
||||
end
|
||||
say("MapBuilder module: " .. (mb and mb:GetFullName() or "NOT FOUND"))
|
||||
if not mb then return table.concat(out, "\n") end
|
||||
|
||||
local ok, mod = pcall(require, mb)
|
||||
say("require: " .. (ok and "ok" or ("FAIL " .. tostring(mod))))
|
||||
if not ok then return table.concat(out, "\n") end
|
||||
|
||||
say("exports: " .. type(mod))
|
||||
if type(mod) == "table" then
|
||||
local keys = {}
|
||||
for k, v in pairs(mod) do table.insert(keys, ("%s(%s)"):format(tostring(k), type(v))) end
|
||||
table.sort(keys)
|
||||
say(" " .. table.concat(keys, ", "))
|
||||
end
|
||||
|
||||
-- Clear any existing map so we build from scratch, exactly like a fresh run.
|
||||
local existing = workspace:FindFirstChild("Map")
|
||||
say("existing Map in workspace: " .. (existing and "yes" or "no"))
|
||||
|
||||
local buildFn = type(mod) == "table" and (mod.Build or mod.build or mod.BuildMap)
|
||||
if type(buildFn) ~= "function" then
|
||||
say("NO BUILD FUNCTION EXPORTED -- cannot test build path")
|
||||
return table.concat(out, "\n")
|
||||
end
|
||||
|
||||
if existing then existing:Destroy() end
|
||||
local t0 = os.clock()
|
||||
local bok, berr = pcall(buildFn)
|
||||
local dt = os.clock() - t0
|
||||
say(("build pcall: %s (%.2fs)"):format(bok and "OK" or "FAIL", dt))
|
||||
if not bok then
|
||||
say("BUILD ERROR: " .. tostring(berr):sub(1, 600))
|
||||
return table.concat(out, "\n")
|
||||
end
|
||||
|
||||
local m = workspace:FindFirstChild("Map")
|
||||
say("Map after build: " .. (m and "present" or "MISSING"))
|
||||
if m then
|
||||
local n = #m:GetDescendants()
|
||||
say("descendants: " .. n)
|
||||
if n == 0 then say("CONTROL FAIL: map built but empty") end
|
||||
end
|
||||
|
||||
return table.concat(out, "\n")
|
||||
Reference in New Issue
Block a user