Go обновлён до 1.26, а расхождение версий теперь роняет гейт
- шаг go-version в task gate сверяет объявленную версию в go.mod, Dockerfile, CLAUDE.md и README.md; судит по репозиторию, go не зовёт, docker и сети не требует - заведена capability toolchain: до сих пор спеки нормировали только поведение сервиса, теперь и инструмент сборки. Причина и цена — в двух ADR - закрыт дефект 2026-08-12: образ на golang:1.24-alpine разошёлся с go.mod и перестал собираться, а восемь шагов гейта и шесть проходов ревью были зелёными
This commit is contained in:
@@ -24,7 +24,7 @@ Yandex SpeechKit и возвращает текст туда, откуда пр
|
||||
|
||||
## Стек
|
||||
|
||||
Go 1.25 (CGO не нужен), встроенная PocketBase — хранилище, файлы записей и
|
||||
Go 1.26 (CGO не нужен), встроенная PocketBase — хранилище, файлы записей и
|
||||
панель администратора, — `go-telegram-bot-api`, `aws-sdk-go-v2` для Object
|
||||
Storage, gRPC-клиент Yandex SpeechKit v3, Prometheus, `slog`. Сборка —
|
||||
Taskfile, образ — Docker, выкладка — Ansible из `pet-project-server`.
|
||||
@@ -102,15 +102,28 @@ task gate # весь набор проверок разом
|
||||
`origin/master`; переопределяется `task gate BASE=<rev>`.
|
||||
- **Где логи шагов:** вывод команды, отдельного файла нет.
|
||||
- **Что означает каждый исход:** ненулевой код любого шага роняет гейт. У
|
||||
`docs.py check`, `tasks.py check` и `openspec.py check` словарь кодов общий:
|
||||
0 сошлось, 1 дрейф, 2 ошибка употребления, 3 окружение (не корень проекта,
|
||||
каталог не найден), 4 внутренний сбой.
|
||||
`docs.py check`, `tasks.py check`, `openspec.py check` и
|
||||
`scripts/check-go-version.sh` словарь кодов общий: 0 сошлось, 1 дрейф,
|
||||
2 ошибка употребления, 3 окружение (не корень проекта, каталог или файл не
|
||||
найден), 4 внутренний сбой. Последний своего словаря не заводит намеренно:
|
||||
четвёртый шаг с собственной семантикой сделал бы это утверждение неверным.
|
||||
- **Что красит безусловно и почему:** отказ сборки, тестов, `go vet`,
|
||||
неотформатированный файл, находка `golangci-lint`, дрейф раскладки документов,
|
||||
неотформатированный файл, находка `golangci-lint`, расхождение объявленных
|
||||
версий Go, дрейф раскладки документов,
|
||||
дрейф каталога задач, форма `openspec/config.yaml`. Машина проверяет всё
|
||||
перечисленное, и это не обсуждается. Шаг, чей скрипт не найден, краснеет с
|
||||
именем недостающего плагина, а не пропускается молча.
|
||||
- **Чего в гейте намеренно нет и кто тогда обязан это гонять:**
|
||||
- **сборка образа** — дорога, и отказ от неё сознательный. Дешёвая замена
|
||||
стоит шагом сверки версий: он сравнивает строки и ловит расхождение, из-за
|
||||
которого образ перестаёт собираться, но собираемости не проверяет. Собрать
|
||||
образ по-прежнему может только человек — `task image`, и на подъёме версии
|
||||
это обязательно;
|
||||
- `shellcheck` — shell-скрипт в гейте один, `scripts/check-go-version.sh`; три
|
||||
соседних шага это Python в плагинах, и линтер оболочки к ним неприменим.
|
||||
Линтер не заведён, и цена ему одна строка шага плюс одно подавление ложного
|
||||
`SC1007` на идиому `CDPATH= cd`. Его не проверяет ничто, а это единственный
|
||||
исполняемый файл проекта, которого не видят ни `go vet`, ни `golangci-lint`;
|
||||
- `gitleaks` — висит на pre-commit в `lefthook.yml` и смотрит только индекс
|
||||
коммита. Полную историю никто не проверяет;
|
||||
- согласованность документов между собой и с кодом — её судят агенты, зовёт
|
||||
|
||||
Reference in New Issue
Block a user