# Scrabble Game — Функциональная спецификация Пользовательские сценарии по доменам: что делает каждая видимая пользователю операция. Это зеркало [`FUNCTIONAL.md`](FUNCTIONAL.md) для владельца проекта; **авторитетна английская версия**. Любую точечную правку переносим в том же патче (переводим только изменённые абзацы). Разделы наполняются по мере этапов; *(Stage N)* помечает, где пишется детализация. ## Домены ### Личность и сессии *(Stage 1 / 6)* Игрок приходит с платформы (сначала Telegram), через email-вход или как эфемерный гость. Gateway один раз валидирует доступ и выдаёт тонкий session-токен; backend сопоставляет его с внутренним `user_id`. Гость — только сессия, с урезанными функциями (только авто-подбор; без друзей, статистики и истории). ### Аккаунты, привязка и слияние *(Stage 1 / 10)* Первый контакт с платформы заводит постоянный аккаунт. Из профиля игрок привязывает другие платформенные личности или email через confirm-поток; привязка личности, у которой уже есть история, сливает её в текущий аккаунт (статистика суммируется, игры/друзья переносятся). ### Лобби и подбор *(Stage 4)* Нижнее tab-меню: **мои игры**, **профиль**. Авто-подбор (всегда 2 игрока) встаёт в пул по `(вариант, язык)`; через 10 с без человека подставляется робот. Игры с друзьями (2–4) формируются по списку друзей, внутреннему ID или deep-link. ### Игровой процесс *(Stage 3)* Выкладывание фишек, пас, обмен или сдача. Ход проверяется по словарю при сдаче и считается. Одна подсказка на партию показывает лучший ход. Инструмент проверки слова безлимитный и предлагает пожаловаться. Партия завершается, когда мешок пуст и игрок выложил стойку, после 6 подряд бесплодных ходов, либо по таймауту хода в 24 часа (авто-сдача). ### Робот-соперник *(Stage 5)* Неотличимый от человека дублёр в авто-подборе. Один раз решает, играть ли на победу (~40%), целится в небольшой отрыв по очкам, ходит с человеческим таймингом и ночным сном, делает и принимает nudge как человек. ### Социальное: друзья, блок, чат, nudge *(Stage 4)* Добавление в друзья; независимая блокировка чата и/или заявок в друзья; чат в рамках партии; nudge ожидаемого соперника не чаще раза в час (платформенное уведомление). ### Профиль и настройки *(Stage 4)* Язык (en/ru), отображаемое имя, привязанные аккаунты, привязка email, таймзона, переключатели блокировок. ### История и статистика *(Stage 3)* Завершённые партии архивируются в независимом от словаря виде и экспортируются в GCG. Статистика: победы, поражения, макс. очков за партию, макс. очков за слово. ### Администрирование *(Stage 9)* Админ (Basic Auth на gateway) разбирает жалобы на слова, управляет версиями словаря, смотрит пользователей/игры.