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

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