Submissions and verdicts
The workspace has three buttons that are easy to confuse: Run, Run tests and Submit. Only one of them counts, and it is the one you cannot take back.
Run
Run powers your board and executes main.py on it, in your browser. It is a simulation: nothing is sent to the server, nothing is judged, and nothing is recorded. It is how you watch your build work — the same thing the Run button does in the sandbox. See how a run works.
Run tests
Run tests runs the objective's checks in your browser, in the Results tab. They are the same checks the judge runs on Submit, so this is your rehearsal: the verdict, each check's pass or fail, the cost and the program output. Test runs are free and unlimited — a failing test run costs no time and no penalty. You can cancel one while it runs, and only contest and practice builds have tests (the sandbox has no objective to test against).
Submit
Submit is the real thing, and it only appears in the contest. It sends your circuit.py and main.py to the server, where the judge builds the board, runs the program and applies the objective's checks. The verdict it returns is final. While a submission is waiting for the judge, the button reads Judging… and the server refuses another one: "Wait for your last submission to be judged". One at a time.
Submit is disabled once you are solved and after the time runs out. Before anything is sent, Submit builds circuit.py in your browser: if the build fails, or the build is over budget, the problem is shown and nothing is submitted, so it costs no penalty.
Custom components
A submission includes the custom components in your build. The contest only accepts components you wrote yourself, not copies of someone else's. A build with one of those is refused before judging, so it costs no penalty. The server keeps a copy of each component's code with the submission.
The status flow
A submission moves through three states, shown in the Results tab:
- queued — your submission is in line behind other work. The Results tab shows your place in the line and a rough wait ("#2 in line · ~3 s").
- judging — the judge is running your build right now, usually for about a second.
- a verdict — accepted, rejected, build-error, over-budget or error.
The workspace polls the server about once a second while a submission is pending, and reminds you that the wait doesn't count against your time, so the transition shows up by itself. Closing the tab does not lose it: the next time you open the attempt, the workspace finds the pending submission and picks up where the polling left off.
The verdicts
| What the UI shows | Status | What it means | Counts as wrong |
|---|---|---|---|
| Accepted | accepted | Every check passed. The first accepted submission ends the attempt and records your score. | no |
| Some checks failed | rejected | The program ran but one or more checks did not pass. The Results tab lists them, with reasons. | yes, +5 min |
| circuit.py has an error | build-error | The board could not be built from your wiring. The traceback points at the line. The workspace catches this before sending, so in practice it only happens if the server's build disagrees. | yes, +5 min |
| Over budget | over-budget | The build costs more than the objective's budget. The workspace checks the budget before sending and refuses to submit an over-budget build. | yes, +5 min |
| The judge could not finish | error | A server-side failure — a judge crash or timeout. Nothing about your build caused it. | no |
A rejected, build-error or over-budget submission adds a wrong submission to your attempt, worth five minutes (300 seconds) in your score. A judge error never does: it is the server's fault and costs you nothing. How the penalty lands in the score is on how scoring works.
Waiting for a pending submission
If the verdict is not back yet, you can keep reading and changing your code, but you cannot submit again until it arrives. Your time is not running while the judge works: your seconds stop at the moment the server received your accepted submission, not when the judge got around to it. When the verdict lands, the Results tab shows the verdict, the checks, the cost and — if accepted — your score and rank.
Going deeper
- The server runs only a couple of judge jobs at once, so at busy moments submissions wait in
queued. A wait in the queue is normal and costs no score. - Submissions a server restart interrupted are handed back to the judge when the server comes up, oldest first — they are not lost.
- Test runs use the same check definitions the judge does, but the judge also produces the bill that counts and enforces the budget.