Go обновлён до 1.26, а расхождение версий теперь роняет гейт
- шаг 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 и перестал собираться, а восемь шагов гейта и шесть проходов ревью были зелёными
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
## 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 это требование выполняет.
|
||||
Reference in New Issue
Block a user