# 🧹 Обновить 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:.-alpine`, а `go.mod` — `..`. Сверяются мажор и минор; патч сборочного образа своей жизнью живёт законно.