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

58 lines
5.0 KiB
Markdown

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