Server-Mediated Seating, Real Seats, Outdoor Queue
Customers no longer self-seat. They spawn at the far edge of a new outdoor waiting lane (visually distinct pavement), walk in and queue naturally up to the door, and wait there until a server claims a SEAT_CUSTOMER job, walks to the door, and seats them at a specific open seat. Tables now have real per-seat cells (up to 4 distinct grid cells around each table, each holding at most one customer) instead of a shared per-table counter, so occupants render at separate seats — with a bare-minimum chair icon marking every seat, filled or empty.
Verified this session (see WORKLOG.md for full detail):
- A long-run (3000-tick) integrity check confirms no table ever exceeds its seat count and no seat cell is ever double-assigned.
- Staffing still visibly matters with the new mechanic: 1 server + 1 cook served 6 (16 lost) vs. 2 servers + 2 cooks served 13 (11 lost) on an identical seed/layout over 300 simulated seconds.
- All 25 automated tests pass (three needed updating for the new seating flow; see
WORKLOG.md). - Two new deadlock-class bugs were found and fixed while building this (stale seating target, door-blocking queue point) plus a priority-starvation issue (a lone server could get stuck unable to ever clear a table because it was camped waiting to seat someone) — all documented in
WORKLOG.mdandDEVELOPMENT.md.
