Pvp arrivers Pair-or-Park: second arriver constructs the session; first arriver awaits self.AwaitSessionFinishedAsync (never calls self.RunAsync directly because the session does). Park-race retries Pair once. Bot type still stubbed for Phase 3. Scripted path unchanged. Viewer-id validation extended to accept either P1 or P2 (PvP sessions have both).