tasks: заведён остаток работы о гейте, контексте и токене
- четыре новые записи: проверить шаг migrations так же, как шаг сверки версий Go; свести шесть расхождений между документами канона; запретить обращаться к Bot API мимо клиента бота; разведка о шагах гейта, теряющих предмет - context-cancel-in-pipeline приведена к правде: дописан перечень сделанного попутно, критерий с оракулом «тест на трёх прерываниях подряд» разбит надвое — проверена была только его узкая половина
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# 🧹 Проверить шаг гейта migrations так же, как шаг сверки версий Go
|
||||
|
||||
- **Тип:** chore
|
||||
- **Категория:** Очередь — Шаг уже стоит в гейте и уже назван стражем critical-инварианта в двух документах — необеспеченное обещание дороже отсутствующего.
|
||||
- **Зачем:** Шаг охраняет critical-инвариант «применённый шаг схемы не переписывается», но своих проверок не имеет: дрейф шаблона имени, переезд каталога или потеря grep в конвейере оставят его вечно зелёным, и это не заметит ничто.
|
||||
|
||||
Шаг заведён 2026-08-13 и проверен мутацией на восьми исходах вручную — правка
|
||||
уехавшего шага в дереве и в коммите, удаление, переименование, новый шаг, правка
|
||||
`migrations.go`, отсутствующий ключ в `docs/.docs.json`, каталог без шагов,
|
||||
неразрешимая база диффа. Прогон был разовым: в дереве от него не осталось ничего.
|
||||
|
||||
Прецедент рядом. У шага сверки версий 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/.docs.json` — из него шаг берёт каталог;
|
||||
- каталог шагов схемы `internal/adapter/repo/pocketbase/migrations/` как предмет
|
||||
правила;
|
||||
- возможно — новая capability в `openspec/specs/` и файл проверок рядом с
|
||||
`scripts/check_go_version_test.go`.
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- Переписанный уехавший шаг схемы роняет проверку. Оракул — прогон сценария на
|
||||
временном клоне репозитория: правка файла шага даёт код 1 и называет файл.
|
||||
- Новый файл шага проверку не роняет, и правка `migrations.go` тоже: строка
|
||||
`Register` нового шага прибавляется именно там. Оракул — те же два сценария.
|
||||
- Каталог без единого файла шага и отсутствующий ключ в `docs/.docs.json` дают
|
||||
код 3, а не тихий ноль. Оракул — два сценария на временном каталоге.
|
||||
- Проверка сценариев идёт в гейте, а не руками. Оракул — `task gate` красный при
|
||||
внесённом нарушении шаблона имени файла шага.
|
||||
|
||||
## Рамки
|
||||
|
||||
Боевой каталог данных и файлы шагов схемы не трогаем: сценарии гоняются на
|
||||
временном клоне репозитория. Чужие скрипты проверок (`docs.py`, `tasks.py`,
|
||||
`openspec.py`) — не наши, они в задаче `gate-steps-subject-guard`.
|
||||
Reference in New Issue
Block a user