scripts: снесены проверки шага сверки версий Go
- Двадцать сценариев шага были единственной проверкой над проверкой в проекте; запрет CLAUDE.md остался без исключений. - Ссылки на файл сняты в памятке, конвенции линтеров, журнале ревью и статусе ADR о спеке toolchain; норма шага живёт комментариями в самом скрипте.
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
- **Дата:** 2026-08-12
|
||||
- **Источник:** [openspec/changes/archive/2026-08-12-go-1-26-upgrade/design.md](../../openspec/changes/archive/2026-08-12-go-1-26-upgrade/design.md), раздел `Decisions`, Решение 2
|
||||
- **Статус:** устарело — 2026-08-13 владелец решил обратное: инструментарию в
|
||||
спеках не место. Capability `toolchain` упразднена, замены у неё нет, норму
|
||||
шага держат его проверки в `scripts/check_go_version_test.go`
|
||||
спеках не место. Capability `toolchain` упразднена, замены у неё нет, а норма
|
||||
шага осталась комментариями в `scripts/check-go-version.sh`
|
||||
|
||||
## Решение
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
линтерах, тестах-сканерах, шагах проверок, — а не о том, что должен утверждать
|
||||
юнит-тест и какой у него оракул. Это другой предмет, и живёт он в
|
||||
[../review.md](../review.md): «Типовые узлы» перечисляют свойства, которые тест
|
||||
обязан проверять, и там же записано требование, чтобы проверка была **способна
|
||||
упасть**. Тест-сканеры ниже попадают в эту запись не потому, что они тесты, а
|
||||
обязан проверять. Тест-сканеры ниже попадают в эту запись не потому, что они тесты, а
|
||||
потому, что они правила: у них нет ни фикстур, ни поведения — они читают
|
||||
исходники.
|
||||
|
||||
@@ -38,10 +37,11 @@
|
||||
спрашивать уже не нужно;
|
||||
- **поведение сервиса** — нормативные спеки `openspec/specs/`. Шаги набора
|
||||
проверок туда не входят: инструментарий спеками не нормируется, и спека
|
||||
`toolchain`, заведённая под шаг сверки версий Go, упразднена 2026-08-13. Норму
|
||||
этого шага держат его собственные проверки — двадцать сценариев в
|
||||
`scripts/check_go_version_test.go`, и другого дома у неё нет. Второй самодельный
|
||||
шаг — `migrations` — не проверен и ими: он прогнан мутацией на трёх исходах
|
||||
`toolchain`, заведённая под шаг сверки версий Go, упразднена 2026-08-13. Своего
|
||||
дома у нормы этого шага теперь нет вовсе — она живёт комментариями в
|
||||
`scripts/check-go-version.sh`, и проверок у шага нет: двадцать сценариев снесены
|
||||
тем же решением. Второй самодельный
|
||||
шаг — `migrations` — не проверен и не был: он прогнан мутацией на трёх исходах
|
||||
(переписанный шаг, пустой каталог, чистое дерево), но регрессионных проверок у
|
||||
него нет, и дрейф его собственного шаблона имени никто не поймает. Долгом это
|
||||
не числится: проверок над проверками проект не заводит —
|
||||
@@ -115,7 +115,6 @@
|
||||
| Правило | Где механизировано |
|
||||
| --- | --- |
|
||||
| Проверка судит ответ по готовому ответу (`Result()`), а не по живой карте заголовков обработчика | `.golangci.yml` → `forbidigo` с `analyze-types`, находки только в `*_test.go`. Судит по типу приёмника (`httptest.ResponseRecorder`), поэтому ловит любую форму: цепочкой, через переменную, по индексу карты, обходом, полем `HeaderMap`. Остаётся ревью проверка, идущая мимо recorder — через свой `http.ResponseWriter` |
|
||||
| Каждый сценарий нормы шага сверки версий проверен мутацией, а не памятью | `scripts/check_go_version_test.go` — 20 сценариев шага плюс два его свойства: исход не зависит от установленного `go`, и шаг не зовёт ни `go`, ни `docker`, ни сеть |
|
||||
| Форма утверждения в проверках: «ожидалось» и «получено» не перепутаны местами, отказ судится `NoError`, а не `Nil`, `require` не зовут из горутины | `.golangci.yml` → `testifylint` |
|
||||
| Одновременный доступ проверен детектором, а не чтением кода | `Taskfile.yml` → шаг `tests` (`go test -race ./...`). Общее у воркеров — счётчики метрик, логгер и клиент бота; захват задачи в гонку не входит, он по построению её не даёт (одно состояние на воркер) — см. «Типовые ложноположительные» в [../review.md](../review.md). Что делает шаг без компилятора C и каким кодом краснеет — [CLAUDE.md](../../CLAUDE.md), «Гейт» |
|
||||
| Строчное подавление называет линтер и причину, а протухшее краснеет | `.golangci.yml` → `nolintlint` (`require-explanation`, `require-specific`, `allow-unused: false`) |
|
||||
|
||||
+3
-3
@@ -461,9 +461,9 @@ API и имя не откатываются обратной правкой по
|
||||
(`scripts/check-go-version.sh`). Сверяются четыре места, а не два, — `go.mod`,
|
||||
`Dockerfile`, `CLAUDE.md`, `README.md`: в этом дефекте трое из четырёх врали
|
||||
согласованно, и парная сверка не увидела бы документ, разошедшийся с
|
||||
согласованным кодом. Норму шага держат его собственные проверки
|
||||
(`scripts/check_go_version_test.go`): спека `toolchain`, бывшая его домом,
|
||||
упразднена 2026-08-13 — инструментарий спеками не нормируется.
|
||||
согласованным кодом. Нормативного дома у шага не осталось: спека `toolchain`
|
||||
упразднена 2026-08-13, тогда же снесены и его двадцать сценариев — норма живёт
|
||||
комментариями в самом скрипте.
|
||||
|
||||
## 2026-08-11 — норма требовала от сервиса недостижимого [пойман ревью]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user