Files
transcriber/tasks/items/migrations-step-norm-and-tests.md
T
av b76f2d7c7e docs: раскладка переехала в .av-dev.toml, а расхождения документов сведены
- Перевод на канон 1 доделан: адреса служебного файла и имена скиллов
  переставлены в девяти местах прозы и кода, гейт зовёт три скрипта по новым
  путям, прежние docs/.docs.json и tasks/.tasks.json удалены.
- Сверка двумя агентами нашла четырнадцать расхождений, тринадцать сведены
  строками: число прогонов ревью и преамбула журнала дефектов, счёт capability,
  маршруты README, дубли инварианта захвата и кодов прогона, протухшие указатели
  записок разведки, маркер долга на переехавшем абзаце. Срок жизни сессии
  нормирует спека access, database.md на неё ссылается.
- Purpose спеки pipeline объявляет неописанным то, что в ней же и стоит; правка
  идёт изменением openspec, поэтому заведена задача pipeline-spec-purpose-drift.
2026-08-13 12:36:36 +03:00

49 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧹 Проверить шаг гейта 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`.