Спасибо, что хотите внести вклад в Telegram Chess Bot! Этот документ описывает, как открывать issue, оформлять PR и какие соглашения мы используем в коде.
🇬🇧 English version below.
- Перед созданием issue — найдите похожее в issues.
- Используйте говорящий заголовок:
[bug] WebSocket теряет подключение после 60 секунд. - Для багов укажите:
- Шаги воспроизведения
- Ожидаемое и фактическое поведение
- Версии (Docker, Telegram-клиент, браузер)
- Логи (
docker compose logs api/frontend)
- Для feature requests опишите проблему, которую вы решаете, и предложите API/UX.
Мы используем GitHub Flow:
- Форкните репозиторий или создайте ветку от
main. - Назовите ветку говоряще:
feat/pvp-mode,fix/ws-reconnect,docs/api-examples. - Делайте маленькие, осмысленные коммиты.
- Перед PR прогоните локально:
# backend ruff check backend/app mypy backend/app # если настроено # frontend cd frontend && npm run build
- Откройте PR в
mainс описанием:- Что меняется и почему
- Как протестировать
- Скриншоты для UI-изменений
- PR должен пройти review и CI (если настроен).
Мы рекомендуем (но не требуем) conventional commits:
feat: add ELO ratingfix(ws): reconnect on 1006 close codedocs(readme): document hint endpointrefactor(engine): extract DifficultyProfilechore(deps): bump aiogram to 3.16
- Python 3.12+, тайпхинты обязательны для публичных функций
- Форматирование:
ruff format(settings совместимы сblack) - Линтер:
ruff check(без--fixв CI) - Никаких голых
except— ловите конкретные исключения - Async-функции не делают блокирующий I/O (без
time.sleep, синхронных HTTP) - Сервисы (
GameService,EnginePool) не должны знать про FastAPI request/response
- Strict mode (
strict: trueвtsconfig) - Функциональные компоненты, без классов
- Бизнес-логика → хуки (
useGameSocket,useTelegram), а не в JSX - Zustand stores маленькие и сфокусированные
- Tailwind utility-classes; глобальные CSS-переменные приходят из Telegram theme
- Backend:
pytest+pytest-asyncio(тесты живут вbackend/tests/) - Каждое исправление бага сопровождайте регрессионным тестом
- Не мокайте
python-chess— это эталон правил шахмат
Не публикуйте уязвимости в публичных issue. Напишите maintainer'у через GitHub profile или сделайте приватный security advisory.
Контрибутя в этот проект, вы соглашаетесь с тем, что ваши изменения будут лицензированы под MIT License.
We use GitHub Flow:
- Fork the repo or branch off
main. - Use descriptive branch names (
feat/pvp-mode,fix/ws-reconnect). - Keep commits small and focused; conventional commits are appreciated.
- Run linters / build locally before opening a PR.
- Open a PR against
mainwith a clear description, test plan, and screenshots for UI changes. - Be polite and follow the Code of Conduct.
For security issues, contact the maintainer privately — do not file a public issue.
By contributing you agree that your work is licensed under the project's MIT License.