- Зачем:
- спека отвечает «почему», а жанра «как пройти устройство по коду»
не было (#48); черновик в generator/README.md ждал выверки.
- Что:
- новый набор docs/architecture/generator/: индекс с целевой картиной
и mermaid-схемой плюс шесть поддокументов по темам тикета.
- демо-модуль и цель make demo: канонический D0, все стадии цепочки
на одном экране; тест-сторож проверяет стадии без прибитых чисел.
- раздел «Как это работает» в generator/README.md сжат до ссылки
на путеводитель, черновая врезка снята.
- Проверка:
- из generator/: make lint, make typecheck, make test (430 passed),
make demo; два слепых ревью и узкая перепроверка — находки закрыты.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.3 KiB
Паспорт куки
Этот документ отвечает на вопрос, почему паспорт куки решает план состава, а день только разворачивает его в события.
plan.cohort получает
случайность через
seeds.cohort_stream
и вызывает plan._passports
в ветви «состав мира». Это не подпоток отдельного дня.
plan._passports выбирает строки устройства и города из справочников. У
двухкуковой пары город первой куки переносится во вторую, а устройство
выбирается из другой половины профилей. Сведения о парах есть только у плана.
Если независимо вывести паспорт каждой куки из ClientID, один человек может
оказаться в двух городах — это будет ложью в данных.
plan.Cohort хранит
номера устройства и города. Cohort.visitors_on переносит их в
plan.DayAudience, а
day.stream разворачивает
профили в колонки событий. День не бросает паспорт заново, поэтому кука
сохраняет его на всю жизнь.
Броски паспорта стоят после прежнего состава когорты. Правило такого продолжения подпотока описано в дереве зерен, а основания выбора самого паспорта — в спеке генератора, раздел 9. Зачем стенду нужна двухкуковая пара одного человека, фиксирует мастер-спека, раздел 5.