Files
clickstream-data-platform/CONTEXT.md
T
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

5.9 KiB

Кликстрим-платформа (стенд v2)

Словарь понятий проекта: одни и те же слова для одних и тех же вещей — у владельца, кода, документов и агентов. Только язык, никаких решений.

Язык

Хранилище: Аналитическая база стенда — кластер ClickHouse со слоями STG/ODS/DDS/DM. Принимающая сторона границы «трекер | хранилище»: нормализует имена и стили источников, строится по их документации. Избегать: склад, склад данных

Состав мира: Постоянная часть мира генератора — популяция посетителей, их привычки, двухкуковые пары. По дням его выдаёт план состава. Избегать: состояние мира

План состава: Способ спросить состав мира: функция зерна, выдающая его по дням — когорту новых кук, их возвраты, назначенные заказы двухкуковых пар.

Подпоток: Ветвь дерева случайности генератора: своё зерно у состава мира, у каждого дня и у каждого компонента дня. Подпоток задан позицией в дереве, а не порядком вычислений.

Конфигурация мира: Модуль чистых данных со всеми числами мира: приток, профили возвратов, доли покупателей, D0. Правка модуля — смена мира. Модуль-близнец контракта схемы: там колонки, здесь числа.

Когорта дня: Люди, впервые пришедшие в мир в один день, со всеми их куками и визитами. Единица плана состава: когорта — функция зерна и номера дня.

Приток: Появление новых кук на всём протяжении оси модельного времени; единица — кука (ClientID). Из-за притока накопленная аудитория растёт с горизонтом и не совпадает с дневной.

Хвост возвратов: Окно активности куки, отсчитанное от её первого визита; дольше окна кука не возвращается.

Предыстория: Когорты плана с первым визитом до D0; событий не порождают.

Ось модельного времени: Собственный календарь мира генератора. Дни считаются от фиксированного первого дня D0; реальный календарь в модели не участвует. Между прогонами живут только зерно и позиция на оси.

Пошаговый режим: Базовый способ движения по оси модельного времени: «прожить следующий день» — явное действие.

Живой день: Проигрывание текущего модельного дня в реальном времени с ускорением; включается по требованию, не постоянный фон.

Пакетный режим: Проигрывание готового дня пачкой, без темпа: заливка снимка при старте стенда, пересборки и проверки.

Граница суток: Единственный структурный шов модели: сессии режутся по ней, слепок заказов снимается на ней, день проживается только целиком.

Контракт схемы: Python-модуль с описателями колонок события — собственность генератора. Из него выводятся генератор, валидация и документация формата; хранилище строится по документации, не по модулю.

Нормализованное имя: Имя колонки источника, приведённое к нашему стилю (snake_case). Живёт в контракте схемы и в описании выгрузки. Не то же, что имя атрибута в модели данных: слой DDS складывает модель и называет атрибуты по ней.

Описание выгрузки: Публичная документация формата события: таблица колонок, собранная из контракта схемы. По ней пишется сторона хранилища — как в бою по документации источника. Правится только контракт, документ пересобирается. Избегать: описание схемы, документация контракта

Канонический сериализатор: Единственное место, где событие превращается в байты. Фиксированный порядок ключей и строк — основа побайтовой воспроизводимости.

Проигрыватель: Компонент доставки готового потока дня в приёмник. Два режима: пакетный (пачкой, без темпа) и живой день.