# 🧹 Проверить шаг гейта migrations так же, как шаг сверки версий Go - **Тип:** chore - **Категория:** Очередь — Шаг уже стоит в гейте и уже назван стражем critical-инварианта в двух документах — необеспеченное обещание дороже отсутствующего. - **Зачем:** Шаг охраняет critical-инвариант «применённый шаг схемы не переписывается», но своих проверок не имеет: дрейф шаблона имени, переезд каталога или потеря grep в конвейере оставят его вечно зелёным, и это не заметит ничто. Шаг заведён 2026-08-13 и проверен мутацией на восьми исходах вручную — правка уехавшего шага в дереве и в коммите, удаление, переименование, новый шаг, правка `migrations.go`, отсутствующий ключ в `.av-dev.toml`, каталог без шагов, неразрешимая база диффа. Прогон был разовым: в дереве от него не осталось ничего. Прецедент рядом. У шага сверки версий Go есть спека [toolchain](../../openspec/specs/toolchain/spec.md) и 20 мутационно проверенных сценариев в `scripts/check_go_version_test.go`; заведены они после дефекта 2026-08-12, когда зелёный шаг не проверял ничего и образ перестал собираться. Долг назван строкой в [go-linters.md](../../docs/conventions/go-linters.md), «Границы: где что живёт». **Развилка, решаемая внутри задачи:** нормировать шаг спекой (второй capability о проверке, как `toolchain`) либо ограничиться проверками без нормы. Первое дороже и даёт построчную сверку сценариев; второе закрывает регрессию, но оставляет норму в комментарии `Taskfile.yml`. ## Затрагивает - шаг `migrations` в `Taskfile.yml` — его логика разбора `git diff`; - ключ `migrations` секции `[docs]` в `.av-dev.toml` — из него шаг берёт каталог; - каталог шагов схемы `internal/adapter/repo/pocketbase/migrations/` как предмет правила; - возможно — новая capability в `openspec/specs/` и файл проверок рядом с `scripts/check_go_version_test.go`. ## Критерии приёмки - Переписанный уехавший шаг схемы роняет проверку. Оракул — прогон сценария на временном клоне репозитория: правка файла шага даёт код 1 и называет файл. - Новый файл шага проверку не роняет, и правка `migrations.go` тоже: строка `Register` нового шага прибавляется именно там. Оракул — те же два сценария. - Каталог без единого файла шага и отсутствующий ключ в `.av-dev.toml` дают код 3, а не тихий ноль. Оракул — два сценария на временном каталоге. - Проверка сценариев идёт в гейте, а не руками. Оракул — `task gate` красный при внесённом нарушении шаблона имени файла шага. ## Рамки Боевой каталог данных и файлы шагов схемы не трогаем: сценарии гоняются на временном клоне репозитория. Чужие скрипты проверок (`docs.py`, `tasks.py`, `openspec.py`) — не наши, они в задаче `gate-steps-subject-guard`.