- Зачем: - тикет #38: состав мира должен быть чистой функцией зерна, а счётчики будущего манифеста — известны до генерации хоть одного события. - Что: - `world.py` — конфигурация мира одним модулем чистых данных: приток, недельная волна, профиль возвратов, доли покупателей и пар, D0. - `seeds.py` — иерархия подпотоков на `SeedSequence`: состав мира (ось и предыстория) отдельно от дней и их компонентов. - `plan.py` — ленивый план состава: когорта дня, аудитория дня из окна возвратов, гарантированные заказы пар, счётчики горизонта. Случайность — только целыми числами. - спека, раздел 1: вторая кука пары рождается по затухающему профилю возвратов; раздел 9: измеренные числа канонического мира, оценка накопленной аудитории поправлена с ≈60 до 68 тыс. - CONTEXT.md: термин «когорта дня»; README генератора — новые модули. - Проверка: - make test (295 тестов), make lint, make typecheck; - тесты проверены мутациями: 12 подмен в плане и конфигурации, каждая роняет ровно свой тест. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Генератор кликстрима
Клиентская сторона стенда: отсюда берётся поток событий — широкое событие по образцу облачной выгрузки Яндекс Метрики. Устройство и принятые решения — спека «Генератор (этап 2)».
Пока здесь контракт схемы события и план состава мира — событий генератор ещё не порождает.
Что где лежит
src/clickstream_generator/world.py— конфигурация мира: все его числа одним местом. Правка любого — смена мира; крутить их и предлагается.src/clickstream_generator/seeds.py— иерархия зёрен: кто из какого подпотока берёт случайность. На ней держится весь детерминизм.src/clickstream_generator/plan.py— план состава: кто есть в мире в день D. Когорты, приток, двухкуковые пары и счётчики — до генерации событий.src/clickstream_generator/schema.py— контракт схемы: чистые данные о колонках выгрузки. Собственность генератора; из него выводятся сам генератор, его валидация и описание выгрузки в доках.src/clickstream_generator/schema_doc.py— сборка «описания выгрузки» (docs/formats/clickstream-event.md) из контракта. Документ руками не правят — пересобирают.tests/— инварианты контракта, свежесть описания и обещания плана: чистота от зерна, приток, гарантия двухкуковых пар.
Команды
Из корня репозитория:
make test— тесты генератора;make lint— ruff: проверка и формат;make typecheck— ty: проверка типов;make docs— пересобрать описание выгрузки.
Python и зависимости — через uv, версии закреплены в uv.lock: на этом
держится обещание побайтовой воспроизводимости (спека, раздел 2).