Что не покрыто
Найдено мутационным тестированием при проверке PR #55. Дыра предсуществующая — воспроизводится на main (5626899), рефакторинг её не вносил.
Вызов проверки непрерывности dynamics из конвейера сбора:
if view is WordstatView.DYNAMICS:
self._assert_contiguous_dynamics_rows(dataset, granularity, date_from=date_from, date_to=date_to)
Замена тела на pass не роняет ни одного из 192 тестов.
Почему это важно
Сама функция покрыта подробно — tests/test_manifest_period.py вызывает её напрямую в 14 местах, включая регрессионные случаи по #26 и #35. Но её подключение к конвейеру не проверено ничем: если вызов пропадёт, тесты промолчат, а dynamics.parquet начнёт молча принимать ряды с пропущенными периодами.
Это тот же паттерн, что был найден в PR #42: единица протестирована, её место в системе — нет. Там он привёл к тому, что защита от stale blob удалялась бесследно.
Что нужно
Интеграционный тест: _collect_one (или _collect_pending_views) с dynamics-датасетом, где пропущен период внутри окна → ошибка, dynamics.parquet не записан. Мутация «заменить вызов на pass» обязана краснеть.
Проверить заодно, покрыт ли из конвейера парный вызов — проверка вхождения в запрошенный период (_assert_dynamics_rows_within_requested_period).
Что не покрыто
Найдено мутационным тестированием при проверке PR #55. Дыра предсуществующая — воспроизводится на
main(5626899), рефакторинг её не вносил.Вызов проверки непрерывности dynamics из конвейера сбора:
Замена тела на
passне роняет ни одного из 192 тестов.Почему это важно
Сама функция покрыта подробно —
tests/test_manifest_period.pyвызывает её напрямую в 14 местах, включая регрессионные случаи по #26 и #35. Но её подключение к конвейеру не проверено ничем: если вызов пропадёт, тесты промолчат, аdynamics.parquetначнёт молча принимать ряды с пропущенными периодами.Это тот же паттерн, что был найден в PR #42: единица протестирована, её место в системе — нет. Там он привёл к тому, что защита от stale blob удалялась бесследно.
Что нужно
Интеграционный тест:
_collect_one(или_collect_pending_views) сdynamics-датасетом, где пропущен период внутри окна → ошибка,dynamics.parquetне записан. Мутация «заменить вызов наpass» обязана краснеть.Проверить заодно, покрыт ли из конвейера парный вызов — проверка вхождения в запрошенный период (
_assert_dynamics_rows_within_requested_period).