Update example/index.html to allow users to specify a room via the UI:
- Add room name text input with '/' as default
- Add 'Join Room' button that (re)connects to the specified room
- Construct WebSocket URL using the room path (ws://host:port/room)
- Display connection status with current room name
- Derive initial room from browser URL hash (e.g., #/chat → /chat)
- Update URL hash on room change for shareable links
- Listen for hashchange events for URL-driven navigation
- Add Ctrl+Enter shortcut for sending messages
- Improve styling with flexbox layout for controls
Demo: open index.html#/chat in two tabs and index.html#/game in another.
Messages in /chat stay isolated from /game.
🤖 Assisted by the code-assist SOP
- Fix metrics: change MessagesTotal, ConnectionsTotal, DisconnectionsTotal
from Gauge to Counter with proper _total naming convention
- Fix broadcast write-error handling: failed clients now get properly
removed with accurate metrics updates
- Add graceful shutdown: SIGINT/SIGTERM handling with 10s timeout,
CloseGoingAway frame sent to clients before disconnect
- Add integration tests: 11 tests using real WebSocket connections
covering connect, broadcast, disconnect, concurrency, and shutdown
- Fix example client port: changed from 8000 to 8443 to match config
- Rewrite README.md to reflect current features and usage
- Add AGENTS.md and .agents/summary/ documentation for AI assistants