заведены задачи из урожая ревью и заметок владельца

This commit is contained in:
av
2026-08-12 09:01:31 +03:00
parent 5f1273292a
commit 07433bb9f9
21 changed files with 355 additions and 0 deletions
@@ -0,0 +1,42 @@
# 🧹 Считать покрытие изменённых строк шагом гейта
- **Тип:** chore
- **Категория:** Очередь
- **Зачем:** Свойство «изменённое место покрыто хоть одним тестом» записано в docs/review.md, но не механизировано: за две задачи подряд непокрытые шаги ловили руками.
- **Теги:** question
`CLAUDE.md`, раздел «Гейт», объявляет прямо: «покрытие изменённых строк не
считается ничем». Цена этого измерена дважды. В задаче
`http-handler-tests-never-green` тесты обработчика не были зелёными ни разу; в
`pocketbase-storage` два из трёх шагов конвейера переписали целиком и не
выполнили ни одним тестом — нашёл это проход ревью, а не машина.
## Затрагивает
- набор шагов `task gate` в `Taskfile.yml` и переменная `BASE` как база диффа;
- семантика гейта в `CLAUDE.md`, раздел «Гейт», строка про покрытие;
- `docs/review.md`, раздел настройки конвейера: чем проход `autotests` перестаёт
заниматься руками.
## Критерии приёмки
- Изменённая строка без покрытия роняет гейт. Оракул — прогон на дереве, где в
тронутый файл добавлена заведомо невыполняемая ветка: шаг краснеет с её
адресом.
- Изменение, не трогающее код, шаг не гоняет. Оракул — `task gate` на дереве с
правкой одной только документации: шаг сообщает о пропуске с причиной.
- Порог назван числом в `CLAUDE.md` и совпадает с тем, что проверяет шаг. Оракул
`task gate`, шаг `docs.py check`.
## Вопросы
- **Какой порог и что считать изменённой строкой.** Варианты: сто процентов
изменённых строк (роняет на всякой ветке отказа, которую нечем изобразить),
порог ниже ста (число берётся из ниоткуда), только новые функции целиком.
Цена решения — частота ложных отказов гейта; пока решения нет, шаг заводить
нельзя.
## Рамки
Общее покрытие проекта не считаем и порога на него не ставим: он растёт от
тестов на тривиальное и не отвечает ни на один вопрос.