- порядок беклога и роадмапа назначен слоями: проверки, которым можно верить → долги входа → владелец записи и контракт API → конвейер под тестами → приложение и возможности поверх; у каждого движения записана причина; - заведены восемь задач под пункты «Завершения», которых не закрывала ни одна запись, — цель any-audio-source была без задач вовсе; - у четырёх задач сняты критерии, требовавшие того, что делает задача ниже по очереди; исправлены ссылки на несуществующий repo/sqlite и на отменённую разведку об очереди.
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 обязан быть быстрым.
Что именно из него дублировать — решение этой задачи, и его надо назвать.