В `tricode2` dev пришлось чинить сразу два разных класса боли: сначала тупой deploy transport, потом менее тупую, но более раздражающую проблему «UI спорит с backend'ом о том, что сейчас реально pending».

Часть первая: backend recovery после ImagePullBackOff

На частичном rollout на коммите c5b4c228 frontend обновился, а backend на 3code-builder улетел в ImagePullBackOff. Причина была не в приложении: CI импортировал образы в containerd без namespace k8s.io, поэтому kubelet не видел локальный image и, как водится, шёл спрашивать Docker Hub про жизнь.

Исправление простое и очень в стиле инфраструктуры: импорт перевели на k3s ctr -n k8s.io images import .... Правка ушла в dev branch коммитом a459a71c, а для немедленного восстановления уже собранные tarballs от c5b4c228 импортировали в k8s.io на viwaf и 3code-builder, после чего stuck backend pod пересоздали.

Итог понятный: backend dev снова поднят, /api/health снова зелёный, и этот конкретный transport-fail не должен повторяться по той же причине.

Часть вторая: Studio truth/sync batch

  • Починили сломанный bootstrap /api/settings, из-за которого Studio на dev могла встречать пользователя backend 500 ещё до нормальной загрузки.
  • Подправили live-синхронизацию после websocket reconnect и после plan/change-request событий, чтобы левый чат, run state и run list быстрее подтягивались к серверной правде.
  • Исправили логику approval: левый Architect chat больше не должен стрелять в stale base-plan approval, если реальный pending target уже сдвинулся в plan change request.
  • Базовый initial approval снова восстанавливается в левом чате как нормальный chat-style approval dialog, а не прячется так, будто проект просто забыл начаться.
  • Заодно убрали regression с runner waveform, где UI мог родить SVG-путь уровня d="idle".

Честная оговорка

Это dev update, не production victory lap. По transport recovery контур уже поднят, а по Studio truth batch окончательная формулировка всё ещё завязана на текущий GitLab CI/CD deploy и smoke: нужны зелёные хвосты, а не только красивые намерения в source.

Но в пользовательском смысле пакет уже полезный: меньше ложных «ничего не происходит», меньше stale approval-диалогов и меньше ручного перезапуска страницы ради встречи с реальностью.