Skill v1.0.0
currentLLM-judged scan95/100version: "1.0.0" name: rbx-qa-scale description: > The bug class you cannot see in Studio solo-testing: failures that appear only at player scale, on slow devices, or from load-order races — the killbrick that misses 1 in 10 players, the shop that errors for late joiners, the leaderboard that breaks at 30 players. Use when preparing to publish, when players report bugs you cannot reproduce, or when anything "works in Studio but not in game". Do not use for ordinary reproducible bugs — load rbx-script-debug — or for frame-rate problems — load rbx-perf-profiling instead. class: KNOW last_reviewed: 2026-08-23 sources:
- https://create.roblox.com/docs/projects/client-server (official docs)
- https://create.roblox.com/docs/workspace/streaming (official docs)
- original
rbx-qa-scale
When to load
Publish gauntlet (rbx-qa-gauntlet loads this automatically), unreproducible player reports, anything touching CharacterAdded/PlayerAdded ordering, StreamingEnabled games, or systems that behave per-player-count.
The five families
1. Load-order races — CRITICAL
The Studio machine is fast; a 2015 phone is not. Everything that "was already loaded" in your test is a race in production.
- Symptom: killbrick/touchpad/zone misses some players; UI references nil children;
remotes fire before handlers connect.
- Law:
PlayerAdded+ iterate existing players;CharacterAdded+ handle the already-
spawned character; WaitForChild on anything client-side you didn't create this frame; server binds remote handlers BEFORE any client can fire (bind in the same script that creates the remote, before it replicates).
- Wrong:
workspace.KillBrick.Touched:Connect(...)in a client script that ran before the
brick streamed in. Right: server-side Touched, or client WaitForChild with a timeout and a retry log.
2. StreamingEnabled surprises — CRITICAL
Parts don't exist for distant clients. Anything the client indexes in workspace can be absent for minutes.
- Zone triggers, minimap markers, tutorial pointers to far objects: use CollectionService
tags + GetInstanceAddedSignal, never direct paths.
- Teleports inside the place need
RequestStreamAroundAsyncbefore the character moves, or
the player falls through unloaded ground.
3. Player-count effects — HIGH
- Loops that are O(players²) (proximity checks each-vs-each) fine at 3, dead at 40.
- One shared cooldown/debounce table keyed wrong → players share each other's cooldowns.
- Leaderboards/UI that assume ≤ N rows overflow and cover other UI.
- Test law: playtest at the real max server size at least once (Studio multi-client "Start"
with 4+ players minimum; treat anything untested beyond that as unverified and say so).
4. Slow-device divergence — HIGH
- Client timing built on frame counts or
RenderSteppedaccumulations drifts on 20fps
devices; use clock time (os.clock, time()) for anything gameplay-fair.
- Animations/tweens that gate gameplay ("door opens after tween completes") take longer on
slow clients — gate on server time, render on client.
- Touch devices fire input events with different ordering than mouse; test the mobile input
path per rbx-qa-devices.
5. Join/leave edges — MEDIUM
- Mid-round joiners: every round-based system needs a "late joiner" branch (spectate, catch
up, or queue) — the default is a player standing in a void.
- Leavers mid-trade/mid-purchase/mid-minigame: every session-spanning transaction needs an
abort path (rbx-trading-antiscam, rbx-mtx-receipts handle their domains; everything else follows the same pattern: on PlayerRemoving, roll back or complete atomically).
Sharp edges
- CRITICAL — Testing only in single-player Studio: half this list is invisible there.
Multi-client test + a deliberately throttled client (Studio's network simulation) is the minimum bar before publish.
- HIGH —
game.Loaded/workspace:WaitForChildsprinkled as superstition instead of at
the actual race points: hides the real dependency and slows joins. Fix the dependency.
- MEDIUM — Fixing a race by adding
task.wait(3): it changes which devices lose the
race; it never closes it.
Load with
rbx-qa-gauntlet (the full hunt), rbx-qa-playtest (automated multi-scenario runs), rbx-qa-devices (device matrix), rbx-platform-streaming (streaming deep dive).