ReviewBot/requirements.md
2026-02-20 21:13:10 +03:00

86 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Требования к боту CodeReview
> Составлено на основе встречи 18.02.2026
---
## 1. Назначение
Telegram-бот для автоматизации процесса Code Review: назначение ревьюеров, уведомления и балансировка нагрузки внутри команды.
---
## 2. Функциональные требования
### 2.1 Регистрация пользователей
- Каждый участник команды должен самостоятельно зарегистрироваться в боте (написать `/start` или аналогичную команду), чтобы бот мог отправлять личные сообщения.
- При регистрации пользователь указывает свой **email-адрес из Git** — это необходимо для связки аккаунта Gitea с аккаунтом Telegram.
- Без регистрации бот не может писать пользователю в ЛС (ограничение Telegram API).
### 2.2 Автоматическое назначение ревьюеров
- При создании Pull Request (PR) бот автоматически назначает ревьюера, если он не был указан вручную.
- Автор PR **исключается** из пула кандидатов.
- Участники, указавшие период недоступности, также исключаются из пула на это время.
- Если бот назначил ревьюера (а не пользователь вручную), на PR автоматически **вешается лейбл** (например, `auto-assigned`).
### 2.3 Уведомления
- Бот отправляет уведомления **в личные сообщения**, а не в общий чат, чтобы не создавать шум.
- Уведомления отправляются в следующих случаях:
- назначение ревьюером на PR;
- появление новых комментариев в PR, где пользователь является автором или ревьюером;
- добавление новых коммитов в PR, назначенный на пользователя (например, после запроса правок);
- изменение статуса PR (approved, changes requested, merged, closed).
### 2.4 Балансировка нагрузки
- Бот ведёт счётчик активных (открытых) ревью для каждого участника.
- При выборе ревьюера назначается тот, у кого наименьшее количество активных ревью.
- Если несколько участников имеют одинаковую нагрузку — выбор между ними происходит **случайно**.
- Автор PR и недоступные участники в расчёт не включаются.
### 2.5 Управление доступностью
- Пользователь может указать период недоступности через команду бота (например, `/away 2026-03-01 2026-03-10`).
- В этот период пользователь не получает назначений на ревью.
- По истечении периода пользователь автоматически возвращается в пул.
### 2.6 Напоминания (пинги)
- Бот автоматически напоминает ревьюеру о висящих (не закрытых) PR.
- Каждый пользователь **самостоятельно настраивает время напоминаний** через команду бота (например, `/reminder 09:00`).
- Периодичность: ежедневно, пока PR не закрыт или не смержен.
---
## 3. Интеграции
| Интеграция | Описание |
|---|---|
| Gitea API | Получение событий PR (создание, комментарии, статус), назначение ревьюеров и простановка лейблов через API |
| Telegram Bot API | Отправка личных сообщений пользователям |
- Токены и доступ к Gitea API предоставляет Андрей Епифанцев.
---
## 4. Нефункциональные требования
- Бот пишет только в **личные сообщения**, общий чат не используется.
- Бот должен корректно обрабатывать ситуации, когда пользователь не зарегистрирован (логировать, не падать).
- Статус задачи: **side quest** — разрабатывается в свободное время.
---
## 5. MVP (минимально жизнеспособный продукт)
Для первого запуска достаточно:
1. Регистрация пользователя в боте с указанием Gitea email.
2. Webhook от Gitea: при создании PR без ревьюера — назначить участника с наименьшим числом активных ревью (исключая автора; при равной нагрузке — случайный выбор).
3. Уведомление назначенного ревьюера в Telegram ЛС.
4. Напоминание о висящих PR — единое время для всей команды (настраивается глобально).