Files
fission-src/.github/pravila.md
T
“Naeel” 3b93c5dc8b fix(namespace): harden lifecycle — RemoveNamespace, parallel dispatch, reconciler
- DefaultNSResolver.RemoveNamespace(): removes NS from global map on label removal
  so Snapshot() and idleObjectReaper stop iterating deleted namespaces.
  Fixes class of dirty-state bugs when NS name is reused by new tenant.

- HandleWatcherNamespaceRemoval: call RemoveNamespace on both TrackOnly and
  DispatchRemove strategies — global resolver cleanup is always required.

- dispatch(): parallel subscriber execution via goroutine per subscriber +
  sync.WaitGroup. Reduces onboarding latency from O(N_subscribers × API_latency)
  to O(max(API_latency)). Safe: MarkPart* are internally mutex-protected.

- inMemoryNamespaceManager.RunReconciler(): 30s ticker scans for
  NamespacePhaseFailed records and retries via DispatchResync. Started
  automatically by RunManagedNamespaceWatcher. Fixes permanent stuck-failed
  state caused by transient k8s API errors.

Analysis source: FORENSIC_ARCHITECTURE_AUDIT.md §Deep Risk Analysis
2026-05-18 08:45:31 +04:00

6.3 KiB

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

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

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

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

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

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

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

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

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

Пример:

  1. Редактируешь локально (~/fission-src)
  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 — ТОЛЬКО ЛОКАЛЬНО в ~/fission-src. НИКОГДА через 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/fission-src/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/fission-src/scripts/run_all.sh 2>&1 | tee ~/terra/fission-src/${LOG}"
rsync -az -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no" \
  naeel@5.172.178.213:~/terra/fission-src/test-results/ ~/fission-src/test-results/

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

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

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