Migration safety auditor
LLM Skills
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.
One thing 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.
What its author says it does
Copied from the file, not written here
Аудит безопасности миграций БД (Django migrations и Alembic/SQLAlchemy) перед прод-деплоем и помощь в безопасном переписывании: блокировки таблиц, downtime, потеря данных, несовместимость старого кода со схемой при zero-downtime, опасный backfill, необратимые операции. Postgres и SQLite. Используй когда пользователь просит проверить миграцию, спрашивает «безопасна ли миграция», «не уронит ли прод», добавляет колонку/индекс/constraint на большой таблице, пишет data-миграцию или backfill, делает zero-downtime деплой, или упоминает migration review, expand/contract, CONCURRENTLY, RunPython.
SKILL.md
7.0 KB, 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 — формат отчёта.