- шаг go-version в task gate сверяет объявленную версию в go.mod, Dockerfile, CLAUDE.md и README.md; судит по репозиторию, go не зовёт, docker и сети не требует - заведена capability toolchain: до сих пор спеки нормировали только поведение сервиса, теперь и инструмент сборки. Причина и цена — в двух ADR - закрыт дефект 2026-08-12: образ на golang:1.24-alpine разошёлся с go.mod и перестал собираться, а восемь шагов гейта и шесть проходов ревью были зелёными
3.7 KiB
Why
Сервис собирается тремя разными числами версии Go сразу: модуль требует одно, сборочный образ берёт другое, памятка обещает третье, а README не называет никакого. Расхождение этих чисел никто не проверяет, и один раз оно уже уехало в работу: 2026-08-12 образ не собирался вовсе, а полный набор проверок и шесть проходов ревью показали зелёное. Поймали случайно, руками. Пока сравнения нет, то же самое повторится на следующем подъёме версии — а замечено будет в момент выкладки, когда чинить дороже всего.
What Changes
- Версия Go, на которой собирается сервис, поднимается до 1.26 и называется одним и тем же числом в четырёх местах: требование модуля, сборочный образ, памятка разработчику и README. Сегодня README не называет его вовсе — строка заводится.
- В набор проверок добавляется шаг, который сравнивает объявленные числа между собой и краснеет, называя все четыре места и число каждого. Шаг сравнивает строки: он не собирает образ, не ходит в сеть, не требует docker и не спрашивает, что за Go установлен на машине, — судит он по тому, что лежит в репозитории.
- Собирать образ проверкой мы по-прежнему не будем — это дорого, и отказ осознанный. Сравнение строк ловит тот же класс расхождений за доли секунды.
- Разница в третьем числе версии между модулем и образом остаётся законной: сравниваются только первые два.
Capabilities
New Capabilities
toolchain: каким инструментом и какой его версии собирается сервис, и что об этом проверяется до выкладки. Первое требование capability — согласованность объявленной версии инструмента сборки и её проверка набором проверок.
Modified Capabilities
Нет. Поведение сервиса для его потребителей не меняется: запись принимается, расшифровывается и хранится ровно как прежде.
Impact
- требование версии в
go.mod; - сборочный слой
Dockerfile; - строка о версии в
CLAUDE.mdи вREADME.md; - набор шагов
task gateвTaskfile.ymlи описание семантики набора проверок вCLAUDE.md; - запись журнала дефектов
docs/review.mdза 2026-08-12 получает починку, которую обещала.
Выкладка этим изменением не запускается. Внешних зависимостей изменение не трогает: PocketBase требует не ниже 1.25, и 1.26 это требование выполняет.