Status: ready-for-agent # Уборка сервиса генератора перед активными визитами ## What to build Разнести текущий `generator/generator.py` на понятные модули, не меняя внешнее поведение генератора. Цель — подготовить код к задаче 03, где появятся активные визиты между тиками. Источник решений: `docs/specs/2026-06-11-generator-service-cleanup.md`, `docs/specs/2026-06-10-generator-math-model.md`, задачи 01-03 в этом каталоге. ## Acceptance criteria - [ ] Генеративная модель визита отделена от Kafka, состояния, метрик и сервисного цикла. - [ ] Код загрузки и индексации JSONL-сида вынесен из сервисного слоя. - [ ] Расчёт интенсивности отделён от генерации одного визита. - [ ] Kafka publisher, Kafka-state и создание служебных топиков не смешаны с генеративной моделью. - [ ] `generator/generator.py` остаётся тонкой точкой входа или совместимым фасадом, чтобы не ломать запуск и тесты без причины. - [ ] `generate_tick_batch()` не остаётся в чистой генеративной модели визита: он вынесен в переходный тиковый слой и подготовлен к замене активными визитами в задаче 03. - [ ] Dockerfile и запуск контейнера обновлены под новую структуру файлов. - [ ] Все существующие тесты генератора проходят. - [ ] README генератора кратко отражает новую структуру файлов. ## Non-goals - Не реализовывать активные визиты между тиками. - Не добавлять популяцию пользователей и возвраты. - Не вводить состояние версии 2. - Не менять Kafka-топики и формат событий. - Не удалять `generator_batch_history`, если отдельно не доказано, что он больше не нужен. ## Blocked by - `.scratch/feature-data-generator/issues/02-visit-page-path-and-monotonic-time.md` ## Blocks - `.scratch/feature-data-generator/issues/03-tick-stream-with-active-visits.md` ## Comments Задача появилась после разбора распухания сервиса: первые два среза уже внесли новую модель визита, а третий срез добавит состояние активных визитов. Перед ним нужно отделить модель, тиковый слой и Kafka-интеграцию.