Files
transcriber/tasks/items/migrations-step-norm-and-tests.md
T
av f7a8a1df9d tasks: восемь записей интейка получили место в плане стройки
- migrations-step-norm-and-tests, gate-steps-subject-guard и
  review-config-from-go-upgrade уехали в голову: слой проверок, которым верят
  все задачи ниже;
- rollback-restores-wrong-session-duration встал рядом с соседом про откат,
  bot-api-only-through-bot-client — рядом с чисткой транспорта,
  pin-runtime-image-base — перед spa-skeleton, откуда начинаются пересборки;
- pipeline-spec-purpose-drift закрыта реализованной, а
  docs-consistency-2026-08-13 переписана под пять оставшихся находок: шестую
  свело повышение раскладки.
2026-08-13 16:11:58 +03:00

4.2 KiB

🧹 Проверить шаг гейта migrations так же, как шаг сверки версий Go

  • Тип: chore
  • Категория: Очередь — Страж шага гейта — тот же слой оснований, что и покрытие изменённых строк: проверкам, которым верят ниже по списку, верить можно только после этого.
  • Зачем: Шаг охраняет critical-инвариант «применённый шаг схемы не переписывается», но своих проверок не имеет: дрейф шаблона имени, переезд каталога или потеря grep в конвейере оставят его вечно зелёным, и это не заметит ничто.

Шаг заведён 2026-08-13 и проверен мутацией на восьми исходах вручную — правка уехавшего шага в дереве и в коммите, удаление, переименование, новый шаг, правка migrations.go, отсутствующий ключ в .av-dev.toml, каталог без шагов, неразрешимая база диффа. Прогон был разовым: в дереве от него не осталось ничего.

Прецедент рядом. У шага сверки версий Go есть спека toolchain и 20 мутационно проверенных сценариев в scripts/check_go_version_test.go; заведены они после дефекта 2026-08-12, когда зелёный шаг не проверял ничего и образ перестал собираться. Долг назван строкой в 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.