Колонка ParsedParamsKey1 входит в контракт выгрузки (мастер-спека, раздел
1.2), но генератор её не заполняет: в каждой строке пустой массив. Мастер-спека
сама называет естественное наполнение — вариант A/B-теста. Пока колонка пуста,
она ничему не учит; с вариантом появляется обычная аналитическая работа:
сравнить конверсию вариантов и решить, есть ли разница на самом деле.
Тикет заведён при исполнении #39 и в работу тогда не брался: вариант — это
константа куки, то есть третий массив паспорта в плане состава, а такой работы
ни одно задание не просило.
Что сделать
Вариант приписывается куке в плане состава, рядом с профилем устройства и
городом: человек не должен перескакивать между вариантами от визита к визиту.
Доля вариантов — число мира в world.py, не литерал в логике.
День-функция кладёт вариант в ParsedParamsKey1 каждой строки.
Броски приписываются последними, чтобы измеренные числа канонического мира не
сдвинулись, — проверяется прогоном счётчиков плана до и после, не на глазок.
Что решить в самом тикете
Сколько вариантов и в какой доле; идёт ли тест весь период снимка или с
какого-то дня.
Что делать с двухкуковой парой. Человек с двумя куками — один участник
теста, но вариант приписывается куке. Если паре выпадут разные варианты,
человек окажется в обоих сразу — в жизни это настоящая беда A/B-тестов, и
чинит её как раз склейка личности, на которой стоит лаба пар. Оба ответа
осмысленны: одинаковый вариант у пары — чистый тест, разный — материал для
лабы. Выбор владельца, решение записать в спеку.
Критерии приёмки
ParsedParamsKey1 заполнен во всех строках выгрузки, тип контракта не
менялся.
Вариант у куки один во всех её визитах и во все её дни — сторожится
тестом.
Доля вариантов вынесена в world.py с пояснением, тест сторожит связку.
Счётчики плана до и после правки совпадают: приток, границы дневной
аудитории, число посетителей за 14 дней, число пар.
Решение по паре и по составу теста записано в спеку генератора, раздел 9.
make lint, make typecheck, make test зелены.
Сначала прочитать
docs/specs/2026-07-30-stand-v2-realism.md, раздел 1.2 — контракт колонок.
docs/specs/2026-08-01-generator.md, разделы 2 и 9 — дисциплина случайности
и решения, принятые по ходу.
generator/src/clickstream_generator/plan.py — паспорт куки: как в #39
приписаны профиль устройства и город.
generator/src/clickstream_generator/day.py — где колонка заполняется.
Границы
Торговые события, конверсия и любые выводы «какой вариант лучше» — не здесь:
тикет даёт данные, а не анализ.
Key2..10 не заводятся: контракт берёт один уровень параметров.
Схема выгрузки не меняется — колонка уже есть.
## Зачем
Колонка `ParsedParamsKey1` входит в контракт выгрузки (мастер-спека, раздел
1.2), но генератор её не заполняет: в каждой строке пустой массив. Мастер-спека
сама называет естественное наполнение — вариант A/B-теста. Пока колонка пуста,
она ничему не учит; с вариантом появляется обычная аналитическая работа:
сравнить конверсию вариантов и решить, есть ли разница на самом деле.
Тикет заведён при исполнении #39 и в работу тогда не брался: вариант — это
константа куки, то есть третий массив паспорта в плане состава, а такой работы
ни одно задание не просило.
## Что сделать
- Вариант приписывается куке в плане состава, рядом с профилем устройства и
городом: человек не должен перескакивать между вариантами от визита к визиту.
- Доля вариантов — число мира в `world.py`, не литерал в логике.
- День-функция кладёт вариант в `ParsedParamsKey1` каждой строки.
- Броски приписываются последними, чтобы измеренные числа канонического мира не
сдвинулись, — проверяется прогоном счётчиков плана до и после, не на глазок.
## Что решить в самом тикете
- Сколько вариантов и в какой доле; идёт ли тест весь период снимка или с
какого-то дня.
- **Что делать с двухкуковой парой.** Человек с двумя куками — один участник
теста, но вариант приписывается куке. Если паре выпадут разные варианты,
человек окажется в обоих сразу — в жизни это настоящая беда A/B-тестов, и
чинит её как раз склейка личности, на которой стоит лаба пар. Оба ответа
осмысленны: одинаковый вариант у пары — чистый тест, разный — материал для
лабы. Выбор владельца, решение записать в спеку.
## Критерии приёмки
- [ ] `ParsedParamsKey1` заполнен во всех строках выгрузки, тип контракта не
менялся.
- [ ] Вариант у куки один во всех её визитах и во все её дни — сторожится
тестом.
- [ ] Доля вариантов вынесена в `world.py` с пояснением, тест сторожит связку.
- [ ] Счётчики плана до и после правки совпадают: приток, границы дневной
аудитории, число посетителей за 14 дней, число пар.
- [ ] Решение по паре и по составу теста записано в спеку генератора, раздел 9.
- [ ] `make lint`, `make typecheck`, `make test` зелены.
## Сначала прочитать
- `docs/specs/2026-07-30-stand-v2-realism.md`, раздел 1.2 — контракт колонок.
- `docs/specs/2026-08-01-generator.md`, разделы 2 и 9 — дисциплина случайности
и решения, принятые по ходу.
- `generator/src/clickstream_generator/plan.py` — паспорт куки: как в #39
приписаны профиль устройства и город.
- `generator/src/clickstream_generator/day.py` — где колонка заполняется.
## Границы
- Торговые события, конверсия и любые выводы «какой вариант лучше» — не здесь:
тикет даёт данные, а не анализ.
- `Key2..10` не заводятся: контракт берёт один уровень параметров.
- Схема выгрузки не меняется — колонка уже есть.
Отвязан от этапа 7 (#9): пересборки эталонного мира как события не будет — эталон зафиксирован равным стартовому (#192), и любая будущая правка мира пересобирает опись штатным порядком. Тикет живет сам по себе, к закрытию этапа не привязан.
Отвязан от этапа 7 (#9): пересборки эталонного мира как события не будет — эталон зафиксирован равным стартовому (#192), и любая будущая правка мира пересобирает опись штатным порядком. Тикет живет сам по себе, к закрытию этапа не привязан.
ddmitry
removed a dependency 2026-08-30 23:50:30 +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.
Зачем
Колонка
ParsedParamsKey1входит в контракт выгрузки (мастер-спека, раздел1.2), но генератор её не заполняет: в каждой строке пустой массив. Мастер-спека
сама называет естественное наполнение — вариант A/B-теста. Пока колонка пуста,
она ничему не учит; с вариантом появляется обычная аналитическая работа:
сравнить конверсию вариантов и решить, есть ли разница на самом деле.
Тикет заведён при исполнении #39 и в работу тогда не брался: вариант — это
константа куки, то есть третий массив паспорта в плане состава, а такой работы
ни одно задание не просило.
Что сделать
городом: человек не должен перескакивать между вариантами от визита к визиту.
world.py, не литерал в логике.ParsedParamsKey1каждой строки.сдвинулись, — проверяется прогоном счётчиков плана до и после, не на глазок.
Что решить в самом тикете
какого-то дня.
теста, но вариант приписывается куке. Если паре выпадут разные варианты,
человек окажется в обоих сразу — в жизни это настоящая беда A/B-тестов, и
чинит её как раз склейка личности, на которой стоит лаба пар. Оба ответа
осмысленны: одинаковый вариант у пары — чистый тест, разный — материал для
лабы. Выбор владельца, решение записать в спеку.
Критерии приёмки
ParsedParamsKey1заполнен во всех строках выгрузки, тип контракта неменялся.
тестом.
world.pyс пояснением, тест сторожит связку.аудитории, число посетителей за 14 дней, число пар.
make lint,make typecheck,make testзелены.Сначала прочитать
docs/specs/2026-07-30-stand-v2-realism.md, раздел 1.2 — контракт колонок.docs/specs/2026-08-01-generator.md, разделы 2 и 9 — дисциплина случайностии решения, принятые по ходу.
generator/src/clickstream_generator/plan.py— паспорт куки: как в #39приписаны профиль устройства и город.
generator/src/clickstream_generator/day.py— где колонка заполняется.Границы
тикет даёт данные, а не анализ.
Key2..10не заводятся: контракт берёт один уровень параметров.Отвязан от этапа 7 (#9): пересборки эталонного мира как события не будет — эталон зафиксирован равным стартовому (#192), и любая будущая правка мира пересобирает опись штатным порядком. Тикет живет сам по себе, к закрытию этапа не привязан.