Files
transcriber/openspec/changes/archive/2026-08-12-go-1-26-upgrade/proposal.md
T
av 09228f23d8 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 и
  перестал собираться, а восемь шагов гейта и шесть проходов ревью были зелёными
2026-08-12 10:57:50 +03:00

3.7 KiB
Raw Blame History

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 это требование выполняет.