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,73 @@
|
||||
-- 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")
|
||||
Reference in New Issue
Block a user