- 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 переписана под пять оставшихся находок: шестую свело повышение раскладки.
49 lines
4.2 KiB
Markdown
49 lines
4.2 KiB
Markdown
# 🧹 Проверить шаг гейта migrations так же, как шаг сверки версий Go
|
||
|
||
- **Тип:** chore
|
||
- **Категория:** Очередь — Страж шага гейта — тот же слой оснований, что и покрытие изменённых строк: проверкам, которым верят ниже по списку, верить можно только после этого.
|
||
- **Зачем:** Шаг охраняет 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`.
|