Status: ready-for-human # Поток по тикам с активными визитами ## What to build Разложить визиты по тикам генератора. Визит может жить дольше одного тика: генератор хранит активные визиты между вызовами, выпускает только те события, чьё запланированное время наступило, и не приклеивает все события к текущему тику. Задача проверяет основную потоковую механику без Kafka и без восстановления после рестарта. Источник решений: `docs/specs/2026-06-10-generator-math-model.md`, раздел «Раскладка по тикам». ## Acceptance criteria - [x] Тест через публичный интерфейс генератора показывает, что один `click_id` может появляться в выходе нескольких последовательных тиков. - [x] На каждом тике выпускаются только созревшие события активных визитов. - [x] `event_timestamp` отражает запланированное время события, а не время фактической отправки тика. - [x] Завершённые визиты больше не выпускают события в следующих тиках. - [x] При достижении потолка активных визитов новые рождения в этот тик пропускаются, а бюджет не копится бесконечно. - [x] Конфигурация запрещает состояние, где потолок активных визитов не меньше потолка популяции пользователей. ## Blocked by - `.scratch/feature-data-generator/issues/02-visit-page-path-and-monotonic-time.md` - `.scratch/feature-data-generator/issues/02-5-generator-service-cleanup.md` ## Comments 2026-06-11: реализовано через `TickStreamGenerator` в тиковом слое. Проверка: `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed. После ревью исправлено: входной `event_budget` снова трактуется как бюджет событий, а не как число рождений визитов.