deploy-tradein.yml: up только postgres → pg_isready-wait (30×2s) → весь блок
миграций → затем up browser/backend/frontend(/scraper). Сбой миграции = exit 1
до нового кода, старые контейнеры остаются на консистентной паре код↔схема.
Удалён docker restart tradein-backend (lifespan-hook теперь видит миграции
с первого старта; история PR #493/deploy-1156 сохранена в комментарии).
Реконсиляция «152 vs 131» из аудита не актуальна: прод _schema_migrations и
репо data/sql совпадают (154 == 154, diff пуст; проверено 2026-07-02).
Инвариант против rename-trap (tracking по bare-filename → переименование
применённой миграции = повторное выполнение на проде):
test_migrations_manifest.py + _manifest_applied.txt (154 имени) — red при
rename/rm применённой и при дубль-NN-префиксе новых (6 исторических дублей
084/108/113/121/124/130 grandfathered).
Refs #2216