Files
transcriber/tasks/items/gate-changed-lines-coverage.md
T

43 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧹 Считать покрытие изменённых строк шагом гейта
- **Тип:** 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`.
## Вопросы
- **Какой порог и что считать изменённой строкой.** Варианты: сто процентов
изменённых строк (роняет на всякой ветке отказа, которую нечем изобразить),
порог ниже ста (число берётся из ниоткуда), только новые функции целиком.
Цена решения — частота ложных отказов гейта; пока решения нет, шаг заводить
нельзя.
## Рамки
Общее покрытие проекта не считаем и порога на него не ставим: он растёт от
тестов на тривиальное и не отвечает ни на один вопрос.