- client/api/client.ts: shared refreshPromise prevents concurrent refresh races;
dispatches auth:logout event when refresh fails
- client/context/AuthContext.tsx: listen for auth:logout to clear user state
- server/routes/transactions.ts: POST / real-time single transaction through
payment abstraction (201 completed, 202 pending); GET /reports/shift shift
window totals with averageTransaction, shiftOpen/shiftClose timestamps
- .github/workflows/ci.yml: server typecheck+build, client typecheck+build,
Docker smoke-test on push/PR to main
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>