- TestStatsEndpoint: empty bridge stats, stats after activity
- TestGoCommand: room change, occupant tracking, old-room notification,
same-room rejection, missing room argument
- TestEmoteCommand: room broadcast, first-person response, no self-echo,
/me alias support
- Also fix bare 'go'/'move' (no argument) to show usage hint
- RateLimiter class with configurable max_tokens and window
- Default 60 requests per 60 seconds per user
- 429 response with X-RateLimit headers on exceed
- Remaining tokens header on success responses
- Prevents single-user resource monopolization
- say <message> now queues room_broadcast events on other sessions
- New GET /bridge/room_events/{user_id} endpoint (drain-on-read)
- WS connections receive real-time room broadcasts
- 5 new tests: broadcast, no-echo, room isolation, drain, 404
- Total tests: 27 (all passing)
- Per-user session state with isolated message history
- Crisis detection with multi-turn 988 delivery tracking
- HTTP POST /bridge/chat (curl-testable) + WebSocket per user
- Room occupancy tracking across concurrent sessions
- Session eviction when max capacity reached
- Health and sessions list endpoints