Issue #3613210: Editing a pending basket cancels its booking workflow, and an empty order is treated as free
Two guards keeping the booking workflow robust when a customer edits a still-pending basket.
Editing a pending basket must not cancel the workflow
BookingReconciler reacted to any unguarded RELEASED event and tore the running instance down, so removing or re-seating a line (via the cart, the seat map or the slot page) cancelled the workflow. But BookingManager::release() only ever frees a HELD booking, which is the customer's editable basket, so a release is a basket edit, not a settlement. The reconciler now ignores RELEASED; an out-of-band CONFIRMED / CANCELLED / EXPIRED still tears a stale instance down, and a whole-order cancel is handled by the order-driven bridge.
An empty order must not start a workflow
BookingWorkflowStarter now refuses an order with no held lines. An empty order is not a free order, it is nothing to book; starting one classified it as free (no payment due) and routed it to the place-order step, where it dead-lettered ("no line of the transaction was in a state to transition") and raised an incident.
Tests
BookingWorkflowTest adds: a basket edit (release) leaves the instance running; an out-of-band confirm still cancels the stale instance; an empty order starts no workflow.
Follow-up: securing the routing so an emptied order shows a message with a way back to the form, instead of dead-lettering, is tracked separately.