Cinema reservation event log and projections Cinema log: one race, one winner, three views teaching numbers: 300 seats, 50 bookings/s peak, 10 min hold Commands HoldSeat A5 (u1) HoldSeat A5 (u2) a please, may fail guard: seat v == read v Event log: append-only, ordered 1 SeatHeld u1 wins A5 2 SeatTaken u2 loses, retries 3 SeatConfirmed u1 pays, done 4 HoldExpired / Canceled frees the seat, history stays 5 BookingCorrected fresh event, never edit Send guard key: event id first send: ticket repeat: blocked replay never sends Seat map view seat: status + hold_id late Held never relocks Sales report view confirmed minus cancels replay rebuilds it free Ticket print view consumer + sent-table lost ticket: resend, same key the seat version referees, never the view - crash between append and send is safe to retry replay rebuilds views with no external effect - a fix is always a fresh compensating event