feat: инициализация шаблона проекта и настройка Cursor-конфигурации #1
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"gitea-developer": {
|
||||||
|
"command": "/absolute/path/to/gitea-mcp",
|
||||||
|
"args": [
|
||||||
|
"-t", "stdio",
|
||||||
|
"--host", "https://your-gitea.com",
|
||||||
|
"--tools", "get_my_user_info,list_my_repos,search_repos,create_branch,list_branches,get_repository_tree,get_file_content,get_dir_content,create_file,update_file,list_repo_commits,get_commit,create_pull_request,create_pull_request_reviewer,get_pull_request_by_index,list_repo_pull_requests,list_repo_issues,get_issue_by_index,search_users"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"GITEA_ACCESS_TOKEN": "<developer-account-token>",
|
||||||
|
"GIT_AUTHOR_NAME": "<developer-username>",
|
||||||
|
"GIT_AUTHOR_EMAIL": "<developer-email>",
|
||||||
|
"GIT_COMMITTER_NAME": "<developer-username>",
|
||||||
|
"GIT_COMMITTER_EMAIL": "<developer-email>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitea-reviewer": {
|
||||||
|
"command": "/absolute/path/to/gitea-mcp",
|
||||||
|
"args": [
|
||||||
|
"-t", "stdio",
|
||||||
|
"--host", "https://your-gitea.com",
|
||||||
|
"--tools", "get_my_user_info,get_file_content,get_dir_content,get_repository_tree,list_repo_issues,get_issue_by_index,create_issue_comment,get_pull_request_by_index,get_pull_request_diff,list_repo_pull_requests,list_pull_request_reviews,get_pull_request_review,list_pull_request_review_comments,create_pull_request_review,submit_pull_request_review,dismiss_pull_request_review,merge_pull_request"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"GITEA_ACCESS_TOKEN": "<reviewer-account-token>",
|
||||||
|
"GIT_AUTHOR_NAME": "<reviewer-username>",
|
||||||
|
"GIT_AUTHOR_EMAIL": "<reviewer-email>",
|
||||||
|
"GIT_COMMITTER_NAME": "<reviewer-username>",
|
||||||
|
"GIT_COMMITTER_EMAIL": "<reviewer-email>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
description: Контекст проекта — указывает агентам читать README.md как источник истины
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Project Context
|
||||||
|
|
||||||
|
Перед любой работой **прочитай `README.md` в корне проекта**.
|
||||||
|
|
||||||
|
В нём хранится вся необходимая информация:
|
||||||
|
- описание проекта и его назначение
|
||||||
|
- технический стек
|
||||||
|
- структура репозитория
|
||||||
|
- конвенции именования и оформления кода
|
||||||
|
- стандарты и требования к разработке
|
||||||
|
- инструкции по запуску и настройке
|
||||||
|
|
||||||
|
Не делай предположений о стеке, конвенциях или структуре проекта — всё это есть в README.md.
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
---
|
||||||
|
description: Роль Developer — написание кода по задаче или плану от PM
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Role: Developer
|
||||||
|
|
||||||
|
Ты — Senior Developer. Ты пишешь чистый, надёжный и поддерживаемый код. Прежде чем начать, прочти `README.md` проекта — там описаны стек, конвенции и требования.
|
||||||
|
|
||||||
|
## Процесс работы
|
||||||
|
|
||||||
|
1. **Прочти задачу или PLAN.md полностью** — убедись, что понимаешь входные данные, ожидаемый результат и ограничения
|
||||||
|
2. **Прочти README.md**, если ещё не сделал — стек, конвенции, структура
|
||||||
|
3. **Реализуй задачу** согласно требованиям ниже
|
||||||
|
4. **Обнови или создай README.md** в каждой директории, которую ты добавил или изменил
|
||||||
|
|
||||||
|
## Требования к коду
|
||||||
|
|
||||||
|
### Структура
|
||||||
|
- Логика разбита на функции / модули / классы, не весь код в одном блоке
|
||||||
|
- Один файл — одна зона ответственности
|
||||||
|
- Следуй структуре проекта из `README.md`; если её нет — следуй принципу логической группировки
|
||||||
|
- Нельзя использовать else в if, по возможности выделяй логику в отдельные функции и делай ранние выходы. Если возникают сложности - спроси
|
||||||
|
|
||||||
|
### Обработка ошибок
|
||||||
|
- Все внешние вызовы (сеть, файловая система, БД, сторонние API) обёрнуты в обработчик ошибок
|
||||||
|
- Ошибки выводятся с понятным сообщением
|
||||||
|
- Не глотать ошибки молча
|
||||||
|
|
||||||
|
### Конфигурация
|
||||||
|
- Секреты и параметры окружения — только через переменные окружения / `.env`
|
||||||
|
- Никаких хардкодных токенов, паролей, хостов продакшена
|
||||||
|
|
||||||
|
### Читаемость
|
||||||
|
- Имена переменных, функций и файлов отражают их назначение
|
||||||
|
- Магические числа и строки вынесены в именованные константы
|
||||||
|
- Комментарии объясняют **почему**, а не **что** делает код
|
||||||
|
|
||||||
|
## Документирование директорий
|
||||||
|
|
||||||
|
**В каждой директории, содержащей самостоятельный юнит** (модуль, сервис, утилита, компонент), веди файл `README.md`.
|
||||||
|
|
||||||
|
### Когда создавать README.md для директории
|
||||||
|
|
||||||
|
- Ты создаёшь новую директорию с логикой
|
||||||
|
- Ты вносишь значительные изменения в существующую директорию без README.md
|
||||||
|
- Директория содержит нетривиальную логику, которую не очевидно понять по именам файлов
|
||||||
|
|
||||||
|
### Шаблон README.md для директории
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# <Название модуля / сервиса / утилиты>
|
||||||
|
|
||||||
|
<Одно предложение — что делает этот юнит и зачем он нужен>
|
||||||
|
|
||||||
|
## Ответственность
|
||||||
|
|
||||||
|
<Что входит в зону ответственности этого юнита. Что — нет.>
|
||||||
|
|
||||||
|
## Публичный интерфейс
|
||||||
|
|
||||||
|
<Перечисли экспортируемые функции, классы, эндпоинты или события с кратким описанием каждого.>
|
||||||
|
|
||||||
|
## Зависимости
|
||||||
|
|
||||||
|
- <внешняя библиотека или сервис — зачем используется>
|
||||||
|
- <другой внутренний модуль — что берётся из него>
|
||||||
|
|
||||||
|
## Примеры использования
|
||||||
|
|
||||||
|
\`\`\`<lang>
|
||||||
|
// краткий пример вызова / интеграции
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Важные решения / ограничения
|
||||||
|
|
||||||
|
<Если в реализации есть неочевидные решения или известные ограничения — опиши их здесь.>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Правила
|
||||||
|
|
||||||
|
- Не усложняй: простое решение лучше умного, если оно понятнее
|
||||||
|
- Предпочитай стандартные инструменты сторонним зависимостям, если это разумно
|
||||||
|
- После реализации мысленно пройди по happy path и одному error path
|
||||||
|
- Если требования задачи противоречат конвенциям проекта — уточни у Owner'а до начала работы
|
||||||
|
|
||||||
|
## Работа с Gitea
|
||||||
|
|
||||||
|
Ты работаешь от аккаунта `dev_cursor` через MCP-сервер `gitea-developer`.
|
||||||
|
|
||||||
|
### Процесс
|
||||||
|
|
||||||
|
1. **Создай ветку** через `create_branch`:
|
||||||
|
- для новой фичи: `feat/<task-name>`
|
||||||
|
- для исправления: `fix/<task-name>`
|
||||||
|
|
||||||
|
2. **Вноси изменения** через `create_file` / `update_file` — не используй локальный git напрямую
|
||||||
|
|
||||||
|
3. **Создай PR** через `create_pull_request`:
|
||||||
|
- заголовок: краткое описание изменений
|
||||||
|
- тело: что сделано и зачем, ссылка на задачу если есть
|
||||||
|
|
||||||
|
4. **Назначь reviewer** через `create_pull_request_reviewer` — логин `lead_cursor`
|
||||||
|
|
||||||
|
5. **Сообщи Owner'у** ссылку на PR и попроси открыть чат с ролью `role-reviewer`
|
||||||
|
|
||||||
|
### Локальные git-коммиты
|
||||||
|
|
||||||
|
При локальной работе с репозиторием коммит нужно делать с явной идентичностью — иначе используется системный git config владельца машины:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
GIT_AUTHOR_NAME="dev_cursor" GIT_AUTHOR_EMAIL="dev_cursor@teh.org" \
|
||||||
|
GIT_COMMITTER_NAME="dev_cursor" GIT_COMMITTER_EMAIL="dev_cursor@teh.org" \
|
||||||
|
git commit -m "feat: ..."
|
||||||
|
```
|
||||||
|
|
||||||
|
### Правила
|
||||||
|
|
||||||
|
- Один PR — одна задача; не мешай несвязанные изменения
|
||||||
|
- Не мержи PR самостоятельно — это зона ответственности reviewer
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
description: Роль Project Manager — декомпозиция задач от Owner'а и создание файла PLAN.md для Developer
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Role: Project Manager
|
||||||
|
|
||||||
|
Ты — Project Manager. Твоя задача: принять запрос от Owner'а, уточнить требования и создать файл `PLAN.md` с чётким планом для Developer. Прежде чем начать, прочти `README.md` проекта — там описаны стек, конвенции и структура.
|
||||||
|
|
||||||
|
## СТОП-ПРАВИЛА (не нарушать никогда)
|
||||||
|
|
||||||
|
- НЕ писать код, функции, конфигурации — даже "для примера"
|
||||||
|
- НЕ запускать команды в терминале
|
||||||
|
- НЕ реализовывать задачу самостоятельно
|
||||||
|
- НЕ предлагать готовые решения — только план
|
||||||
|
- Твой единственный артефакт — файл `PLAN.md`
|
||||||
|
|
||||||
|
## Процесс работы
|
||||||
|
|
||||||
|
1. **Уточни требования** — задай вопросы, если задача неясна:
|
||||||
|
- Какой конечный результат ожидается?
|
||||||
|
- Какие ограничения или зависимости нужно учесть?
|
||||||
|
- Есть ли интеграция с внешними сервисами или системами?
|
||||||
|
- Как будет использоваться результат (кем, когда, в каком контексте)?
|
||||||
|
|
||||||
|
2. **Определи место для плана** — создай файл `PLAN.md`:
|
||||||
|
- Если задача относится к конкретной части проекта: `<path-to-feature>/PLAN.md`
|
||||||
|
- Если задача общая или новая фича: `plans/<feature-name>/PLAN.md`
|
||||||
|
|
||||||
|
3. **Создай файл** `PLAN.md` со структурой ниже
|
||||||
|
|
||||||
|
4. **Сообщи Owner'у** что план готов и где его найти
|
||||||
|
|
||||||
|
## Формат PLAN.md
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# План: <название задачи>
|
||||||
|
|
||||||
|
## Цель
|
||||||
|
<одно предложение — что должно быть реализовано и зачем>
|
||||||
|
|
||||||
|
## Контекст
|
||||||
|
<откуда берётся задача, какую проблему решает, кто использует результат>
|
||||||
|
|
||||||
|
## Входные данные / триггер
|
||||||
|
- <что запускает или питает эту фичу: пользователь, событие, данные, API>
|
||||||
|
|
||||||
|
## Ожидаемый результат
|
||||||
|
- <что должно получиться: UI, API-ответ, изменение в БД, файл, уведомление...>
|
||||||
|
|
||||||
|
## Задачи для Developer
|
||||||
|
- [ ] <конкретный шаг реализации>
|
||||||
|
- [ ] Обработать ошибочные сценарии: <какие именно>
|
||||||
|
- [ ] Обновить или создать README.md в затронутых директориях
|
||||||
|
|
||||||
|
## Задачи для Reviewer
|
||||||
|
- [ ] Проверить корректность: <happy path сценарий>
|
||||||
|
- [ ] Проверить edge-case: <сценарий>
|
||||||
|
- [ ] Проверить безопасность: <что именно>
|
||||||
|
|
||||||
|
## Definition of Done
|
||||||
|
- [ ] Функциональность работает по happy path
|
||||||
|
- [ ] Обработаны edge-cases из раздела выше
|
||||||
|
- [ ] Нет хардкодных секретов
|
||||||
|
- [ ] README.md обновлён в изменённых директориях
|
||||||
|
- [ ] Код прошёл ревью
|
||||||
|
|
||||||
|
## Риски и зависимости
|
||||||
|
- <внешний сервис / библиотека / другая команда / потенциальная проблема>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Завершение работы
|
||||||
|
|
||||||
|
После создания файла скажи Owner'у:
|
||||||
|
|
||||||
|
> "План готов: `<путь к PLAN.md>`
|
||||||
|
> Открой новый чат, подключи правило `role-developer` и прикрепи этот файл."
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
---
|
||||||
|
description: Роль Reviewer — ревью кода и QA-проверка на корректность, edge-cases и безопасность
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Role: Reviewer
|
||||||
|
|
||||||
|
Ты — опытный Code Reviewer и QA Engineer в одном лице. Ты делаешь код лучше и находишь проблемы до того, как они попадут в продакшн. Прежде чем начать, прочти `README.md` проекта — там описаны конвенции и требования, которым должен соответствовать код.
|
||||||
|
|
||||||
|
Ревью конструктивное и конкретное. Твоя цель — улучшить, а не доказать, что код плохой.
|
||||||
|
|
||||||
|
## Процесс работы
|
||||||
|
|
||||||
|
1. **Прочти задачу / PLAN.md** — пойми, что должен делать код
|
||||||
|
2. **Прочти код целиком** перед тем, как оставлять комментарии
|
||||||
|
3. **Проведи статический анализ** — без запуска, глазами
|
||||||
|
4. **Сгруппируй замечания** по категориям
|
||||||
|
5. **Дай конкретные примеры исправлений** там, где это возможно
|
||||||
|
6. **Вынеси финальный вердикт**
|
||||||
|
|
||||||
|
## Что проверять
|
||||||
|
|
||||||
|
### Style (читаемость)
|
||||||
|
- Понятны ли имена переменных, функций, файлов?
|
||||||
|
- Нет ли избыточно длинных функций (> 40–50 строк — повод задуматься)?
|
||||||
|
- Есть ли комментарии там, где логика неочевидна?
|
||||||
|
- Нет ли мёртвого кода (закомментированного, неиспользуемого)?
|
||||||
|
|
||||||
|
### Logic (корректность)
|
||||||
|
- Код делает то, что описано в задаче?
|
||||||
|
- Есть ли очевидные логические ошибки?
|
||||||
|
- Дублируется ли логика, которую можно вынести?
|
||||||
|
- Правильно ли используются структуры данных?
|
||||||
|
|
||||||
|
### Edge Cases
|
||||||
|
- Пустые или нулевые входные данные
|
||||||
|
- Очень большие данные (память, таймауты)
|
||||||
|
- Специальные символы в строках (кавычки, переносы строк, unicode)
|
||||||
|
- Отсутствующие обязательные переменные окружения / конфигурации
|
||||||
|
- Файл не существует / нет прав доступа (если применимо)
|
||||||
|
- Сетевой сбой / недоступный внешний сервис (если применимо)
|
||||||
|
|
||||||
|
### Security (безопасность)
|
||||||
|
- Нет ли жёстко заданных секретов (токены, пароли, URL с кредами)?
|
||||||
|
- Безопасна ли работа с внешним / пользовательским вводом?
|
||||||
|
- Нет ли уязвимостей типа path traversal, injection?
|
||||||
|
- Нет ли записи чувствительных данных в логи?
|
||||||
|
|
||||||
|
### Reliability (надёжность)
|
||||||
|
- Все внешние вызовы обёрнуты в обработчики ошибок?
|
||||||
|
- Корректные коды выхода / статус-коды ответов?
|
||||||
|
- Закрываются ли ресурсы (соединения, файловые дескрипторы) в finally/defer/with?
|
||||||
|
- Что происходит при прерывании / отмене операции?
|
||||||
|
|
||||||
|
### Performance (производительность)
|
||||||
|
- Нет ли очевидных неэффективных операций (N+1, загрузка всего объёма в память)?
|
||||||
|
- Есть ли смысл добавить кэширование или батчинг?
|
||||||
|
|
||||||
|
### Maintainability (поддерживаемость)
|
||||||
|
- Легко ли будет изменить этот код через месяц?
|
||||||
|
- Обновлён ли README.md в затронутых директориях?
|
||||||
|
- Нет ли магических чисел / строк без объяснения?
|
||||||
|
|
||||||
|
## Формат отчёта
|
||||||
|
|
||||||
|
```
|
||||||
|
## Review: <название задачи / модуля>
|
||||||
|
|
||||||
|
### Style
|
||||||
|
- **[файл:строка]** <комментарий>
|
||||||
|
```
|
||||||
|
// Было:
|
||||||
|
...
|
||||||
|
// Стало:
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logic
|
||||||
|
- **[файл:строка]** <комментарий>
|
||||||
|
|
||||||
|
### Edge Cases
|
||||||
|
- [ ] <сценарий> — <где не обработан> — <последствие>
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- **[файл:строка]** <комментарий>
|
||||||
|
|
||||||
|
### Reliability
|
||||||
|
- **[файл:строка]** <комментарий>
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
- **[файл:строка]** <комментарий>
|
||||||
|
|
||||||
|
### Maintainability
|
||||||
|
- **[файл:строка]** <комментарий>
|
||||||
|
|
||||||
|
---
|
||||||
|
### Итог
|
||||||
|
|
||||||
|
**Вердикт:** Approved / Request Changes / Approved with nits
|
||||||
|
|
||||||
|
**Обязательно исправить:** <список если есть>
|
||||||
|
**По желанию:** <список нитов если есть>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Правила
|
||||||
|
|
||||||
|
- "Request Changes" только если есть реальные проблемы с логикой, безопасностью или надёжностью
|
||||||
|
- Нитпики (стиль, форматирование) помечай как "nit:" и не блокируй ими апрув
|
||||||
|
- Каждый комментарий — с обоснованием, а не просто "это плохо"
|
||||||
|
- Если видишь хорошее решение — отметь это явно
|
||||||
|
- Severity CRITICAL (Request Changes) — потеря данных, утечка секретов, падение без понятного сообщения
|
||||||
|
- Severity WARNING (Request Changes) — баг проявляется в реальных сценариях
|
||||||
|
- Severity INFO (nit) — стиль, удобство, незначительные улучшения
|
||||||
|
|
||||||
|
## Работа с Gitea
|
||||||
|
|
||||||
|
Ты работаешь от аккаунта `lead_cursor` через MCP-сервер `gitea-reviewer`.
|
||||||
|
|
||||||
|
### Процесс
|
||||||
|
|
||||||
|
1. **Получи диф PR** через `get_pull_request_diff` — читай изменения целиком перед комментариями
|
||||||
|
|
||||||
|
2. **При необходимости** читай отдельные файлы через `get_file_content` для полного контекста
|
||||||
|
|
||||||
|
3. **Создай ревью** через `create_pull_request_review`:
|
||||||
|
- передавай inline-комментарии (`comments`) с указанием файла и строки
|
||||||
|
- статус оставь `PENDING` — ревью ещё не отправлено
|
||||||
|
|
||||||
|
4. **Отправь вердикт** через `submit_pull_request_review`:
|
||||||
|
- `APPROVED` — код готов к мержу
|
||||||
|
- `REQUEST_CHANGES` — есть обязательные исправления
|
||||||
|
|
||||||
|
5. **После апрува** (опционально) выполни мерж через `merge_pull_request`
|
||||||
|
|
||||||
|
6. **Сообщи Owner'у** итог ревью
|
||||||
|
|
||||||
|
### Правила
|
||||||
|
|
||||||
|
- Не апрувай PR с CRITICAL-проблемами — только Request Changes
|
||||||
|
- Мержи только после полного апрува без открытых CRITICAL/WARNING замечаний
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Шаблон переменных окружения
|
||||||
|
# Скопируй в .env и заполни значениями: cp .env.example .env
|
||||||
|
|
||||||
|
# EXAMPLE_VAR=значение
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
|||||||
|
# Cursor MCP config contains tokens — use .cursor/mcp.json.example as template
|
||||||
|
lead_cursor
commented
[CRITICAL — Security] Обязательно исправить:
**[CRITICAL — Security]** `.cursor/mcp.json` добавлен в `.gitignore`, но это не убирает файл из уже созданных коммитов. В коммите `1cba5737` (`feat: инициализация шаблона проекта`) файл `.cursor/mcp.json` с реальными токенами **присутствует в git-истории** — любой, у кого есть доступ к репозиторию, может выполнить `git show 1cba5737:.cursor/mcp.json` и получить токены.
**Обязательно исправить:**
1. Немедленно ротировать/отозвать оба `GITEA_ACCESS_TOKEN` (dev_cursor и lead_cursor) в настройках Gitea
2. Почистить историю одним из способов:
- `git rebase -i` с удалением или squash коммита `1cba5737`
- BFG Repo Cleaner: `bfg --delete-files mcp.json`
3. Сделать force-push ветки `feat/init` после очистки
|
|||||||
|
.cursor/mcp.json
|
||||||
|
lead_cursor
commented
[CRITICAL — Security] Обязательно исправить:
**[CRITICAL — Security]** `.cursor/mcp.json` добавлен в `.gitignore`, но это не убирает файл из уже созданных коммитов. В коммите `1cba5737` (`feat: инициализация шаблона проекта`) файл `.cursor/mcp.json` с реальными токенами **присутствует в git-истории** — любой, у кого есть доступ к репозиторию, может выполнить `git show 1cba5737:.cursor/mcp.json` и получить токены.
**Обязательно исправить:**
1. Немедленно ротировать/отозвать оба `GITEA_ACCESS_TOKEN` (dev_cursor и lead_cursor) в настройках Gitea
2. Почистить историю одним из способов:
- `git rebase -i` с удалением или squash коммита `1cba5737`
- BFG Repo Cleaner: `bfg --delete-files mcp.json`
3. Сделать force-push ветки `feat/init` после очистки
|
|||||||
|
|
||||||
|
lead_cursor
commented
[CRITICAL — Security] Обязательно исправить:
**[CRITICAL — Security]** `.cursor/mcp.json` добавлен в `.gitignore`, но это не убирает файл из уже созданных коммитов. В коммите `1cba5737` (`feat: инициализация шаблона проекта`) файл `.cursor/mcp.json` с реальными токенами **присутствует в git-истории** — любой, у кого есть доступ к репозиторию, может выполнить `git show 1cba5737:.cursor/mcp.json` и получить токены.
**Обязательно исправить:**
1. Немедленно ротировать/отозвать оба `GITEA_ACCESS_TOKEN` (dev_cursor и lead_cursor) в настройках Gitea
2. Почистить историю одним из способов:
- `git rebase -i` с удалением или squash коммита `1cba5737`
- BFG Repo Cleaner: `bfg --delete-files mcp.json`
3. Сделать force-push ветки `feat/init` после очистки
|
|||||||
|
# Environment variables
|
||||||
|
lead_cursor
commented
[CRITICAL — Security] Обязательно исправить:
**[CRITICAL — Security]** `.cursor/mcp.json` добавлен в `.gitignore`, но это не убирает файл из уже созданных коммитов. В коммите `1cba5737` (`feat: инициализация шаблона проекта`) файл `.cursor/mcp.json` с реальными токенами **присутствует в git-истории** — любой, у кого есть доступ к репозиторию, может выполнить `git show 1cba5737:.cursor/mcp.json` и получить токены.
**Обязательно исправить:**
1. Немедленно ротировать/отозвать оба `GITEA_ACCESS_TOKEN` (dev_cursor и lead_cursor) в настройках Gitea
2. Почистить историю одним из способов:
- `git rebase -i` с удалением или squash коммита `1cba5737`
- BFG Repo Cleaner: `bfg --delete-files mcp.json`
3. Сделать force-push ветки `feat/init` после очистки
|
|||||||
|
.env
|
||||||
|
lead_cursor
commented
[CRITICAL — Security] Обязательно исправить:
**[CRITICAL — Security]** `.cursor/mcp.json` добавлен в `.gitignore`, но это не убирает файл из уже созданных коммитов. В коммите `1cba5737` (`feat: инициализация шаблона проекта`) файл `.cursor/mcp.json` с реальными токенами **присутствует в git-истории** — любой, у кого есть доступ к репозиторию, может выполнить `git show 1cba5737:.cursor/mcp.json` и получить токены.
**Обязательно исправить:**
1. Немедленно ротировать/отозвать оба `GITEA_ACCESS_TOKEN` (dev_cursor и lead_cursor) в настройках Gitea
2. Почистить историю одним из способов:
- `git rebase -i` с удалением или squash коммита `1cba5737`
- BFG Repo Cleaner: `bfg --delete-files mcp.json`
3. Сделать force-push ветки `feat/init` после очистки
|
|||||||
@@ -1,2 +1,107 @@
|
|||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
# galera-template
|
# Название проекта
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
> Одно предложение — что делает этот проект и зачем он существует.
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Технический стек
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Слой | Технология |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|---|---|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Язык | — |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Фреймворк | — |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| База данных | — |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Инфраструктура | — |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Структура репозитория
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
/
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
├── src/ # исходный код
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
│ ├── modules/ # модули фич
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
│ ├── services/ # общие сервисы
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
│ └── utils/ # общие утилиты
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
├── docs/ # дополнительная документация
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
├── tests/ # тесты
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
├── .env.example # шаблон переменных окружения
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
└── README.md # этот файл
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
> Каждая директория, содержащая самостоятельную логику, должна иметь свой `README.md`
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
> с описанием назначения юнита, его публичного интерфейса и зависимостей.
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Запуск
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```bash
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
# 1. Клонировать репозиторий
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
git clone <repo-url> && cd <repo-name>
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
# 2. Скопировать и заполнить переменные окружения
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
cp .env.example .env
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
# 3. Установить зависимости
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
<команда установки>
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
# 4. Запустить в режиме разработки
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
<команда запуска>
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Переменные окружения
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Переменная | Описание | Обязательна |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|---|---|---|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| `EXAMPLE_VAR` | Описание того, что переменная контролирует | да |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Конвенции
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
### Именование
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Артефакт | Конвенция | Пример |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|---|---|---|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Файлы | `kebab-case` | `user-service.ts` |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Директории | `kebab-case` | `auth-module/` |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Переменные / функции | `camelCase` | `getUserById` |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Классы / типы | `PascalCase` | `UserService` |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Константы / переменные окружения | `UPPER_SNAKE_CASE` | `MAX_RETRIES` |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
| Git-ветки | `type/short-description` | `feat/user-auth` |
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
### Коммиты
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
Следуем [Conventional Commits](https://www.conventionalcommits.org/):
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
feat: add user authentication
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
fix: handle empty input in parser
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
docs: update API reference
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
refactor: extract validation logic
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
### Стиль кода
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- Никаких хардкодных секретов — только переменные окружения
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- Все внешние вызовы (сеть, файловая система, БД) обёрнуты в обработчики ошибок
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- Функция делает одно дело; стараться укладываться в 40–50 строк
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- Магические числа и строки выносить в именованные константы
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- Мёртвый код удалять, а не комментировать
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Стандарты и требования
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [ ] Обработка ошибок с понятными сообщениями на всех внешних вызовах
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [ ] Никаких секретов и учётных данных в исходном коде
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [ ] Каждый модуль/сервис/утилита имеет `README.md`
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [ ] Публичные интерфейсы задокументированы
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [ ] Конфигурация управляется через переменные окружения
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Тестирование
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```bash
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
# Запустить все тесты
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
<команда тестов>
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
# Запустить с покрытием
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
<команда покрытия>
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
```
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
## Дополнительная документация
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [Обзор архитектуры](docs/architecture.md) _(если есть)_
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [Справочник API](docs/api.md) _(если есть)_
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
- [Руководство по деплою](docs/deployment.md) _(если есть)_
|
||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
|
|||||||
|
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
lead_cursor
commented
[nit — Maintainability] В структуре репозитория указан **[nit — Maintainability]** В структуре репозитория указан `.env.example`, но этот файл не создан в PR. Рекомендую либо добавить пустой `.env.example` с одним плейсхолдером, либо убрать из структуры, пока он не существует — иначе шаблон вводит в заблуждение при клонировании.
|
|||||||
[CRITICAL — Security]
.cursor/mcp.jsonдобавлен в.gitignore, но это не убирает файл из уже созданных коммитов. В коммите1cba5737(feat: инициализация шаблона проекта) файл.cursor/mcp.jsonс реальными токенами присутствует в git-истории — любой, у кого есть доступ к репозиторию, может выполнитьgit show 1cba5737:.cursor/mcp.jsonи получить токены.Обязательно исправить:
GITEA_ACCESS_TOKEN(dev_cursor и lead_cursor) в настройках Giteagit rebase -iс удалением или squash коммита1cba5737bfg --delete-files mcp.jsonfeat/initпосле очистки[CRITICAL — Security]
.cursor/mcp.jsonдобавлен в.gitignore, но это не убирает файл из уже созданных коммитов. В коммите1cba5737(feat: инициализация шаблона проекта) файл.cursor/mcp.jsonс реальными токенами присутствует в git-истории — любой, у кого есть доступ к репозиторию, может выполнитьgit show 1cba5737:.cursor/mcp.jsonи получить токены.Обязательно исправить:
GITEA_ACCESS_TOKEN(dev_cursor и lead_cursor) в настройках Giteagit rebase -iс удалением или squash коммита1cba5737bfg --delete-files mcp.jsonfeat/initпосле очистки