diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 0747353..5b8a9b3 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,91 +1,63 @@ -# Правила работы агента в этом проекте +# Правила -## ГЛАВНОЕ ПРАВИЛО +## ⛔ ОТВЕЧАТЬ КРАТКО — АБСОЛЮТНОЕ ПРАВИЛО +- Вопрос → короткий ответ → СТОП. +- Ничего лишнего. +- Код — только по запросу. -**НЕ "СОВЕРШЕНСТВОВАТЬ" РАБОЧИЙ КОД БЕЗ ЯВНОГО УКАЗАНИЯ.** +## ⛔⛔⛔ ВОПРОС = СТОП ---- +**Если в сообщении есть вопрос в ЛЮБОЙ форме** ("так ?", "верно ?", "почему ?", "как ?", "так же ?" и т.д.): +1. ТОЛЬКО ответить на вопрос +2. ОСТАНОВИТЬСЯ +3. ЖДАТЬ следующей команды +**ЗАПРЕЩЕНО** начинать работу, писать код, запускать команды — без явного "делай". -## ЗАПРЕТ НА ВЫДУМКИ +## ⛔⛔⛔ НЕ ТРОГАТЬ РАБОЧИЙ КОД — АБСОЛЮТНЫЙ ЗАПРЕТ НАВСЕГДА -**КАТЕГОРИЧЕСКИ ЗАПРЕЩАЕТСЯ придумывать, догадываться или предполагать:** -- значения параметров, которые не видны в коде или документации -- допустимые значения enum/ролей/типов — если не взяты из реального источника -- поведение API, провайдеров, библиотек — если не подтверждено кодом или документацией -- любые факты о системе, которые агент "знает" из общих соображений +**НИКАКИХ самодеятельных изменений рабочего кода:** +- Никаких "оптимизаций", "улучшений", "рефакторинга" без команды +- Никаких новых фич без явного разрешения +- Никаких docker/kubectl/helm команд и прочих инфраструктурных изменений без команды +- Перед ЛЮБЫМ изменением рабочего кода — объяснить ЗАЧЕМ и ждать "делай" -**Если информации нет — спросить у пользователя. Не угадывать.** +1. Не трогать рабочий код без явного указания. -Если код работает — не трогать. Никаких: -- рефакторингов "попутно" -- улучшений стиля -- добавления комментариев / docstring -- переименований переменных -- "пока уж заодно поправлю" +2. Файлы редактируются локально: + ~/SQS-service -Делай только то, о чём явно попросили. Ничего лишнего. + После ЛЮБЫХ изменений ОБЯЗАТЕЛЬНО синхронизировать на ВМ командой: + 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 - -Коммитить и пушить после каждого завершённого этапа. +**Исключение:** только если приказ явно включает цепочку ("собери И залей И тесты") diff --git a/.github/pravila.md b/.github/pravila.md new file mode 100644 index 0000000..43aa315 --- /dev/null +++ b/.github/pravila.md @@ -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` и др.) — только после явного подтверждения с указанием конкретных объектов +- Отвечать кратко, без вступлений, извинений, благодарностей и прочей воды