agentsclimarketplace

Migration safety auditor

Skill goldenprofile/llm-skills/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

Install
npx -y skills add goldenprofile/llm-skills --skill migration-safety-auditor

Assembled 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; этот навык — только про миграции.

Контекст — установить ПЕРВЫМ делом

Без него оценка риска бессмысленна. Если не ясно из проекта — спроси кратко:

  1. ORM/инструмент: Django migrations или Alembic/SQLAlchemy. (raw SQL — см. справочник Postgres.)
  2. СУБД: Postgres или SQLite. Версия Postgres важна (часть операций безопасна с PG 11/12+).
  3. Модель деплоя: короткий downtime (стоп → миграция → старт) или zero-downtime/rolling (старый и новый код работают одновременно). От этого зависит строгость к обратной совместимости схемы. См. references/deploy-models.md.
  4. Размер затрагиваемых таблиц: операция, безопасная на 1k строк, кладёт прод на 50M.

Процесс

  1. Собрать миграции на ревью. Django: неприменённые файлы в */migrations/, python manage.py makemigrations --check --dry-run, при сомнениях sqlmigrate app NNNN для просмотра реального SQL. Alembic: новые ревизии в versions/, alembic upgrade --sql для offline-SQL.
  2. Прогнать каждую операцию по чеклисту рисков (ниже + справочники).
  3. Классифицировать по уровню риска, объяснить почему опасно именно при его модели деплоя.
  4. Предложить безопасную альтернативу (expand/contract, CONCURRENTLY, батчи, таймауты).
  5. Отчёт по 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

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.