# Requirement change

Group bookings are the complaint we get every week: a party books four seats and ends up split
across two rows because whatever was free was scattered. We want a way to ask for seats together
without the caller having to know which exact ones are free.

**Add a way to ask for N seats of one type, next to each other, on one show, and let the system
pick which ones.** "Next to each other" means what it looks like from the seat ids already in the
catalogue: a row letter followed by a number, and two seats are adjacent when they are in the same
row and their numbers differ by exactly one. So on MATINEE, A1 and A2 are adjacent; A1 and A3 are
not, because A2 is between them.

If more than one run of the right length is free, take the one starting at the lowest number.
Whatever you find, hold it exactly like an ordinary hold — all or nothing, quoted at the price the
seats are worth right now, good for the usual HOLD_TTL, discovered as lapsed the same lazy way as
any other hold.

Asking for more seats of a type than the show has **at all** is the caller's mistake, the same as
asking for a seat id that does not exist — refuse it outright. Asking for a run that the show could
in principle seat but nothing free right now happens to satisfy is not a mistake — it is an ordinary
denial, the same shape as any other unsuccessful hold.

Nothing about the existing `hold`, `confirm` or `releaseHold` methods changes. A caller who already
knows exactly which seats they want keeps using `hold` exactly as before.
