# Reference patch — 02-snakes-bite-to-the-start

The answer key for how the reference absorbs this change, and the thing that makes `budget.json`
reproducible. **Never shipped to the candidate.**

1. **Add** `BiteToTheStart.java` (in this directory) to `reference/src/`. New file, so
   `measureChange` charges nothing for it.

2. **Change one line** in `reference/src/Game.java`, in the middle convenience constructor:

   ```diff
   -        this(board, players, dice, new BoardGeometry(), new SixRollsAgain());
   +        this(board, players, dice, new BiteToTheStart(new BoardGeometry()), new SixRollsAgain());
   ```

`BoardGeometry` is wrapped, not edited. The old rule still exists, still compiles and is still the
thing ladders go through — which is why nothing about ladders had to be re-tested.

## Why this is two lines and not fifteen

The requirement reads like a change to snakes, and a design that resolved snakes inside its move
loop pays for it there: the loop that walks a chain, the code that decides whether the chain has
ended, and the code that reports the jump are all in one place, so all three get edited.

The reference had already split the two questions:

- **where one square sends you** — `JumpRule`, one method, one line of body;
- **how far a chain of them goes** — `Jumps`, written once and blind to what any individual square
  does.

So the new rule is the first of those and nothing else moves. `Jumps` still walks, still stops when
a square sends the player nowhere (square 0 is plain, so a bite terminates the chain immediately),
and still hands back the jumps for the game to announce.

The `Jump` record carries the causing `SquareEffect`, so the announcement still says *which* snake —
tail and all — even though the tail no longer decides the destination. That is the part a design
that announced "moved backwards" instead of "bitten by this snake" cannot produce at all.

## Measurement

`reference_diff = 2` (1 added, 1 removed, one file touched), so
`diff_budget = max(3, 2 + ceil(2/2)) = 3`.

The curveball suite is green after the patch: **6 tests, 6 passed.**

The base suite is **not** expected to stay green, and 13 of 16 pass. The three failures are exactly
the snake ones — *"a snake sends the player from its head down to its tail"*, *"resolves a chain when
a ladder ends on a snake's head"* and *"tells a listener about the move and about every jump it set
off, in order"*. They assert the old destination, which is the rule that was replaced.
