- Зачем: - генератор должен выпускать события визита по запланированным тикам, не приклеивая весь визит к одному запуску. - Что: - добавлен тиковый слой `TickStreamGenerator` с активными визитами и выпуском созревших событий. - добавлена валидация потолка активных визитов относительно потолка популяции. - сохранён событийный смысл `event_budget` и добавлен регрессионный тест против разгона интенсивности. - Проверка: - `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed.
42 lines
2.5 KiB
Markdown
42 lines
2.5 KiB
Markdown
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` снова трактуется
|
|
как бюджет событий, а не как число рождений визитов.
|