Recap · the waitlist release
One branch, one feature, and what it changed. Diagrams, the file map, and the annotated diff, so a reviewer can see the shape of the change before reading a line of it.
A seat frees and nobody is told. The list grows cold.
The next member is offered the seat for ten minutes; if they pass, it moves on.
src/waitlist/offer.ts - return nextInLine(classId); + return offerTo(nextInLine(classId), { holdSeconds: 600 }); migrations/014_waitlist.sql + ALTER TABLE waitlist ADD COLUMN hold_expires_at timestamptz;
The suite passes with scripting off and on a phone. Two claims can never hold one seat.
{ai} engineering · example page, generated from a real template · the data here is illustrative