A video game leaderboard has to reset when the game changes in a way that makes old times easier or harder to set. Bomb Appétit handles this with board epochs. Each mission's board belongs to one version of that mission. Change a setting that affects speed and a new, empty board opens while the old one is archived.
Why does a video game leaderboard ever reset?
A leaderboard resets because a time only means something next to times set under the same conditions. If a mission gains an extra minute, every run after the change has an easier target than every run before it. Keeping both on one table would rank people by when they played, not by how well.
Picture a board where the top runs were set with four minutes on the clock. Then the mission moves to five minutes. A new team that is slightly slower than the leaders could still post more time left, simply because it started with more. The board would crown them, and the original leaders would drop for reasons that had nothing to do with play.
The opposite change causes the opposite problem. Cut the strike limit from three to two and the old runs that took two strikes and survived are now impossible. They would sit at the top forever, out of reach of anyone playing the new version.
So a fair board has two duties when its mission changes. It must stop new runs from mixing with old ones, and it must not throw the old ones away, since those players earned them honestly. Bomb Appétit does both with one number per mission, and it only raises that number when a change actually affects how fast the mission can be played.
Board epochs: one leaderboard per version of a mission
A board epoch is a version number on a mission's leaderboard. A Bomb Appétit board is one mission at one epoch, and every run records the epoch it was played under. The live board is the mission's current epoch. Older epochs become archived boards that stay readable but take no new runs.
Every mission starts at epoch 1, and today all 20 missions are still at epoch 1, so every board is the original board and no archive exists yet. When a mission's epoch is raised to 2, runs saved from then on go to the epoch 2 board, which starts empty. The epoch 1 board stops growing but keeps every row it had.
Epochs only go up. The project's checks reject a mission whose epoch has gone down, so an old board can never be reopened for new runs by mistake.
The ranking query reads one board at a time, matching on both the mission and the epoch. Runs from a different epoch are not hidden by a filter. They are simply never part of the same table. Which board each new run joins is decided when the server saves it, using the mission's epoch at that moment.
Because a run carries its epoch, its results page always places it on the right board. A result from epoch 1, opened after epoch 2 is live, still shows its rank on the epoch 1 board. Your dashboard and the badges on the missions page use only the live boards, so they always describe where you stand now.
Which mission changes start a new leaderboard epoch?
A new epoch is required when any of nine ranked fields changes. These are the settings that shape how fast a mission can be played: case size, time limit, strike limit, module pool, module count, needy pool, needy count, fixed bomb seed and rule seed. Change one and the times are no longer comparable.
The project keeps a lock file that records the nine fields each epoch was opened with. A test compares every mission against that lock. If someone edits a ranked field without raising the epoch, the test fails and names the mission and the field. After the epoch goes up, the lock is written again with the new values.
The nine ranked fields, with example changes
The changes below are invented examples to show each field. None of them has happened to a real mission.
| Ranked field | What it controls | Example change | New epoch? |
|---|---|---|---|
| Case size | The case's grid, 3x2 or the bigger 4x3 | Quick snack moves to the 4x3 case | Yes |
| Time limit | The starting clock | Quick snack goes from 4:00 to 5:00 | Yes |
| Strike limit | Mistakes allowed before the bomb goes off | Rush hour drops from 3 strikes to 2 | Yes |
| Module pool | Which module types the bomb can draw from | Word salad adds Recall to its pool | Yes |
| Module count | How many regular modules appear | Mixed plate goes from 5 modules to 6 | Yes |
| Needy pool | Which needy types can appear | Pressure cooker adds Discharge Lever | Yes |
| Needy count | How many needy modules appear | Full boil goes from 1 needy module to 2 | Yes |
| Fixed bomb seed | Whether everyone gets the same bomb, and which | First bite switches to a fresh bomb each run | Yes |
| Rule seed | Which manual the mission uses | The final mission moves from seed 2026 to 2027 | Yes |
Every row says yes, which is the point. The lock covers only fields where any change can move times. Fields that cannot, such as the mission's name, are left out, and the next sections cover what that means.
The fixed bomb seed row is worth a second look. Two missions, First bite and Button up, hand every player the identical bomb. Switching one of them to a fresh bomb per run, or to a different fixed bomb, changes what every player faces, so it needs a new board just like a new time limit.
Reading an archived leaderboard after a reset
An archived board is the board from before a change. It stays on the leaderboard page, one link away from the live board. Its rows, ranks and dates are exactly as they were when the mission changed, and a note above the table says the times are kept apart from the current ones.
When a mission is past epoch 1, its live board shows a note above the table: "This mission has changed." followed by a link, "See the board before the change." That link opens the previous epoch. The archive's own note reads "Archived board 1 of 2. The mission has changed since, so these times are kept apart.", with a Current board link to return.
An archived board works like any other. The Team filter still switches between Everyone, Solo and With Experts, and a signed-in player sees their own place on it if they had a ranked run under that version. The one thing missing is the "Be the first" link on an empty archive, since nobody can add runs to it.
The archive is the honest record of who was best at the old version. A player who topped the board before a change keeps that page as proof. They also start the new board level with everyone else.
You can open the leaderboard now and pick any mission. Since every mission is still at epoch 1, none of them shows the archive link yet. The first time a mission changes, the link will appear on its board.
Mission edits that leave the leaderboard alone
Edits to a mission's name, its short description, its section or its place in the list do not open a new epoch. None of them changes the bomb a player faces, the clock they race or the manual they read. The board carries on, and every existing row keeps its place.
The missions page shows each mission with its title, a one-line blurb, and the settings that matter for play. Rewriting the blurb for clarity, renaming a mission, or moving it within its section all fall outside the ranked fields, so the lock does not notice them.
The manual for rule seed 1 has its own protection. The standard rules are frozen as data, so a later improvement to the code that generates rules for other seeds cannot quietly change seed 1. The reasoning behind that choice is in why the standard manual never shifts.
Verification is another thing that sits outside the epoch system. Every run is replayed by the server before it is listed, with the same engine on the bomb it issued, and that check is the same on every board. How that replay works, and why a run might not appear, is covered in how a defusal gets ranked.
The leaderboard reset mistake: comparing times across epochs
The mistake is setting a time from an archived board against one from the live board as if they were the same contest. They are not. The two versions of the mission had different settings, so a faster number on one tells you nothing about the other.
Suppose a mission's time limit rose by a minute. A run with 2:10 left on the new board might be a weaker performance than a run with 1:30 left on the old one, because the new run started with sixty more seconds. Only the comparison inside one board is fair.
The same applies to percentiles. A Top 5% on an archived board and a Top 5% on the live board are each true of their own board. A player who held one and now holds the other has not necessarily improved or slipped.
If you keep your own records, such as a spreadsheet of best times for a group, note the epoch beside each time. A results page always shows its run's rank on that run's own board, so it is a reliable source when you are unsure.
For a group working through every mission over several evenings, our plan for a co-op campaign of twenty missions over four nights suggests a running order. If some of those runs will happen on a phone, read whether phone and laptop runs rank differently before you set your targets.