From 8bcd2c0059819418162c00f398e12652327148f0 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Thu, 13 Aug 2026 09:02:31 +0300 Subject: [PATCH] =?UTF-8?q?tasks:=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20gate-extra-lint?= =?UTF-8?q?ers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - shellcheck, hadolint и мутационный тест скрипта сверки версий заведены, набор предкоммитных проверок назван в памятке --- tasks/BACKLOG.md | 1 - tasks/items/gate-extra-linters.md | 57 ------------------------------- 2 files changed, 58 deletions(-) delete mode 100644 tasks/items/gate-extra-linters.md diff --git a/tasks/BACKLOG.md b/tasks/BACKLOG.md index 04956d9..4f1aef5 100644 --- a/tasks/BACKLOG.md +++ b/tasks/BACKLOG.md @@ -91,7 +91,6 @@ - [🔬 Уведомление SpeechKit о готовности вместо опроса](items/speechkit-callback-fit.md) — Шаг проверки дёргает операцию раз в 5 секунд всё время распознавания: часовая запись даёт порядка 720 обращений к платному сервису вместо одного ответа. - [✨ Считать объём, минуты и расход по каждому пользователю](items/usage-accounting.md) — Ни объём, ни длительность, ни обращения к платным сервисам никуда не записываются: восстановить расход задним числом не из чего. - [✨ Сделать страницу статистики для владельца](items/admin-stats-screen.md) — Собранный учёт читается только запросом к базе руками: ни страницы, ни признака владельца в приложении нет. -- [🧹 Завести недостающие проверки: shellcheck, hadolint и тест скрипта сверки версий](items/gate-extra-linters.md) — Скрипты оболочки и Dockerfile машина не проверяет: shellcheck и hadolint не заведены, lefthook смотрит только gitleaks, а единственный исполняемый скрипт проекта на shell — scripts/check-go-version.sh — разбирали на ревью глазами построчно, потому что машине его показать нечем. - [🧹 Закрепить версию рантайм-базы образа](items/pin-runtime-image-base.md) — Финальный слой Dockerfile собирается на alpine:latest, а task image идёт с --pull, поэтому два образа из одного коммита с разницей в неделю несут разный ffmpeg — регрессия конвертации после такой пересборки выглядит как задачи в failed при пустом диффе репозитория, и откат на прежний коммит её не чинит. - [🧹 Настроить конвейер ревью по итогам прогона go-1-26-upgrade](items/review-config-from-go-upgrade.md) — Прогон вскрыл две прорехи настройки: «Типовые узлы» знают только рантайм и не знают рода «проверочный шаг набора проверок», а «Триггеры метки» не видят оси «изменение трогает канон» — и именно она дала обе блокирующие находки. - [🐞 Починить срок сессии, который ставит откат шага входа](items/rollback-restores-wrong-session-duration.md) — Константа defaultAuthTokenDuration в шаге 202608120001 названа умолчанием библиотеки, но 1209600 — это 14 суток, а умолчание PocketBase 432000, пять суток: откат объявляет возврат к умолчанию и ставит срок вдвое больше выбранных владельцем семи. diff --git a/tasks/items/gate-extra-linters.md b/tasks/items/gate-extra-linters.md deleted file mode 100644 index 90ef1b6..0000000 --- a/tasks/items/gate-extra-linters.md +++ /dev/null @@ -1,57 +0,0 @@ -# 🧹 Завести недостающие проверки: 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 обязан быть быстрым. -Что именно из него дублировать — решение этой задачи, и его надо назвать.