Этап 2 генератора: день мира стал функцией пары (зерно, номер дня). План состава отдаёт дневную аудиторию — день-функция превращает её в поток просмотров.
Что внутри
day.py — суточная волна в местном времени посетителя, визиты по документированным правилам нарезки, все 47 колонок выгрузки; шов для торговых событий — ряды page и product.
reference.py — справочники-литералы: профили устройств, города Поволжья с настоящими гео-id Яндекса, источники трафика, карта сайта.
catalog.py и data/catalog/products.csv — каталог на 180 позиций, общий у генератора и будущего словаря ClickHouse. Переехал сюда из #40 (решение 1 при исполнении).
weights.py — выбор по целым весам, один приём на план и на день.
Паспорт куки (устройство и город) переехал в план состава; броски приписаны последними, поэтому измеренные числа канонического мира не сдвинулись.
Словарь: «визит» закреплён за сессией, одноимённое понятие плана стало «днём активности».
README.md генератора — черновой раздел «Как это работает»: цепочка от зерна до строк событий и правило порядка бросков. Выверка языка — в #48.
Проверка
make lint, make typecheck, make test — 353 passed (было 297). Счётчики плана после правки те же: приток 3827,64/день, дневная аудитория 6235–7124, 68 119 посетителей за 14 дней, 170 двухкуковых пар. День 0 — 45 810 событий за 0,6 с, снимок 14 дней — 5,9 с при пороге 30 с на день.
Ревью
Две слепые линии — по коду и по задаче с вкусом. Десять находок (1 MAJOR, 8 MINOR, 1 NIT), все закрыты и перепроверены авторами находок. MAJOR: сторож детерминизма не замечал ни порядка колонок, ни швов page/product — теперь замечает, проверено мутацией. Ещё одна находка того же класса: тест правил нарезки доказывал склейку визитов, но не разрез.
Решения владельца при приёмке
Визит с обещанным планом заказом не режется полуночью, а сдвигается назад — принятое ограничение модели, цена названа в докстринге day.py.
ParsedParamsKey1 остаётся пустым; наполнение вариантом A/B-теста вынесено в #47.
Недельная волна доходит до трафика через дневную аудиторию, вторым множителем не применяется: размах ±7% против ±10% у притока. Тексты, обещавшие обратное, исправлены.
Этап 2 генератора: день мира стал функцией пары (зерно, номер дня). План состава отдаёт дневную аудиторию — день-функция превращает её в поток просмотров.
## Что внутри
- `day.py` — суточная волна в местном времени посетителя, визиты по документированным правилам нарезки, все 47 колонок выгрузки; шов для торговых событий — ряды `page` и `product`.
- `reference.py` — справочники-литералы: профили устройств, города Поволжья с настоящими гео-id Яндекса, источники трафика, карта сайта.
- `catalog.py` и `data/catalog/products.csv` — каталог на 180 позиций, общий у генератора и будущего словаря ClickHouse. Переехал сюда из #40 (решение 1 при исполнении).
- `weights.py` — выбор по целым весам, один приём на план и на день.
- Паспорт куки (устройство и город) переехал в план состава; броски приписаны последними, поэтому измеренные числа канонического мира не сдвинулись.
- Словарь: «визит» закреплён за сессией, одноимённое понятие плана стало «днём активности».
- `README.md` генератора — черновой раздел «Как это работает»: цепочка от зерна до строк событий и правило порядка бросков. Выверка языка — в #48.
## Проверка
`make lint`, `make typecheck`, `make test` — 353 passed (было 297). Счётчики плана после правки те же: приток 3827,64/день, дневная аудитория 6235–7124, 68 119 посетителей за 14 дней, 170 двухкуковых пар. День 0 — 45 810 событий за 0,6 с, снимок 14 дней — 5,9 с при пороге 30 с на день.
## Ревью
Две слепые линии — по коду и по задаче с вкусом. Десять находок (1 MAJOR, 8 MINOR, 1 NIT), все закрыты и перепроверены авторами находок. MAJOR: сторож детерминизма не замечал ни порядка колонок, ни швов `page`/`product` — теперь замечает, проверено мутацией. Ещё одна находка того же класса: тест правил нарезки доказывал склейку визитов, но не разрез.
## Решения владельца при приёмке
- Визит с обещанным планом заказом не режется полуночью, а сдвигается назад — принятое ограничение модели, цена названа в докстринге `day.py`.
- `ParsedParamsKey1` остаётся пустым; наполнение вариантом A/B-теста вынесено в #47.
- Недельная волна доходит до трафика через дневную аудиторию, вторым множителем не применяется: размах ±7% против ±10% у притока. Тексты, обещавшие обратное, исправлены.
Closes #39
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Зачем: план состава отдаёт дневную аудиторию, но событий у мира ещё не было.
День-функция превращает аудиторию в поток просмотров — на нём стоят лабы про
сборку визитов и про витрины, а следующий этап вешает на него торговые события.
Что:
- `day.py` — день как чистая функция зерна и номера дня: суточная волна в
местном времени посетителя, визиты по документированным правилам нарезки,
все 47 колонок выгрузки; шов для торговых событий — ряды `page` и `product`;
- `reference.py` — справочники-литералы: профили устройств, города Поволжья с
настоящими гео-id Яндекса, источники трафика, карта сайта;
- `catalog.py` и `data/catalog/products.csv` — каталог на 180 позиций, общий у
генератора и будущего словаря ClickHouse;
- `weights.py` — выбор по целым весам, один на план и на день;
- паспорт куки (устройство и город) переехал в план состава; броски приписаны
последними, поэтому измеренные числа канонического мира не сдвинулись;
- словарь: «визит» закреплён за сессией, одноимённое понятие плана стало
«днём активности»; статьи в `CONTEXT.md`;
- решения по ходу — в спеку генератора, раздел 9; наполнение
`ParsedParamsKey1` отложено тикетом #47.
Проверка: `make lint`, `make typecheck`, `make test` — 353 passed (было 297).
Счётчики плана после правки те же: приток 3827,64/день, дневная аудитория
6235–7124, 68 119 посетителей за 14 дней, 170 двухкуковых пар. День 0 —
45 810 событий за 0,6 с, снимок 14 дней — 5,9 с при пороге 30 с на день.
Две слепые линии ревью, десять находок, все закрыты и перепроверены.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Зачем: код генератора компактен, но нетривиален: многое в нём — соглашения, а
не конструкции, и чтением они не выводятся. Ближайшая опасность конкретна —
следующий этап трогает и план, и день, а вставка броска в середину функции
выглядит безобидно и молча меняет весь мир.
Что: цепочка от корневого зерна до строк событий; ленивость мира — когорта по
требованию и предыстория до D0, отсюда «любой день собирается сам по себе»;
правило порядка бросков внутри подпотока с механикой и способом обнаружения
промаха; причина целочисленной случайности со ссылкой на спеку. Раздел помечен
черновым: по сути верен, но на понятность читателем со стороны не выверен —
выверка вместе с полным путеводителем, тикет #48.
Проверка: `make lint` чист, `make test` — 353 passed; правка только в README.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ddmitry
merged commit 898e00474a into main2026-08-02 16:32:49 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Этап 2 генератора: день мира стал функцией пары (зерно, номер дня). План состава отдаёт дневную аудиторию — день-функция превращает её в поток просмотров.
Что внутри
day.py— суточная волна в местном времени посетителя, визиты по документированным правилам нарезки, все 47 колонок выгрузки; шов для торговых событий — рядыpageиproduct.reference.py— справочники-литералы: профили устройств, города Поволжья с настоящими гео-id Яндекса, источники трафика, карта сайта.catalog.pyиdata/catalog/products.csv— каталог на 180 позиций, общий у генератора и будущего словаря ClickHouse. Переехал сюда из #40 (решение 1 при исполнении).weights.py— выбор по целым весам, один приём на план и на день.README.mdгенератора — черновой раздел «Как это работает»: цепочка от зерна до строк событий и правило порядка бросков. Выверка языка — в #48.Проверка
make lint,make typecheck,make test— 353 passed (было 297). Счётчики плана после правки те же: приток 3827,64/день, дневная аудитория 6235–7124, 68 119 посетителей за 14 дней, 170 двухкуковых пар. День 0 — 45 810 событий за 0,6 с, снимок 14 дней — 5,9 с при пороге 30 с на день.Ревью
Две слепые линии — по коду и по задаче с вкусом. Десять находок (1 MAJOR, 8 MINOR, 1 NIT), все закрыты и перепроверены авторами находок. MAJOR: сторож детерминизма не замечал ни порядка колонок, ни швов
page/product— теперь замечает, проверено мутацией. Ещё одна находка того же класса: тест правил нарезки доказывал склейку визитов, но не разрез.Решения владельца при приёмке
day.py.ParsedParamsKey1остаётся пустым; наполнение вариантом A/B-теста вынесено в #47.Closes #39
🤖 Generated with Claude Code