- четыре задачи из находок ревью и заметки владельца: проверки shellcheck и hadolint с тестом скрипта сверки версий, закрепление рантайм-базы образа, коды выхода шагов гейта, настройка конвейера ревью - INBOX разобран целиком и очищен
58 lines
4.8 KiB
Markdown
58 lines
4.8 KiB
Markdown
# 🧹 Завести недостающие проверки: shellcheck, hadolint и тест скрипта сверки версий
|
|
|
|
- **Тип:** chore
|
|
- **Категория:** Очередь
|
|
- **Зачем:** Скрипты оболочки и 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 обязан быть быстрым.
|
|
Что именно из него дублировать — решение этой задачи, и его надо назвать.
|