Перейти к содержанию

Функциональные требования

Приоритеты: Must / Should / Could (MoSCoW).

Сессии и участники

ID Требование Приоритет
FR-001 Система shall создавать сессию с уникальным кодом 6–8 символов Must
FR-002 Участник shall подключаться по коду с веба и из TG без пересоздания комнаты Must
FR-003 Один Participant shall иметь одновременный presence на веб и TG Must
FR-004 Host shall выбирать игру из каталога внутри сессии Must
FR-005 Host shall менять игру без создания новой сессии Must
FR-006 Система shall отображать поле картинкой в TG и интерактивно на вебе Must
FR-007 Пользователь should регистрироваться по email с профилем и историей Should
FR-008 Пользователь should привязывать Telegram к аккаунту Should
FR-009 Гость shall входить без аккаунта по guest token Must
FR-010 Host shall стартовать/менять игру и исключать участников Must
FR-018 Система shall закрывать сессию по команде host Must
FR-019 Система shall хранить список участников с ролью host/player/spectator Must
FR-020 Код сессии shall быть уникальным среди активных сессий Must

Авторизация

ID Требование Приоритет
FR-021 Система shall выдавать JWT access + refresh зарегистрированным Should
FR-022 Система shall выдавать guest token с TTL 24 ч Must
FR-023 Telegram Login Widget shall аутентифицировать на вебе Should
FR-024 Бот shall аутентифицировать по telegram_id Must

Real-time и синхронизация

ID Требование Приоритет
FR-025 Веб shall получать обновления состояния по WebSocket Must
FR-026 Бот shall получать события и обновлять сообщения с полем Must
FR-027 Действия shall быть идемпотентны по action_id Must
FR-028 При reconnect веб shall восстанавливать state из API Must
FR-029 Активный канал управления shall быть последним использованным Must

Game runtime

ID Требование Приоритет
FR-030 Система shall загружать игры как плагины по plugin_id Must
FR-031 Система shall валидировать ходы только на сервере Must
FR-032 Система shall логировать все действия в audit log Must
FR-033 В сессии shall быть не более одного активного GameInstance Must
FR-034 Завершённая игра shall сохраняться в истории сессии Should

dice_board

ID Требование Приоритет
FR-011 Активный игрок shall бросать 2 кубика (1–6) Must
FR-012 Игрок shall выбирать одну из клеток (d1,d2) или (d2,d1) Must
FR-013 На свободную клетку shall ставиться фишка игрока Must
FR-014 На клетку соперника shall сниматься чужая фишка и ставиться своя Must
FR-015 При дубле на кубиках (d1 = d2) после хода shall выполняться повторный бросок в том же ходу Must
FR-016 Нельзя выбирать клетку со своей фишкой, если есть свободная кандидат-клетка Must
FR-017 Победа shall определяться как 3 фишки в ряд (гор./верт./диаг.) Must
FR-035 Бросок кубиков shall генерироваться сервером (CSPRNG) Must
FR-036 Центр: клетки (3,3), (3,4), (4,3), (4,4) Must
FR-037 При 3 в ряд игра shall завершаться с объявлением победителя Must

Медиа

ID Требование Приоритет
FR-038 media-service shall рендерить PNG/WebP поля для TG Must
FR-039 URL медиа shall быть доступен вебу и боту Must

Каталог игр

ID Требование Приоритет
FR-040 Каталог shall содержать dice_board в v1 Must
FR-041 Недоступные игры shall отображаться как «скоро» Could
FR-051 Каталог shall возвращать все реализованные plugin_id с min/max players Must
FR-052 Недоступные игры should отображаться в лобби как «скоро» с badge сезона Could
FR-053 Плагин should объявлять implementation_tier в metadata каталога Should
FR-054 Tier-3 игры should поддерживать upload медиа ≤ 2 MB Should
FR-055 Tier-2 игры should поддерживать роль Judge Should
FR-056 Coop-плагины should ограничивать подсказки только game actions Should

Администрирование

ID Требование Приоритет
FR-042 Rate limit shall применяться к join по IP/telegram_id Must
FR-043 Система should поддерживать health endpoints на сервисах Should
FR-057 Оператор shall просматривать логи всех игр через админ-панель Must
FR-058 Вход в админ-панель shall требовать OTP из Telegram-бота (/admin login) Must

Telegram-бот

ID Требование Приоритет
FR-044 Бот shall обрабатывать /start, /join, /leave Must
FR-045 Бот shall показывать inline-кнопки для ходов dice_board Must
FR-046 Бот shall использовать FSM для состояний лобби/игры Must

Веб

ID Требование Приоритет
FR-047 Веб shall предоставлять экраны Landing, Join, Lobby, Game Must
FR-048 Поле 6×6 shall быть кликабельным для выбора клетки Must
FR-049 Веб should показывать историю для registered Should
FR-050 UI shall быть адаптивным (mobile-first) Must