# Правила работы агента ## ⛔⛔⛔ НИКАКИХ ПРЕДПОЛОЖЕНИЙ — ТОЛЬКО ФАКТЫ **АБСОЛЮТНОЕ ПРАВИЛО:** - Не выдавать предположения/допущения за факты. - Говорить только то, что ПРОВЕРЕНО (прочитано, выполнено, подтверждено). - Если не проверено — прямо писать «не проверено», не додумывать. - Не строить выводы о реальном состоянии системы на основе манифестов/доков. ## ⛔⛔⛔ ВОПРОС = СТОП **Если в сообщении есть вопрос в ЛЮБОЙ форме:** 1. ТОЛЬКО ответить на вопрос 2. ОСТАНОВИТЬСЯ 3. ЖДАТЬ следующей команды **ЗАПРЕЩЕНО** начинать работу, писать код, запускать команды — без явного "делай". ## ⛔⛔⛔ DOCKER — ОБЯЗАТЕЛЬНЫЙ ПОРЯДОК ПЕРЕД КАЖДЫМ BUILD > ⚠️ ЛЕГАСИ — старый k8s-деплой (kubectl apply). Уходим на Nubes Managed. ЭТИМ НЕ РУКОВОДСТВОВАТЬСЯ. 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. Все файлы редактируются локально: `/home/naeel/nubes/SQS-service` 2. После любых изменений — обязательно rsync на ВМ: rsync -az \ -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10" \ /home/naeel/nubes/SQS-service/ \ naeel@5.172.178.213:~/terra/SQS-service/ 3. Git (add/commit/push) выполнять ЛОКАЛЬНО. После пуша — ОБЯЗАТЕЛЬНО синк на ВМ (rsync). 4. Docker, kubectl и другие инфраструктурные команды — только через SSH на ВМ 5. Перед запуском любой команды на ВМ обязательно убедиться, что синхронизация (rsync) выполнена 6. SCP, sshfs, remote_dev и маунты больше НЕ используются 7. Только rsync для синхронизации Пример: 1. Редактируешь локально 2. git add/commit/push ЛОКАЛЬНО 3. rsync на ВМ (после пуша) 4. Выполняешь команды через 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 — разрешён локально) ## Документация - `doc/` — документация проекта - Обновлять после каждого значимого изменения - Старые файлы `doc/` не перезаписывать — новое в новых файлах с датой ## Git ⛔⛔⛔ АБСОЛЮТНОЕ ПРАВИЛО: - Git — ЛОКАЛЬНО в /home/naeel/nubes/SQS-service. После push — синк на ВМ (rsync). - Разрешены операции: `git add`, `git commit`, `git push` (локально). - ЗАПРЕЩЕНО: git pull, git fetch, git rebase, git merge, git reset, git stash, git checkout — что угодно кроме add/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/ /home/naeel/nubes/SQS-service/tests/results/ ``` **Никогда не разбираться с результатами по памяти / буферу / чату. Только лог.** ## ⛔ РУЧНЫЕ ПАТЧИ — ЗАПРЕЩЕНЫ - НИКОГДА не применять ручные патчи (`kubectl patch`, `kubectl apply` отдельных полей, `python -c` замены в yaml и т.д.) без явного указания. - Все изменения — только через код (манифесты, Go-код) + сборка + деплой. - Ручной патч слетает при следующем helm upgrade/redeploy → регрессия. - Исключение: только если пользователь явно написал "примени ручной патч". ## Поведение агента - Не трогать рабочий код без явного указания - Не делать НИЧЕГО сверх того, о чём явно приказали — ни git-команд, ни rebase, ни дополнительных шагов - Если для продолжения нужен выбор — СПРОСИТЬ разрешения, не делать самостоятельно - Деструктивные операции (`kubectl delete`, `rm -rf`, `terraform destroy` и др.) — только после явного подтверждения с указанием конкретных объектов - Отвечать кратко, без вступлений, извинений, благодарностей и прочей воды