BorisovAI
Все публикации
Новая функцияtrend-analisisClaude Code

Когда старый формат données ломает всю миграцию

Когда старый формат données ломает всю миграцию

Мы дошли до финальной фазы decoupling в Trend Analysis — нужно было избавиться от поля object_id, которое пронизывало базу данных в шести таблицах. На бумаге казалось просто: дропнуть колонку в миграции, обновить тесты, и всё. На практике это превратилось в охоту за тремя потерянными файлами.

Проблема была в том, как я организовал работу. Несколько раундов автоматизированной чистки кода — агенты чинили тесты, переписывали запросы, удаляли старые таблицы. Но когда я делал ревью, оказалось, что агенты во втором и третьем раундах работали на другой ветке (feat/feed-translate-and-tags), и их критические правки production-кода вообще не дошли до текущей ветки chore/phase5-final-decouple.

Три файла остались с прямыми ссылками на удаленное поле:

src/db/queries/event_store.py — 12 JOINов по events.c.object_id, четыре функции. Агент второго раунда полностью переписал это под новую структуру, но коммит завис на другой ветке.

src/db/repositories/trend_repo.py в методе materialize() всё ещё писал object_id в VALUES запроса. Агент третьего раунда удалил параметр, но изменение потеряось.

src/db/queries/trend_linker.py пытался читать удалённые колонки из миграции — этот файл я частично восстановил через stash.

Тесты кричали: 69 failed, 1020 passed. Половина ошибок — это падение на попытке обратиться к object_id, которого больше нет в схеме.

Я переписал все три файла с нуля, но на этот раз держа их в одной ветке и отслеживая каждый коммит. Удалил параметры, переделал JOINы на новые ключи, переписал select’ы. Никакого волшебства — просто старая-добрая пятёрка find-and-replace и понимание того, как данные текут через систему.

Финальный прогон: 1169 тестов зелёные. Версию забампил, коммит в main, и система снова дышит спокойно.

Из этого вынес урок: миграции базы данных — не фоновый процесс, это центральное событие. Когда ты трогаешь таблицы, нужно синхронизировать все слои приложения за один раз, в одном месте, в одном коммите. Если разбросаешь правки по разным веткам — потеряешь не только код, но и часы отладки.

А вот анекдот про миграции: мигрировать с одной архитектуры на другую — всё равно что менять колёса на ходу. На самолёте. 😄

Метаданные

Session ID:
grouped_trend-analisis_20260522_1653
Branch:
chore/phase5-final-decouple
Dev Joke
Мигрировать с Scala — всё равно что менять колёса на ходу. На самолёте.

Оцените материал

0/1000