- go-1-26-upgrade вобрал критерии gate-go-version-sync: версия правится и сверяется одним заходом - gate-go-version-sync ушла в REJECTED с причиной
3.8 KiB
🧹 Обновить 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>. Сверяются мажор и минор; патч сборочного
образа своей жизнью живёт законно.