tasks: закрыта задача gate-extra-linters

- shellcheck, hadolint и мутационный тест скрипта сверки версий заведены, набор
  предкоммитных проверок назван в памятке
This commit is contained in:
av
2026-08-13 09:02:31 +03:00
parent 37ccda3677
commit 8bcd2c0059
2 changed files with 0 additions and 58 deletions
-57
View File
@@ -1,57 +0,0 @@
# 🧹 Завести недостающие проверки: shellcheck, hadolint и тест скрипта сверки версий
- **Тип:** chore
- **Категория:** Очередь — Инструмент: shellcheck и hadolint не ловят ничего из перечисленного выше и потому ждут.
- **Зачем:** Скрипты оболочки и Dockerfile машина не проверяет: shellcheck и hadolint не заведены, lefthook смотрит только gitleaks, а единственный исполняемый скрипт проекта на shell — scripts/check-go-version.sh — разбирали на ревью глазами построчно, потому что машине его показать нечем.
Собрана из двух источников: заметки владельца от 2026-08-12 про lefthook и
находки N-1 ревью `go-1-26-upgrade` про непроверенный скрипт сверки версий.
Собраны вместе, потому что правятся одним заходом: и то и другое — недостающие
проверки на файлы, которых сегодняшний гейт не видит.
Цена shellcheck замерена на прогоне 2026-08-12: shell-файлов в репозитории два,
в гейте из них один, единственное замечание — ложный `SC1007` на идиому
`CDPATH= cd`, и оно уже подавлено в скрипте директивой. То есть шаг стоит одной
строки.
Отдельная половина — **скрипт сверки версий не проверен ничем.** Его норма
(`openspec/specs/toolchain/spec.md`) описывает девятнадцать сценариев, а гейт
гоняет скрипт ровно на согласованном дереве, то есть проверяет один из них — тот,
где всё сошлось. Остальные восемнадцать подтверждены разовыми ручными прогонами
2026-08-12 и после первой же правки образца перестанут выполняться молча.
Проверки go (`go vet`, `gofmt`) в гейте уже есть; в заметке речь о том, чтобы
часть из них ловил и pre-commit, не дожидаясь полного прогона.
## Затрагивает
- `lefthook.yml` — набор предкоммитных проверок;
- набор шагов `task gate` в `Taskfile.yml`;
- новый тест-скрипт для `scripts/check-go-version.sh`;
- `Dockerfile` — как объект проверки hadolint, не правкой содержимого;
- семантика гейта в `CLAUDE.md`, раздел «Гейт», подраздел «чего в гейте
намеренно нет»;
- таблица «Механизировано» в `docs/conventions/README.md`.
## Критерии приёмки
- `shellcheck` краснеет на негодном скрипте оболочки. Оракул — внести в
`scripts/check-go-version.sh` неэкранированную переменную и прогнать шаг: он
краснеет; вернуть — зеленеет.
- `hadolint` краснеет на негодном `Dockerfile`. Оракул — тот же приём: снять
закрепление версии базового образа и прогнать шаг.
- Каждый сценарий нормы `toolchain` проверяется машиной, а не памятью. Оракул —
тест-скрипт мутирует дерево по одному сценарию за прогон; снять любую проверку
из `check-go-version.sh` — тест краснеет и называет сценарий.
- Предкоммитные проверки не дублируют гейт молча. Оракул — `CLAUDE.md`, раздел
«Гейт», называет, что именно ловит pre-commit и что остаётся только гейту.
- Гейт зелёный целиком. Оракул — `task gate`.
## Рамки
Мутационный тест работает на временной копии дерева: `t.TempDir()`-подход, в
`data/` не писать, рабочее дерево после прогона обязано остаться нетронутым.
Заметка владельца называет проверки go в lefthook, но полный набор `task gate` в
pre-commit не переносится: он идёт минуты, а pre-commit обязан быть быстрым.
Что именно из него дублировать — решение этой задачи, и его надо назвать.