Migration safety auditor
Аудит безопасности миграций БД (Django migrations и Alembic/SQLAlchemy) перед прод-деплоем и помощь в безопасном переписывании: блокировки таблиц, downtime, потеря данных, несовместимость старого кода со схемой при zero-downtime, опасный backfill, необратимые операции. Postgres и SQLite. Используй когда пользователь просит проверить миграцию, спрашивает «безопасна ли миграция», «не уронит ли прод», добавляет колонку/индекс/constraint на большой таблице, пишет data-миграцию или backfill, делает zero-downtime деплой, или упоминает migration review, expand/contract, CONCURRENTLY, RunPython.From its SKILL.md
npx -y skills add goldenprofile/llm-skills --skill migration-safety-auditorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 3 commands, including `python manage.py makemigrations --check --dry-run` and 2 more.
SKILL.md
7.0 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
Migration Safety Auditor
Аудитор безопасности миграций БД перед прод-деплоем. Цель — поймать операции, которые блокируют таблицу под нагрузкой, ломают работающий код при rolling-деплое, теряют данные или необратимы. По итогу — отчёт с уровнями риска и (по согласованию) безопасные правки.
Когда применять
Запускай перед применением миграций на проде, при ревью PR с новой миграцией, при добавлении
колонок/индексов/constraint/FK на непустой таблице, при написании data-миграций и backfill.
Для общего аудита Django см. django-audit; этот навык — только про миграции.
Контекст — установить ПЕРВЫМ делом
Без него оценка риска бессмысленна. Если не ясно из проекта — спроси кратко:
- ORM/инструмент: Django migrations или Alembic/SQLAlchemy. (raw SQL — см. справочник Postgres.)
- СУБД: Postgres или SQLite. Версия Postgres важна (часть операций безопасна с PG 11/12+).
- Модель деплоя: короткий downtime (стоп → миграция → старт) или zero-downtime/rolling (старый и новый код работают одновременно). От этого зависит строгость к обратной совместимости схемы. См. references/deploy-models.md.
- Размер затрагиваемых таблиц: операция, безопасная на 1k строк, кладёт прод на 50M.
Процесс
- Собрать миграции на ревью. Django: неприменённые файлы в
*/migrations/,python manage.py makemigrations --check --dry-run, при сомненияхsqlmigrate app NNNNдля просмотра реального SQL. Alembic: новые ревизии вversions/,alembic upgrade --sqlдля offline-SQL. - Прогнать каждую операцию по чеклисту рисков (ниже + справочники).
- Классифицировать по уровню риска, объяснить почему опасно именно при его модели деплоя.
- Предложить безопасную альтернативу (expand/contract, CONCURRENTLY, батчи, таймауты).
- Отчёт по references/report-template.md. По согласованию — переписать миграции.
Уровни риска
- CRITICAL — гарантированный простой, потеря данных или необратимая операция на проде
(table rewrite/долгий ACCESS EXCLUSIVE на большой таблице,
DROP COLUMNс данными, backfill всей таблицы одной транзакцией). - HIGH — блокировка записи под нагрузкой или поломка старого кода при zero-downtime
(индекс без
CONCURRENTLY,RENAME, новыйNOT NULL/UNIQUE/FK без двухфазного приёма). - MEDIUM — нет
lock_timeout/statement_timeout, нет обратной операции (RunPythonбез reverse, пустойdowngrade()), схема и данные смешаны в одной миграции. - LOW — стиль, именование, незначительные улучшения.
Быстрый чеклист (детали — в справочниках)
ADD COLUMNс volatile/вычисляемымDEFAULTили новыйNOT NULLна непустой таблице → rewrite.CREATE INDEXбезCONCURRENTLY→ блокирует запись на время построения.ALTER COLUMN TYPE→ почти всегда rewrite +ACCESS EXCLUSIVE.- Добавление
FOREIGN KEY/UNIQUE/NOT NULLодним шагом → используйNOT VALID→VALIDATE. RENAMEколонки/таблицы → ломает работающий старый код; для zero-downtime — expand/contract.DROP COLUMN/DROP TABLE→ потеря данных + ломает старый код; только в contract-фазе.- Backfill/
UPDATEвсей таблицы в одной транзакции → длинные локи, раздувание WAL, реплаг. - Нет
lock_timeoutперед DDL → миграция ждёт лок и выстраивает очередь ко всей таблице. - Нет обратной операции → миграцию нельзя откатить при инциденте.
Справочники
- references/postgres-operations.md — таблица «операция → блокировка → безопасная альтернатива», expand/contract, backfill, таймауты.
- references/django.md — Django:
atomic=False,AddIndexConcurrently,RunPython/reverse,SeparateDatabaseAndState, squash, SQLite-нюансы. - references/alembic.md — Alembic: ловушки
autogenerate,batch_alter_tableдля SQLite,autocommit_block, реальныйdowngrade(). - references/deploy-models.md — downtime vs zero-downtime, expand/contract пошагово, SQLite и переезд на Postgres.
- references/report-template.md — формат отчёта.
What ships with it: 5 files
25.3 KB alongside SKILL.md
references/
- alembic.md4.1 KB
- deploy-models.md5.8 KB
- django.md5.1 KB
- postgres-operations.md7.0 KB
- report-template.md3.3 KB