We shipped three games in one batch — Melon Drop, Inkfield and Daily Atlas — and each one got a hardening pass whose job was to try to break it.

Part of that pass is a sabotage: delete the rule the game depends on and check that the suite notices. All three suites stayed green, and the three mechanisms were different enough to be worth writing down separately.

1. The assertion tested a helper, not the game

Melon Drop's whole comparability claim rests on a seeded fruit queue: your seed and my seed deal the same fruit in the same order, so a shared score means something.

The determinism check called queueFrom() — a pure reimplementation of the queue, exposed on the test seam because it was convenient.

Swapping the game's fillQueue to Math.random left all four assertions green. The helper was still deterministic. The helper was never the thing under test.

The fix is to drop fruit through the real drop() and read back what was actually dealt — then, separately, assert the helper agrees with it. A convenience seam is fine. A convenience seam standing in for the live path is not a test.

2. A second cause produced the same outcome

Inkfield's core rule is that a line kills whoever drew it. That rule is the game.

We deleted it. All 16 assertions stayed green.

Not because the assertions were sloppy, but because they were statistical: things like "a careless player loses this round". Careless play still died at the board edge often enough to satisfy that, and the survival gradient between careless and attentive play survived too.

A statistical assertion about an outcome cannot see a rule removed if anything else produces that outcome. The edge was the anything-else.

The fix is a direct test with no statistics in it: walk a loop onto your own line, assert you die, and assert it is recorded as your own doing rather than an edge collision. One specific event, checked specifically.

3. The test inherited an environment where the bug is invisible

Daily Atlas is a daily puzzle, so it has a dayNumber() function, and that function must use Math.round, not Math.floor. With floor, daylight saving serves the same puzzle twice each spring and breaks every streak each autumn. We know this because it has bitten us before.

So there is a check. It builds real dates and asserts consecutive days differ by exactly one.

Changing round to floor left all 26 assertions green.

The check used the machine's timezone. Where there is no DST transition, floor and round agree perfectly. The test was not wrong; it was running somewhere the bug does not exist.

The fix is to pin the timezone in the browser context — we use Europe/London, whose 2026 transitions land on exactly the dates the suite asserts.

Any test whose subject is a locale, a timezone or an OS preference has to pin it, or it is a self-skipping test wearing a date.

The other result, which points the opposite way

There is a tempting rule of thumb: "if reverting any single fix leaves the suite green, the suite is weak." We hit a case where that is simply false, and it is worth recording because the tidy story would have been wrong.

Melon Drop's fruit stack refused to come to rest. The position-correction pass ran before positions were integrated, so it pre-separated resting bodies, the next frame found no contact, and gravity was never cancelled. A fruit sat perfectly still carrying 31.36 units per second of downward velocity — a limit cycle, stable over fifteen simulated seconds.

Six changes went in together to fix it. Reverting any one of them leaves the suite green. Reverting the architecture wholesale turns seven assertions red.

The six fixes are redundant with each other, and no one of them is individually load-bearing. That is a real property of the system, not a hole in the tests — and the way to tell this case apart from a suite that checks nothing is to also run the wholesale revert. If that stays green too, then you have a problem.

What we now tell a hardening pass

Three things, and the third is the one that makes the reports honest:

  • Sabotage the core rule, not a helper next to it.
  • Sabotage narrowly. Break exactly the thing the guard claims to catch, because a sabotage wider than its guard goes red for the wrong reason and teaches you nothing.
  • The person hardening the game did not write it, and "not ready" is a valid verdict. That single framing is what produced our most useful report to date — one came back ship-with-caveats with the measured complaint that the hard AI wins in exactly 12 moves, 40 times out of 40.

Play them: Melon Drop · Inkfield · Daily Atlas

Related reading: our golf game was unloseable · rate a puzzle by what breaks without it