Files
transcriber/docs/autotests.md
T
av 6c7f006e75 docs: инструменты гейта переехали в свой дом — docs/autotests.md
- перечень «Механизировано» и то, что осталось прозой, снято из конвенций: они
  про то, как писать код, а не про инструменты, которые его читают
- новый документ — дом темы ревью autotests, с границами: семантика гейта
  остаётся в CLAUDE.md, журнал дефектов и вопросы по темам — в review.md
- вопрос ревью о суждении по готовому ответу сужен до того, что машина не
  проверяет: до ответа мимо recorder
2026-08-13 07:35:58 +03:00

6.3 KiB
Raw Blame History

Автопроверки

Чем машина судит код: перечень свойств, доведённых до проверки, и место, где каждое настроено. Документ — дом темы ревью autotests: проход, которому эта тема досталась, читает его, а не перечисляет инструменты по памяти.

Тема заведена 2026-08-13. Прежде перечень лежал разделом «Механизировано» в conventions/README.md, и это был чужой дом: конвенции говорят, как писать код, а здесь речь об инструментах, которые его читают.

Границы дома

Что здесь есть и чего здесь нет — чтобы факт не жил в двух местах:

  • семантика гейта — команда целиком, база диффа, словарь кодов выхода, что красит безусловно, чего в гейте намеренно нет и кто тогда обязан это гонять — в CLAUDE.md, раздел «Гейт». Здесь это не повторяется: у гейта один дом, и он у памятки, потому что её читают прежде работы;
  • как писать кодconventions/. Свойство, ставшее правилом, оттуда удаляется и попадает в перечень ниже; обратный перенос запрещён — правило, оставшееся ещё и прозой, проверяют дважды;
  • настройка конвейера ревью и журнал дефектовreview.md. Оттуда берутся вопросы по темам, и перечень ниже говорит этим вопросам, чего спрашивать уже не нужно;
  • поведение сервиса — нормативные спеки openspec/specs/. У шага сверки версий Go поведение нормировано отдельно, спекой toolchain: это единственная проверка проекта, у которой есть своя capability.

Домов настройки четыре: .golangci.yml — линтеры и форматтер, lefthook.yml — проверки на pre-commit, Taskfile.yml — шаги гейта и их обёртки, scripts/ — единственный собственный скрипт проверки. Скрипты docs.py, tasks.py и openspec.py живут вне репозитория, в плагинах, и Taskfile знает их путями.

Механизировано

Проверяется командами из CLAUDE.md; прозой не дублируется и в промптах ревью не пересказывается.

Правило Где механизировано
Сравнение ошибок через errors.Is и errors.As, не == и не приведением типа .golangci.ymlerrorlint
Непроверенное возвращаемое значение ошибки .golangci.ymlerrcheck, включая присваивание в _ (check-blank). Отказ, который решено не проверять, объявляют в exclude-functions поимённо — там сегодня defer Close и send
Проверка судит ответ по готовому ответу (Result()), а не по живой карте заголовков обработчика .golangci.ymlforbidigo с analyze-types, находки только в *_test.go. Судит по типу приёмника (httptest.ResponseRecorder), поэтому ловит любую форму: цепочкой, через переменную, по индексу карты, обходом, полем HeaderMap. Остаётся ревью проверка, идущая мимо recorder — через свой http.ResponseWriter
Форматирование исходников .golangci.ymlgofmt
Подозрительные конструкции языка .golangci.ymlgovet, staticcheck, ineffassign, unused
Секреты в коммите lefthook.ymlgitleaks git --staged
Достижимая из кода уязвимость в зависимостях Taskfile.yml → шаг vulns (govulncheck ./...)
Раскладка документов, битые ссылки, изменённый шаг схемы без правки database.md docs.py check; каталог шагов задаёт ключ migrations в docs/.docs.json
Одно число версии Go в go.mod, Dockerfile, CLAUDE.md и README.md Taskfile.yml → шаг go-version (scripts/check-go-version.sh)

Не названное здесь место механизации означает, что проход по конвенциям будет добросовестно проверять уже проверенное.

Что остаётся прозой

Из перечисленного в записях конвенций правилом выражено одно — сравнение ошибок через errors.Is и errors.As (errorlint, строка таблицы выше). Прозой остаётся всё прочее: ни константный msg лога (sloglint), ни запрет fmt.Print* и os.Getenv (forbidigo заведён, но правило у него одно — о том, чем судят ответ в проверках; этих двух запретов в нём нет), ни запрет сторонних пакетов ошибок (depguard), ни архитектурные тесты-сканеры. Это следующий шаг переноса в правило: свойство, оставшееся прозой, проверяет человек на каждом ревью заново.