fix: AT Proto repo as source of truth, multi-difficulty game pool
Source-of-truth principle: - On startup, hydrate game state from network records (not SQLite) - SQLite is now purely a write-through cache, never read on startup - Spawn background reconciliation task (60s interval) to catch any drift from Jetstream reconnection gaps - reconcile_games re-fetches moves for all active games from network Multi-difficulty game pool: - ensure_waiting_games creates one waiting game per difficulty (1-5) - When a game gets a playerTwo, it's consumed from the pool - After each bot move, the pool is replenished - Challengers pick difficulty by joining the corresponding game Also: - MoveRecord deduplicated across main.rs and jetstream.rs - Fixed doc comment (not hardcoded 9x9)