Add GitHub rules: copilot-instructions.md and pravila.md
This commit is contained in:
@@ -1,91 +1,63 @@
|
|||||||
# Правила работы агента в этом проекте
|
# Правила
|
||||||
|
|
||||||
## ГЛАВНОЕ ПРАВИЛО
|
## ⛔ ОТВЕЧАТЬ КРАТКО — АБСОЛЮТНОЕ ПРАВИЛО
|
||||||
|
- Вопрос → короткий ответ → СТОП.
|
||||||
|
- Ничего лишнего.
|
||||||
|
- Код — только по запросу.
|
||||||
|
|
||||||
**НЕ "СОВЕРШЕНСТВОВАТЬ" РАБОЧИЙ КОД БЕЗ ЯВНОГО УКАЗАНИЯ.**
|
## ⛔⛔⛔ ВОПРОС = СТОП
|
||||||
|
|
||||||
---
|
**Если в сообщении есть вопрос в ЛЮБОЙ форме** ("так ?", "верно ?", "почему ?", "как ?", "так же ?" и т.д.):
|
||||||
|
1. ТОЛЬКО ответить на вопрос
|
||||||
|
2. ОСТАНОВИТЬСЯ
|
||||||
|
3. ЖДАТЬ следующей команды
|
||||||
|
**ЗАПРЕЩЕНО** начинать работу, писать код, запускать команды — без явного "делай".
|
||||||
|
|
||||||
## ЗАПРЕТ НА ВЫДУМКИ
|
## ⛔⛔⛔ НЕ ТРОГАТЬ РАБОЧИЙ КОД — АБСОЛЮТНЫЙ ЗАПРЕТ НАВСЕГДА
|
||||||
|
|
||||||
**КАТЕГОРИЧЕСКИ ЗАПРЕЩАЕТСЯ придумывать, догадываться или предполагать:**
|
**НИКАКИХ самодеятельных изменений рабочего кода:**
|
||||||
- значения параметров, которые не видны в коде или документации
|
- Никаких "оптимизаций", "улучшений", "рефакторинга" без команды
|
||||||
- допустимые значения enum/ролей/типов — если не взяты из реального источника
|
- Никаких новых фич без явного разрешения
|
||||||
- поведение API, провайдеров, библиотек — если не подтверждено кодом или документацией
|
- Никаких docker/kubectl/helm команд и прочих инфраструктурных изменений без команды
|
||||||
- любые факты о системе, которые агент "знает" из общих соображений
|
- Перед ЛЮБЫМ изменением рабочего кода — объяснить ЗАЧЕМ и ждать "делай"
|
||||||
|
|
||||||
**Если информации нет — спросить у пользователя. Не угадывать.**
|
1. Не трогать рабочий код без явного указания.
|
||||||
|
|
||||||
Если код работает — не трогать. Никаких:
|
2. Файлы редактируются локально:
|
||||||
- рефакторингов "попутно"
|
~/SQS-service
|
||||||
- улучшений стиля
|
|
||||||
- добавления комментариев / docstring
|
|
||||||
- переименований переменных
|
|
||||||
- "пока уж заодно поправлю"
|
|
||||||
|
|
||||||
Делай только то, о чём явно попросили. Ничего лишнего.
|
После ЛЮБЫХ изменений ОБЯЗАТЕЛЬНО синхронизировать на ВМ командой:
|
||||||
|
rsync -az \
|
||||||
|
-e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10" \
|
||||||
|
~/SQS-service/ \
|
||||||
|
naeel@5.172.178.213:~/terra/SQS-service/
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Комментарии в коде
|
3. Git (add/commit/push) выполнять ЛОКАЛЬНО в ~/SQS-service
|
||||||
|
4. Docker, kubectl и другие инфраструктурные команды — только через SSH на ВМ:
|
||||||
|
ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 naeel@5.172.178.213 'КОМАНДА'
|
||||||
|
|
||||||
Комментарии — обязательны:
|
- не выполнять инфраструктурные команды локально
|
||||||
- В начале каждого файла при создании или правке — дата и время изменения
|
- не открывать интерактивные сессии
|
||||||
- На каждой функции/методе — краткое назначение
|
- не делать цепочки без необходимости
|
||||||
- На нетривиальной логике — **почему** сделано именно так (не "что делает", а "зачем")
|
|
||||||
|
|
||||||
Цель: любой агент в новом чате должен понять логику без дополнительных вопросов.
|
4. Перед запуском команд ОБЯЗАТЕЛЬНО убедиться, что синхронизация выполнена.
|
||||||
|
|
||||||
---
|
5. ЗАПРЕЩЕНО:
|
||||||
|
- откатывать код
|
||||||
|
- менять версии
|
||||||
|
- ломать рабочее состояние
|
||||||
|
|
||||||
## Темп работы
|
6. После каждого исправления:
|
||||||
|
- git add/commit ЛОКАЛЬНО
|
||||||
|
- затем синхронизация (rsync) на ВМ
|
||||||
|
|
||||||
Не спешить. Перед каждым шагом — убедиться что предыдущий понят и согласован.
|
## ⛔⛔⛔ ДЕЛАТЬ ТОЛЬКО ЧТО ПРЯМО ПРИКАЗАНО
|
||||||
|
|
||||||
---
|
**АБСОЛЮТНЫЙ ЗАПРЕТ на додумывание:**
|
||||||
|
- Не расширять масштаб работы
|
||||||
|
- Не выполнять "логичные следующие шаги"
|
||||||
|
- Не инициировать дополнительные операции
|
||||||
|
- Не делать ничего кроме того что сказано
|
||||||
|
|
||||||
## Документация
|
**Исключение:** только если приказ явно включает цепочку ("собери И залей И тесты")
|
||||||
|
|
||||||
Всё важное фиксировать в `doc/`:
|
|
||||||
- `doc/architecture/` — архитектура, стек, схемы
|
|
||||||
- `doc/api/` — дизайн API
|
|
||||||
- `doc/decisions/` — принятые решения с обоснованием
|
|
||||||
- `doc/infrastructure/` — инфраструктура, кластер, сервисы
|
|
||||||
- `doc/errors/` — ошибки и как решили
|
|
||||||
- `doc/progress.md` — трекер задач
|
|
||||||
|
|
||||||
Обновлять после каждого значимого изменения.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Именование
|
|
||||||
|
|
||||||
Имена должны быть **уникальными и осмысленными по всему проекту**:
|
|
||||||
- имена файлов
|
|
||||||
- имена функций/методов
|
|
||||||
- имена переменных/констант
|
|
||||||
- имена ресурсов (Terraform, Kubernetes и т.д.)
|
|
||||||
|
|
||||||
Цель: чтобы поиск по проекту находил нужные сущности без неоднозначности, а имя сразу отражало назначение.
|
|
||||||
|
|
||||||
Запрещены безликие и повторяющиеся имена вида `handler.py`, `handle`, `data`, `value`, `temp` без контекста.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Лог мышления (обязательно)
|
|
||||||
|
|
||||||
Каждый агент в каждом чате **обязан** вести лог своих рассуждений:
|
|
||||||
- Папка: `doc/thinking/`
|
|
||||||
- Файл: `ГГГГ-ММ-ДД.md` (по дате сессии)
|
|
||||||
- В начале файла указать имя агента и модель
|
|
||||||
- Если файл на текущую дату уже существует — дописывать в конец, добавив разделитель `---` и имя агента
|
|
||||||
- Записывать **полный** ход мыслей: что анализирую, какие гипотезы, что нашёл, что отбросил, к чему пришёл, почему
|
|
||||||
- Записывать **до** начала действий (план) и **после** (результат)
|
|
||||||
|
|
||||||
Цель: пользователь должен видеть весь процесс рассуждений в читаемом виде.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Git
|
|
||||||
|
|
||||||
Коммитить и пушить после каждого завершённого этапа.
|
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
# Правила работы агента
|
||||||
|
|
||||||
|
## ⛔⛔⛔ DOCKER — ОБЯЗАТЕЛЬНЫЙ ПОРЯДОК ПЕРЕД КАЖДЫМ BUILD
|
||||||
|
|
||||||
|
1. УВЕЛИЧИТЬ ТЕГ в `deployments/k8s/deployment.yaml` (vX.Y.Z → vX.Y.Z+1)
|
||||||
|
2. rsync на ВМ
|
||||||
|
3. ПРОВЕРИТЬ что файлы на ВМ новые (grep ключевой строки)
|
||||||
|
4. docker build с НОВЫМ тегом
|
||||||
|
5. docker push с НОВЫМ тегом
|
||||||
|
6. kubectl apply (не rollout restart — apply подтягивает новый тег)
|
||||||
|
|
||||||
|
**НИКОГДА не делать `docker build` со старым тегом — под не перетянет образ (imagePullPolicy: IfNotPresent)**
|
||||||
|
|
||||||
|
## Файловая система (актуально)
|
||||||
|
|
||||||
|
1. Все файлы редактируются локально: `~/SQS-service`
|
||||||
|
2. После любых изменений — обязательно rsync на ВМ:
|
||||||
|
rsync -az \
|
||||||
|
-e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10" \
|
||||||
|
~/SQS-service/ \
|
||||||
|
naeel@5.172.178.213:~/terra/SQS-service/
|
||||||
|
|
||||||
|
3. Git (add/commit/push) выполнять ЛОКАЛЬНО в ~/SQS-service
|
||||||
|
4. Docker, kubectl и другие инфраструктурные команды — только через SSH на ВМ
|
||||||
|
5. Перед запуском любой команды на ВМ обязательно убедиться, что синхронизация (rsync) выполнена
|
||||||
|
6. SCP, sshfs, remote_dev и маунты больше НЕ используются
|
||||||
|
7. Только rsync для синхронизации
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
1. Редактируешь локально
|
||||||
|
2. rsync на ВМ
|
||||||
|
3. Выполняешь команды через SSH на ВМ
|
||||||
|
|
||||||
|
## SSH
|
||||||
|
|
||||||
|
Все команды — только через SSH на ВМ. Локально — только читать и редактировать файлы.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10 naeel@5.172.178.213 'КОМАНДА'
|
||||||
|
```
|
||||||
|
|
||||||
|
Запрещено локально: `go`, `docker`, `kubectl`, `helm`, `terraform`, `curl/wget`, `git push/pull`, любые скрипты проекта.
|
||||||
|
|
||||||
|
## Документация
|
||||||
|
|
||||||
|
- `doc/` — документация проекта
|
||||||
|
- Обновлять после каждого значимого изменения
|
||||||
|
- Старые файлы `doc/` не перезаписывать — новое в новых файлах с датой
|
||||||
|
|
||||||
|
## Git
|
||||||
|
|
||||||
|
⛔⛔⛔ АБСОЛЮТНОЕ ПРАВИЛО:
|
||||||
|
- Git — ТОЛЬКО ЛОКАЛЬНО в `~/SQS-service`. НИКОГДА через SSH на VM.
|
||||||
|
- Разрешены ТОЛЬКО две операции: `git commit` и `git push`.
|
||||||
|
- ЗАПРЕЩЕНО: git pull, git fetch, git rebase, git merge, git reset, git stash, git checkout — что угодно кроме commit и push.
|
||||||
|
- Если push отклонён — СТОП, доложить пользователю. Не лезть в pull/merge/rebase самостоятельно.
|
||||||
|
|
||||||
|
Версионирование тагами: `vMAJOR.MINOR.PATCH`
|
||||||
|
- Patch — любое изменение кода
|
||||||
|
- Minor — новая фича / компонент
|
||||||
|
- Major — breaking change
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag vX.Y.Z && git push origin vX.Y.Z
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⛔ ТЕРМИНАЛЬНЫЙ БУФЕР — НИКОГДА НЕ ЧИТАТЬ СТАРЫЙ
|
||||||
|
|
||||||
|
**АБСОЛЮТНОЕ ПРАВИЛО:**
|
||||||
|
- get_terminal_output из старых сессий — МУСОР. Там старые прогоны.
|
||||||
|
- Всегда запускать новую команду через SSH и читать её вывод напрямую.
|
||||||
|
- НИКОГДА не читать буфер терминала из предыдущей сессии как актуальные данные.
|
||||||
|
- Актуальный результат — только из команды, которая была запущена СЕЙЧАС.
|
||||||
|
|
||||||
|
## ⛔ ДОКУМЕНТАЦИЯ ТЕСТ-ПРОГОНОВ — В РЕАЛЬНОМ ВРЕМЕНИ
|
||||||
|
|
||||||
|
**Правила:**
|
||||||
|
1. Перед запуском тестов — создать файл `tests/results/YYYY-MM-DD_HH-MM.log` и записать в него метку времени и что запускается.
|
||||||
|
2. Запускать тесты с `2>&1 | tee ~/terra/SQS-service/tests/results/YYYY-MM-DD_HH-MM.log` — вывод пишется сразу в файл и отображается в терминале.
|
||||||
|
3. После завершения — rsync лога локально. Лог остаётся как документация.
|
||||||
|
4. Папка `tests/results/` в репозитории — логи коммитить.
|
||||||
|
|
||||||
|
**Формат запуска:**
|
||||||
|
```bash
|
||||||
|
LOG="tests/results/$(date +%Y-%m-%d_%H-%M).log"
|
||||||
|
ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no naeel@5.172.178.213 \
|
||||||
|
"bash ~/terra/SQS-service/tests/run_tests.sh 2>&1 | tee ~/terra/SQS-service/${LOG}"
|
||||||
|
rsync -az -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no" \
|
||||||
|
naeel@5.172.178.213:~/terra/SQS-service/tests/results/ ~/SQS-service/tests/results/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Никогда не разбираться с результатами по памяти / буферу / чату. Только лог.**
|
||||||
|
|
||||||
|
## ⛔ РУЧНЫЕ ПАТЧИ — ЗАПРЕЩЕНЫ
|
||||||
|
|
||||||
|
- НИКОГДА не применять ручные патчи (`kubectl patch`, `kubectl apply` отдельных полей, `python -c` замены в yaml и т.д.) без явного указания.
|
||||||
|
- Все изменения — только через код (манифесты, Go-код) + сборка + деплой.
|
||||||
|
- Ручной патч слетает при следующем helm upgrade/redeploy → регрессия.
|
||||||
|
- Исключение: только если пользователь явно написал "примени ручной патч".
|
||||||
|
|
||||||
|
## Поведение агента
|
||||||
|
|
||||||
|
- Не трогать рабочий код без явного указания
|
||||||
|
- Не делать НИЧЕГО сверх того, о чём явно приказали — ни git-команд, ни rebase, ни дополнительных шагов
|
||||||
|
- Если для продолжения нужен выбор — СПРОСИТЬ разрешения, не делать самостоятельно
|
||||||
|
- Деструктивные операции (`kubectl delete`, `rm -rf`, `terraform destroy` и др.) — только после явного подтверждения с указанием конкретных объектов
|
||||||
|
- Отвечать кратко, без вступлений, извинений, благодарностей и прочей воды
|
||||||
Reference in New Issue
Block a user