Files
transcriber/tasks/items/gate-extra-linters.md
T
av d676df8a27 tasks: закрыта задача go-1-26-upgrade, заведён урожай ревью
- четыре задачи из находок ревью и заметки владельца: проверки shellcheck и
  hadolint с тестом скрипта сверки версий, закрепление рантайм-базы образа,
  коды выхода шагов гейта, настройка конвейера ревью
- INBOX разобран целиком и очищен
2026-08-12 14:26:07 +03:00

4.8 KiB

🧹 Завести недостающие проверки: 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 обязан быть быстрым. Что именно из него дублировать — решение этой задачи, и его надо назвать.