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

52 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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 это требование выполняет.