tasks: обновление Go и сверка версии собраны в одну задачу

- go-1-26-upgrade вобрал критерии gate-go-version-sync: версия правится и
  сверяется одним заходом
- gate-go-version-sync ушла в REJECTED с причиной
This commit is contained in:
av
2026-08-12 09:09:12 +03:00
parent 07433bb9f9
commit f48110df5a
4 changed files with 35 additions and 47 deletions
-35
View File
@@ -1,35 +0,0 @@
# 🧹 Сверять версию Go в образе с директивой go.mod
- **Тип:** chore
- **Категория:** Очередь
- **Зачем:** Образ гейт не собирает, и расхождение версий прошло весь конвейер молча: task image упал бы уже на сервере.
Случай записан журналом дефектов `docs/review.md` за 2026-08-12: `go mod tidy`
поднял директиву до 1.25, `Dockerfile` остался на `golang:1.24-alpine` с
`GOTOOLCHAIN=local`, и шесть проходов ревью вместе с восемью шагами гейта
показали зелёное. Нашлось случайным свойством прогона, а не устройством
проверок.
Сборку образа в гейт не заводим — она дорога. Дешёвая замена: сравнение двух
строк.
## Затрагивает
- набор шагов `task gate` в `Taskfile.yml`;
- директива `go` в `go.mod` и сборочный слой `Dockerfile` как источники
сравнения;
- семантика гейта в `CLAUDE.md`, раздел «Гейт».
## Критерии приёмки
- Расхождение версий роняет гейт. Оракул — прогон `task gate` на дереве, где
версия в `Dockerfile` понижена на минор: шаг краснеет и называет оба числа.
- Совпадение гейт не роняет. Оракул — `task gate` на неизменённом дереве.
- Шаг не требует docker и работает без сети. Оракул — прогон с
`DOCKER_HOST=/dev/null`.
## Рамки
Сравнение строковое: `Dockerfile` называет `golang:<major>.<minor>-alpine`, а
`go.mod``<major>.<minor>.<patch>`. Сверяются мажор и минор; патч сборочного
образа своей жизнью живёт законно.
+33 -10
View File
@@ -1,30 +1,53 @@
# 🧹 Обновить Go до 1.26 в модуле и в образе
# 🧹 Обновить Go до 1.26 и сверять версию шагом гейта
- **Тип:** chore
- **Категория:** Очередь
- **Зачем:** Модуль объявляет go 1.25.0, образ собирается на golang:1.25-alpine, а на машине разработки стоит 1.26.5: три места расходятся, и проверки идут не на той версии, что уезжает на сервер.
- **Зачем:** Модуль объявляет go 1.25.0, образ собирается на golang:1.25-alpine, на машине разработки стоит 1.26.5, и расхождение этих чисел не ловит ни один шаг гейта: разъехавшийся Dockerfile прошёл весь конвейер зелёным.
Заметка владельца от 2026-08-12. Версия 1.25 в модуле появилась не выбором, а
требованием PocketBase: `go mod tidy` поднял директиву сам, а образ подтянули
следом. То есть сегодняшнее число никем не назначено, и повторится это на
следующей же зависимости.
Задача собрана из двух: заметки владельца от 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`.
- строка стека в `CLAUDE.md` и в `README.md`;
- набор шагов `task gate` в `Taskfile.yml`;
- семантика гейта в `CLAUDE.md`, раздел «Гейт».
## Критерии приёмки
- Модуль, образ и документы называют одну версию Go. Оракул — `grep` по
четырём местам: `go.mod`, `Dockerfile`, `CLAUDE.md`, `README.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>`. Сверяются мажор и минор; патч сборочного
образа своей жизнью живёт законно.