Files
transcriber/tasks/items/go-1-26-upgrade.md
T
av f48110df5a tasks: обновление Go и сверка версии собраны в одну задачу
- go-1-26-upgrade вобрал критерии gate-go-version-sync: версия правится и
  сверяется одним заходом
- gate-go-version-sync ушла в REJECTED с причиной
2026-08-12 09:09:12 +03:00

3.8 KiB
Raw Blame History

🧹 Обновить Go до 1.26 и сверять версию шагом гейта

  • Тип: chore
  • Категория: Очередь
  • Зачем: Модуль объявляет go 1.25.0, образ собирается на golang:1.25-alpine, на машине разработки стоит 1.26.5, и расхождение этих чисел не ловит ни один шаг гейта: разъехавшийся Dockerfile прошёл весь конвейер зелёным.

Задача собрана из двух: заметки владельца от 2026-08-12 про обновление и находки ревью pocketbase-storage про несверяемые версии. Собраны вместе, потому что правятся одним заходом: поднимать число в трёх местах и не заводить сверку значит завести то же расхождение заново на следующей зависимости.

Версия 1.25 в модуле появилась не выбором, а требованием PocketBase: go mod tidy поднял директиву сам, а образ подтянули следом. То есть сегодняшнее число никем не назначено.

Случай расхождения записан журналом дефектов docs/review.md за 2026-08-12: go mod tidy поднял директиву до 1.25, Dockerfile остался на golang:1.24-alpine с GOTOOLCHAIN=local, и шесть проходов ревью вместе с восемью шагами гейта показали зелёное. Нашлось случайным свойством прогона, а не устройством проверок.

Сборку образа в гейт не заводим — она дорога. Дешёвая замена: сравнение двух строк.

Затрагивает

  • директива go в go.mod;
  • сборочный слой Dockerfile;
  • строка стека в CLAUDE.md и в README.md;
  • набор шагов task gate в Taskfile.yml;
  • семантика гейта в CLAUDE.md, раздел «Гейт».

Критерии приёмки

  • Модуль, образ и документы называют одну версию Go. Оракул — grep по четырём местам: go.mod, Dockerfile, CLAUDE.md, README.md; все дают одно число.
  • Сборка на объявленной версии проходит. Оракул — task image и CGO_ENABLED=0 go build ./... на чистом дереве.
  • Расхождение версий роняет гейт. Оракул — прогон task gate на дереве, где версия в Dockerfile понижена на минор: шаг краснеет и называет оба числа.
  • Совпадение гейт не роняет, а сам шаг не требует docker и работает без сети. Оракул — task gate на неизменённом дереве и прогон с DOCKER_HOST=/dev/null.
  • Гейт зелёный целиком. Оракул — task gate.

Рамки

Версию выбирает человек: обновление до неподдерживаемой ещё зависимостями версии ломает сборку молча. Выкладку не запускаем.

Сравнение строковое: Dockerfile называет golang:<major>.<minor>-alpine, а go.mod<major>.<minor>.<patch>. Сверяются мажор и минор; патч сборочного образа своей жизнью живёт законно.