docs: autotests.md стал переносимым документом об автопроверках
- лестница механизации из пяти ступеней, два круга проверок, перечень правил таблицами по родам, перечень подавлений с причинами, порядок заведения правила; названы остатки правил и отклонённые подъёмы - утверждения «Механизировано» в четырёх записях конвенций и единые точки в architecture.md приведены к сегодняшнему состоянию; изъятие «транспорт знает адаптер хранилища» названо строкой - в журнал дефектов записаны две находки: узнавание конца потока по тексту и правило гейта, обходимое одной лишней строкой
This commit is contained in:
@@ -115,17 +115,27 @@ task gate # весь набор проверок разом
|
||||
2 ошибка употребления, 3 окружение (не корень проекта, каталог или файл не
|
||||
найден), 4 внутренний сбой. Последний своего словаря не заводит намеренно:
|
||||
четвёртый шаг с собственной семантикой сделал бы это утверждение неверным.
|
||||
Тому же словарю следуют **обёртки шагов** в `Taskfile.yml`: недостающий скрипт
|
||||
— отказ окружения, код 3. Наружу все эти коды приходят одним: сам `task` на
|
||||
Тому же словарю следуют **обёртки шагов** в `Taskfile.yml` — все, включая
|
||||
`shell`, `dockerfile` и `vulns`: недостающий инструмент — отказ окружения, код
|
||||
3. Сами чужие инструменты (`shellcheck`, `hadolint`, `govulncheck`,
|
||||
`golangci-lint`) держат свои коды, и гейту от них нужно только «ненулевой».
|
||||
Недостающий скрипт — отказ окружения, код 3. Наружу все эти коды приходят одним: сам `task` на
|
||||
любой отказ шага выходит с 201, а код шага печатает строкой
|
||||
(«exit status 3»), поэтому словарь читается по коду скрипта.
|
||||
- **Что красит безусловно и почему:** отказ сборки, тестов, `go vet`,
|
||||
неотформатированный файл, находка `golangci-lint`, расхождение объявленных
|
||||
версий Go, дрейф раскладки документов,
|
||||
дрейф каталога задач, форма `openspec/config.yaml`, достижимая из кода
|
||||
уязвимость в зависимостях (`govulncheck`). Машина проверяет всё
|
||||
уязвимость в зависимостях (`govulncheck`), находка `shellcheck` в скриптах
|
||||
оболочки и `hadolint` в `Dockerfile`. Машина проверяет всё
|
||||
перечисленное, и это не обсуждается. Шаг, чей скрипт не найден, краснеет с
|
||||
именем недостающего плагина, а не пропускается молча.
|
||||
- **Что ловит pre-commit, а что только гейт.** `lefthook.yml` гоняет на
|
||||
**затронутых файлах** дешёвую часть: `gofmt` (правит на месте и добавляет в
|
||||
коммит), `golangci-lint` по пакетам тронутых файлов, `shellcheck`, `hadolint`,
|
||||
`gitleaks` по индексу. Только гейту остаются сборка, `go vet`, тесты целиком,
|
||||
сверка версий Go, три сверки документов и `govulncheck`: они смотрят всё
|
||||
дерево либо требуют сети, а pre-commit обязан быть быстрым.
|
||||
- **Шагу `vulns` нужна сеть**, и он один такой: база уязвимостей живёт на
|
||||
vuln.go.dev. Без сети шаг краснеет, а не пропускается молча; сам инструмент
|
||||
ставится `go install golang.org/x/vuln/cmd/govulncheck@latest`. Судит он
|
||||
@@ -138,11 +148,10 @@ task gate # весь набор проверок разом
|
||||
которого образ перестаёт собираться, но собираемости не проверяет. Собрать
|
||||
образ по-прежнему может только человек — `task image`, и на подъёме версии
|
||||
это обязательно;
|
||||
- `shellcheck` — shell-скрипт в гейте один, `scripts/check-go-version.sh`; три
|
||||
соседних шага это Python в плагинах, и линтер оболочки к ним неприменим.
|
||||
Линтер не заведён, и цена ему одна строка шага плюс одно подавление ложного
|
||||
`SC1007` на идиому `CDPATH= cd`. Его не проверяет ничто, а это единственный
|
||||
исполняемый файл проекта, которого не видят ни `go vet`, ни `golangci-lint`;
|
||||
- собираемость `Dockerfile`: `hadolint` судит форму, а не сборку, и два его
|
||||
правила подавлены поимённо — `DL3007` до задачи `pin-runtime-image-base` и
|
||||
`DL3018` по существу (alpine не держит старые версии пакетов, закрепление
|
||||
ломает сборку через недели). Причины стоят строками в `Taskfile.yml`;
|
||||
- `gitleaks` — висит на pre-commit в `lefthook.yml` и смотрит только индекс
|
||||
коммита. Полную историю никто не проверяет;
|
||||
- согласованность документов между собой и с кодом — её судят агенты, зовёт
|
||||
|
||||
Reference in New Issue
Block a user