Files

6.5 KiB

Правила работы агента

DOCKER — ОБЯЗАТЕЛЬНЫЙ ПОРЯДОК ПЕРЕД КАЖДЫМ BUILD

  1. УВЕЛИЧИТЬ ТЕГ в deploy/lang.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. Все файлы редактируются локально: ~/lang

  2. После любых изменений — обязательно rsync на ВМ: rsync -az
    -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=10"
    /lang/
    naeel@5.172.178.213:
    /terra/lang/

  3. Git (add/commit/push) выполнять ЛОКАЛЬНО в ~/lang

  4. Docker, kubectl и другие инфраструктурные команды — только через SSH на ВМ

  5. Перед запуском любой команды на ВМ обязательно убедиться, что синхронизация (rsync) выполнена

  6. SCP, sshfs, remote_dev и маунты больше НЕ используются

  7. Только rsync для синхронизации

Пример:

  1. Редактируешь локально
  2. rsync на ВМ
  3. Выполняешь команды через SSH на ВМ

SSH

Все команды — только через SSH на ВМ. Локально — только читать и редактировать файлы.

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/thinking/ — лог рассуждений агента (обязательно)
  • doc/progress.md — трекер задач
  • Старые файлы doc/ не перезаписывать — новое в новых файлах с датой

Git

АБСОЛЮТНОЕ ПРАВИЛО:

  • Git — ТОЛЬКО ЛОКАЛЬНО в ~/lang. НИКОГДА через 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
git tag vX.Y.Z && git push origin vX.Y.Z

ТЕРМИНАЛЬНЫЙ БУФЕР — НИКОГДА НЕ ЧИТАТЬ СТАРЫЙ

АБСОЛЮТНОЕ ПРАВИЛО:

  • get_terminal_output из старых сессий — МУСОР. Там старые прогоны.
  • Всегда запускать новую команду через SSH и читать её вывод напрямую.
  • НИКОГДА не читать буфер терминала из предыдущей сессии как актуальные данные.
  • Актуальный результат — только из команды, которая была запущена СЕЙЧАС.

Документация тест-прогонов — В РЕАЛЬНОМ ВРЕМЕНИ

Правила:

  1. Перед запуском run_all.sh — создать файл test-results/YYYY-MM-DD_HH-MM.log и записать в него метку времени и что запускается.
  2. Запускать run_all.sh 2>&1 | tee ~/terra/lang/test-results/YYYY-MM-DD_HH-MM.log — вывод пишется сразу в файл и отображается в терминале.
  3. После завершения — rsync лога локально. Лог остаётся как документация.
  4. Папка test-results/ в репозитории — .gitignore не добавлять, логи коммитить.

Формат запуска:

LOG="test-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/lang/scripts/run_all.sh 2>&1 | tee ~/terra/lang/${LOG}"
rsync -az -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no" \
  naeel@5.172.178.213:~/terra/lang/test-results/ ~/lang/test-results/

Никогда не разбираться с результатами по памяти / буферу / чату. Только лог.

РУЧНЫЕ ПАТЧИ — ЗАПРЕЩЕНЫ

  • НИКОГДА не применять ручные патчи (kubectl patch, kubectl apply отдельных полей, python -c замены в yaml и т.д.) без явного указания.
  • Все изменения — только через код (Helm chart, YAML, Go-код) + сборка + деплой.
  • Ручной патч слетает при следующем helm upgrade/redeploy → регрессия.
  • Исключение: только если пользователь явно написал "примени ручной патч".

Поведение агента

  • Не трогать рабочий код без явного указания
  • Не делать НИЧЕГО сверх того, о чём явно приказали — ни git-команд, ни rebase, ни дополнительных шагов
  • Если для продолжения нужен выбор — СПРОСИТЬ разрешения, не делать самостоятельно
  • Деструктивные операции (kubectl delete, rm -rf, terraform destroy и др.) — только после явного подтверждения с указанием конкретных объектов
  • Отвечать кратко, без вступлений, извинений, благодарностей и прочей воды