Add challenge invite flow, spectator mode, and color selection master
- Post challenge to Bluesky with @mention facet and game link - Send via DM option (copies link, opens bsky.app/messages) - Color selection on /play (White, Black, Random) - Game page handles owner-as-either-color (decoupled from record ownership) - Spectator mode: non-participants see read-only board with flip button - Unauthenticated users can view any game via public PDS reads - Dual Jetstream connections for spectators (one per player) - Check-before-join guard to reduce race condition on open games - Public agent helpers (getGamePublic, findGameRecordByParentPublic) - challengerColor field added to challenge lexicon - Fixed all pre-existing type errors (oauth, Board, route params) - 9 new tests for bluesky facet construction