- Зачем: - генератор должен создавать учебно полезный визит с общим click_id, правдоподобным путём и честным тиковым бюджетом событий. - Что: - добавлена марковская цепочка страниц, запланированные метки времени и потолок GEN_MAX_SESSION_EVENTS. - добавлен набор тикового батча из нескольких визитов до рассчитанного бюджета событий. - обновлены тесты, README, KNOWN_ISSUES и статусы задач 01/02. - Проверка: - uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q
38 lines
2.1 KiB
Markdown
38 lines
2.1 KiB
Markdown
Status: ready-for-human
|
||
|
||
# Минимальный связанный визит в новом ядре
|
||
|
||
## What to build
|
||
|
||
Построить первый проверяемый срез нового steady-stream генератора: публичный
|
||
вызов генеративного ядра создаёт один визит, который выглядит как нормальная
|
||
единица доменной модели `пользователь -> визит -> событие`.
|
||
|
||
Визит должен выпускать несколько связанных событий: один общий `click_id`,
|
||
разные `event_id`, общий device/geo-контекст и согласованные записи для четырёх
|
||
Kafka-топиков. Kafka на этом шаге не нужна: задача проверяет форму данных на
|
||
выходе генеративного ядра.
|
||
|
||
Источник решений: `docs/specs/2026-06-09-generator-rework-hierarchical.md`,
|
||
`docs/specs/2026-06-10-generator-math-model.md`, `CONTEXT.md`.
|
||
|
||
## Acceptance criteria
|
||
|
||
- [x] Тест через публичный интерфейс генератора создаёт один визит с несколькими
|
||
browser-событиями под одним `click_id`.
|
||
- [x] У всех событий визита разные валидные `event_id`, а `click_id` не берётся
|
||
из исходного сида.
|
||
- [x] Для каждого browser-события есть связанная location-запись с тем же
|
||
`event_id`.
|
||
- [x] Для каждого события визита публикуются device- и geo-записи с тем же
|
||
`click_id`; их содержимое в рамках визита одинаковое, как в сиде.
|
||
- [x] Один `click_id` связан ровно с одним `user_domain_id`.
|
||
- [x] Старый тестовый контракт "одно событие = один новый click_id" удалён или
|
||
заменён на новый контракт визита.
|
||
|
||
## Blocked by
|
||
|
||
None - can start immediately.
|
||
|
||
## Comments
|