Files
transcriber/tasks/items/gate-extra-linters.md
T
av 8739b18a9f tasks: очередь расставлена от базы к деталям
- порядок беклога и роадмапа назначен слоями: проверки, которым можно
  верить → долги входа → владелец записи и контракт API → конвейер под
  тестами → приложение и возможности поверх; у каждого движения записана
  причина;
- заведены восемь задач под пункты «Завершения», которых не закрывала ни
  одна запись, — цель any-audio-source была без задач вовсе;
- у четырёх задач сняты критерии, требовавшие того, что делает задача ниже
  по очереди; исправлены ссылки на несуществующий repo/sqlite и на
  отменённую разведку об очереди.
2026-08-12 20:48:53 +03:00

5.0 KiB

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