<< All versions

Skill v1.0.0

currentLLM-judged scan95/100
blushneybusiness-glitch/roblox-omniskills/rbx-qa-scale
──Details
PublishedOctober 3, 2026 at 07:31 AM
Content Hashsha256:1cb7c18135df7949...
Git SHA
──Files
Files (1 file, 4.3 KB)
SKILL.md4.3 KBactive
SKILL.md · 93 lines · 4.3 KB

version: "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 RequestStreamAroundAsync before 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 RenderStepped accumulations 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:WaitForChild sprinkled 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).

All versions