scripts: снесены проверки шага сверки версий Go
- Двадцать сценариев шага были единственной проверкой над проверкой в проекте; запрет CLAUDE.md остался без исключений. - Ссылки на файл сняты в памятке, конвенции линтеров, журнале ревью и статусе ADR о спеке toolchain; норма шага живёт комментариями в самом скрипте.
This commit is contained in:
@@ -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`) |
|
||||
|
||||
Reference in New Issue
Block a user