Про важность бэкапов и автономность агентов при работе с продакшн-кодом
Вайбкодинг - это та сфера, где цена ошибки может быть ну очень высокой, а тебе нужно постоянно перестраховываться. Сегодня у меня произошел кейс, когда как раз эта самая перестраховка меня спасла.
Решил я в свою LMS, которая крутится в проде уже больше года, добавить одну маленькую функцию - автодобавление пользователей при покупке на сайте. Раньше делал руками, но для селф-стади это неудобно. Идея максимально простая: человек делает покупку через Юкасса, от их апи приходит ответ, у меня по заданным пользователем имени и e-mail создается юзер, ему назначается курс и отправляется письмо на почту с магической ссылкой для логина.
Методы создания юзера у меня уже были написаны, нужно было просто добавить эту ручку и логику отправки писем.
Решил особо не париться и не переключать среду на тестовую из-за такого мелкого изменения (и зря).
Свой код я абсолютно всегда покрываю тестами и LMS у меня тестами покрыта вдоль и поперек. Все стейты, включая “пустое состояние”, когда нет ни курсов ни пользователей, для этого есть отдельный метод. который как раз всех этих пользователей очищает. А сами эти тесты у меня лежат в отдельной папочке, чтобы не дай бог не активировать их случайно, т.к. их функция по-сути, разовая, при первом развертывании самой системы.
Ну и вот, функция хоть и простая, но мне было лень лишний раз что-то согласовывать - поэтому я запряг под эту задачу Opus 4.6. В промпте также попросил написать тест этого функционала, чтобы я мог его потом прогнать. Опус все сделал, но случилось то, за что я ненавижу эти модели - он решил быть слишком самостоятельным, и, написав тесты для нового функционала решил, что надо бы и остальные тесты прогнать. И пока я отошел налить себе чаю, этот негодяй сделал отдельный скрипт для запуска вообще всех тестов, который включал как раз ту самую запретную папочку 😁
Что он снес? Да вообще все. Оставил только тестовых юзеров, удалил из LMS все материалы, всех пользователей, конспекты, и вообще все. Но проблему удалось решить буквально за минуту.
Во-первых, в Supabase у меня настроен регулярный бекап, собственно, который я заюзал, чтобы откатиться на несколько часов назад.
Во-вторых, зная о наличии у меня такого теста, я ожидал, что рано или поздно такая фигня произойдет, поэтому написал отдельный скрипт, который периодически парсит БД проекта и сохраняет ее у меня на сервере раз в сутки.
В-третьих, что касается материалов - у меня сохранены дубликаты в Affine в маркдауне, на случай, если все бекапы придут в негодность.
Тут первый слой защиты сработал, остальные не понадобились.
Позабавила, конечно, реакция агента, когда я сказал ему, что он снес базу 🤣
Короче, какие выводы для вас, дорогие друзья:
1. Даже делая маленькие изменения лучше переключайтесь между тестовой и продакшен средой;
2. Всегда делайте бекапы;
3. Opus - демон, доверять которому себе дороже 😅
В таком контексте даже дропнув БД в продакшене - сможете сделать вот такой скрин и поугорать над ситуацией, а не думать, о том, как можно было бы этого избежать.
🚀 Влад Корнышев про AI и создание AI-продуктов
Обсуждение 9
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram