Add challenge invite flow, spectator mode, and color selection
- 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
authored by
tangled.org
fa6f9542
b4f3377e