Every error has the same shape: a code you can search for, a plain explanation, the stage and part it came from, and the repairs that make sense. Errors never suggest retrying something that won’t change on its own.
Example error

Preparing

Two parts of your simulation, or your project and the runtime profile, need different versions of the same library. The error lists who needs what. Choose versions that agree, or use a runtime profile that matches your pins.
Two packages both provide a module with the same import name, such as tasks. Give your reusable package a distinctive name, such as yourlab_tasks. Changing versions won’t fix this one.
Two packages register the same environment or robot name with the framework. Rename one of them.
Parts disagree about world-wide settings, such as the timestep or gravity. Ballot won’t pick one for you. Use parts that agree, or publish a variant.
Ballot doesn’t support your robot’s controller yet. Switch to a supported controller for piloting, or tell us which controller you use.
Part of the robot’s action couldn’t be matched to something the pilot controls, such as an extra gripper channel. Check the robot’s controller setup.
Something important to the task can’t be drawn on the headset yet, such as particles or a custom shader. Ballot stops rather than hide it from the pilot. Simplify that visual, or publish a variant without it.
The runtime profile in your ballot.toml isn’t available to your project. Run ballot sim profiles list and pick one that is.

Combining parts

The task needs a spot the world doesn’t have, such as a button. Choose a world with that port, or a task that fits this world. Ballot won’t invent the missing part.
Two parts both try to set the same thing at reset, such as the object’s starting position. Decide which part owns it.
The gripper can’t open wide enough for the task’s object. Use another gripper or a smaller object.
The robot can’t reach the object from any usable direction at this mount. Try another mount or layout.

Sessions and invites

Another browser already used this link. Create a new link for the new person.
The link’s time ran out. Create a new one.
Someone revoked the link. Ask the person who sent it for a new one.
The simulation failed partway through a reset, so Ballot retired that world instead of letting anyone continue in a half-reset state. The episode up to that point is kept. Start a new session.
Ballot couldn’t confirm whether a cloud machine started. It checks before trying again, so a second machine isn’t started by mistake. Wait for the session to settle.
A session has ended, but its machine hasn’t been confirmed as shut down yet. Ballot keeps checking.

Episodes

Recording couldn’t keep up, so the simulation paused rather than lose data. It continues when the upload catches up.
The episode was cut short. Everything up to the last upload is saved and checked, and the end of the attempt is marked as missing.
The data you asked for, such as a camera view, wasn’t recorded or can’t be made from this episode. Nothing was started, and nothing was charged.
Someone else changed the same thing first, such as which release new joins get. Check the current state and try again.

Early-access limits

These defaults can change, and some can be raised for your project.

Still stuck?

Design partners can reach us through their onboarding channel. Include the error code and the job, session or episode ID from the output.