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>
This commit is contained in:
@@ -66,9 +66,12 @@
|
||||
дня D — функция (зерно, D), её случайность — подпоток состава мира,
|
||||
ветвящийся по номеру дня (позиция в дереве — раздел 2), отдельный от
|
||||
подпотока дня-функции. Аудитория дня — когорта D плюс возвраты когорт
|
||||
последних дней: окно активности куки — хвост возвратов (константа
|
||||
мира — раздел 9), отсчитанный от её первого визита; за краем окна кука
|
||||
не возвращается, а профиль возвратов затухает к краю, поэтому обрыв в
|
||||
последних дней: окно активности — хвост возвратов (константа мира —
|
||||
раздел 9), отсчитанный от первого визита человека и общий на обе его
|
||||
куки (уточнение при исполнении #38, 2026-08-02: окно от рождения
|
||||
каждой куки растянуло бы жизнь когорты вдвое, а с ней и загляд назад,
|
||||
которым ленивая форма и держится). За краем окна кука не
|
||||
возвращается, а профиль возвратов затухает к краю, поэтому обрыв в
|
||||
данных не виден. Стоимость дня не зависит от прожитого — день 500
|
||||
стоит как день 5, горизонт не является входом. Счётчики состава
|
||||
считаются прогоном плана по дням, без генерации событий.
|
||||
@@ -84,7 +87,8 @@
|
||||
зазора — по тому же затухающему профилю, что и возвраты (уточнение при
|
||||
исполнении #38, 2026-08-02): куку человек заводит, пока ещё ходит.
|
||||
Равные шансы по всему окну означали бы вторую куку у давно ушедшего
|
||||
человека — и вчетверо меньше пар, реализованных внутри снимка. Каждой паре план назначает дни гарантированных заказов: по
|
||||
человека — и вчетверо меньше пар, реализованных внутри снимка.
|
||||
Каждой паре план назначает дни гарантированных заказов: по
|
||||
одному на куку, из дней визитов этой куки, на оси от D0 и позже;
|
||||
человеку предыстории, чьё окно активности таких дней не оставляет,
|
||||
пара не назначается. День-функция обязана назначенные заказы
|
||||
@@ -161,7 +165,10 @@
|
||||
любой платформе — баг генератора, а не допуск.
|
||||
- **Раздача зерна — иерархией подпотоков.** Корневое зерно → подпоток
|
||||
состава мира, ветвящийся по номеру дня на когорты плана (состав
|
||||
спрашивается по дням — раздел 1; уточнение при исполнении #38);
|
||||
спрашивается по дням — раздел 1; уточнение при исполнении #38).
|
||||
Дни предыстории отрицательны, а позиция в дереве — неотрицательное
|
||||
целое, поэтому у предыстории своя ветвь состава, отдельная от оси
|
||||
(уточнение при исполнении #38, 2026-08-02);
|
||||
(зерно, день) → подпоток дня → именованные подпотоки компонентов: трафик,
|
||||
торговые события, расхождения, опоздания — в фиксированном порядке.
|
||||
По построению: параллельный прогон равен последовательному; продление
|
||||
@@ -403,30 +410,30 @@ pytest-тест с маркером `perf` и таймаутом-обрубан
|
||||
возвращающиеся — в среднем 3–4 возврата, профиль убывающий: почти все
|
||||
в первые 7–10 дней, тонкий хвост поздних возвратов и повторных
|
||||
покупок — до края окна (цикл повторной покупки магазина — месяцы).
|
||||
Хвост возвратов — окно активности куки от первого визита — и глубина
|
||||
предыстории: 90 дней (решение владельца 2026-08-02: дольше квартала
|
||||
стенд никто не гоняет, а заказы старых посетителей продолжаются весь
|
||||
прогон; плата — чуть меньше пар, полностью реализованных внутри
|
||||
14-дневного снимка). Покупатели считаются людьми,
|
||||
не куками; доля покупателей — 5% людей когорты, а людей в когорте
|
||||
почти столько же, сколько кук: вторые куки пар добавляют меньше
|
||||
процента. Доля — число плана, а не торгового тикета: без него не
|
||||
Хвост возвратов — окно активности человека от его первого визита,
|
||||
общее на обе его куки, — и глубина предыстории: 90 дней (решение
|
||||
владельца 2026-08-02: дольше квартала стенд никто не гоняет, а заказы
|
||||
старых посетителей продолжаются весь прогон; плата — чуть меньше пар,
|
||||
полностью реализованных внутри 14-дневного снимка). Покупатели
|
||||
считаются людьми, не куками; доля покупателей — 5% людей когорты, а
|
||||
людей в когорте почти столько же, сколько кук: вторые куки пар
|
||||
добавляют меньше процента. Доля — число плана, а не торгового тикета: без него не
|
||||
отобрать двухкуковые пары; #40 наследует его, не переоткрывая.
|
||||
Сходимость с разделом 5: средняя кука активна ≈1,9 дня → дневная
|
||||
аудитория ≈7 100 — середина вилки 6–8 тыс.; уникумов за 14 дней
|
||||
снимка ≈60 тыс. — ≈53 тыс. новыми куками плюс возвраты предыстории
|
||||
(не путать с ~50 тыс. событий одного дня) — рост `uniq(ClientID)` с
|
||||
горизонтом виден сразу; новых покупателей ~190 в день → конверсия
|
||||
~2% на сессию.
|
||||
снимка — под 70 тыс.: новые куки плюс возвраты предыстории (точные
|
||||
числа — в измерении ниже; не путать с ~50 тыс. событий одного дня) —
|
||||
рост `uniq(ClientID)` с горизонтом виден сразу; новых покупателей
|
||||
~190 в день → конверсия ~2% на сессию.
|
||||
- **D0 = 2026-06-01, понедельник** — решение владельца при нарезке
|
||||
(2026-08-01). Дата недавняя, чтобы данные первые месяцы выглядели
|
||||
свежими; привязки к реальному календарю у констант мира всё равно нет.
|
||||
- **Измерено на собранном плане** (#38, канонический мир, 14 дней):
|
||||
приток 3 828 кук в день в среднем, дневная аудитория 6 235–7 124 —
|
||||
обе величины в вилках раздела 5. Накопленная аудитория за снимок —
|
||||
68 тыс. кук: 53,6 тыс. новыми плюс 14,5 тыс. возвратами предыстории,
|
||||
а не ≈60 тыс., как оценивалось выше, — возвраты предыстории при
|
||||
оценке посчитали вдвое скромнее. Пар, у которых оба назначенных
|
||||
68 тыс. кук: 53,6 тыс. новыми плюс 14,5 тыс. возвратами предыстории
|
||||
(при нарезке возвраты предыстории оценили вдвое скромнее — отсюда
|
||||
ходившая раньше оценка ≈60 тыс.). Пар, у которых оба назначенных
|
||||
заказа попали внутрь 14 дней, — 170; остальные пары горизонт
|
||||
переживают, их вторая кука приходит позже. Цифры пересчитываются
|
||||
прогоном плана, событий для них не нужно.
|
||||
|
||||
Reference in New Issue
Block a user