Files
clickstream-data-platform/generator
ddadminandClaude Opus 5 2502f906a8 fix(generator): правки по двум линиям ревью плана состава
- Зачем:
  - ревью нашло два места, где код и документы говорили неправду, и
    несколько мест, где имена или комментарии вводили в заблуждение.
- Что:
  - обещание докстроки `seeds.py` подкреплено тестом: адрес в дереве
    даёт тот же подпоток, что цепочка `spawn`.
  - в тесте гарантии пар убран сторож-тавтология, вместо него проверка,
    что заказы назначены с двух разных кук.
  - `Cohort.visitors_on` — «кто пришёл в день D» спрашивается у когорты,
    а не собирается снаружи из четырёх её массивов.
  - имена: `CLIENT_ID_LIMIT`, `_RETURN_*_CUMULATIVE`, `first_of_day`,
    `WEEKLY_PROFILE_PERCENT` — профиль недели один на весь мир, по нему
    же пойдёт трафик дня-функции (#39).
  - спека: в дерево зёрен внесена ветвь предыстории; окно активности —
    от первого визита человека, общее на обе куки (иначе загляд назад
    ленивой формы удваивается); оценка накопленной аудитории больше не
    спорит с измерением.
  - CONTEXT.md: «подпоток» и «конфигурация мира».
- Проверка:
  - make test (296), make lint, make typecheck; мутации перепроверены
    после переноса среза дня в `Cohort`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 12:33:27 +03:00
..

Генератор кликстрима

Клиентская сторона стенда: отсюда берётся поток событий — широкое событие по образцу облачной выгрузки Яндекс Метрики. Устройство и принятые решения — спека «Генератор (этап 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).