- шаг 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 и перестал собираться, а восемь шагов гейта и шесть проходов ревью были зелёными
52 lines
3.7 KiB
Markdown
52 lines
3.7 KiB
Markdown
## 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 это требование выполняет.
|