Files
clickstream-data-platform/docs/architecture/generator/seeds.md
T
ddadminandClaude Fable 5.1 59d8c83b17 docs(glossary): четыре термина переименованы, world.md и stand.md вычитаны
- Зачем:
  - справочники читает человек со стороны, а «пульт мира», «опись мира»,
    «работник» и «сырьё» звучали шуткой или калькой времён разработки
    (тикет #214, выбор владельца).
- Что:
  - CONTEXT.md: статьи «Паспорт мира», «Даги модельного времени»,
    «Шаговый даг», «Сырые данные», старые слова в строках «Избегать»;
    пометки в ADR 0005, 0008, 0009 без переписывания решений.
  - замены по README, справочникам, путеводителю, лабам, спекам,
    комментариям дагов и SQL, тегу дага и панели Grafana; имена в коде
    не тронуты.
  - world.md и stand.md: 35 находок вычитки внесены, регистр выровнен.
- Проверка:
  - make config-test; make lint в корне и в generator/; make test в
    generator/ (437 passed); скрипт ссылок из #212 пуст; grep старых
    слов вне ADR, research и CONTEXT.md пуст.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QBCtU38qSHg5DvgtnKXcW
2026-09-02 16:46:50 +03:00

3.9 KiB
Raw Blame History

Дерево зерен и порядок бросков

Этот документ отвечает на вопрос, почему место подпотока стабильно, а порядок бросков внутри него менять нельзя.

Два порядка

seeds.cohort_stream и seeds.day_stream находят ветвь по позиции SeedSequence(entropy, spawn_key). Поэтому результат ветви не зависит от того, какую соседнюю ветвь вычислили раньше.

Внутри найденной ветви живет один Generator. Каждый его вызов забирает следующие значения. Поэтому порядок вызовов меняет результат: прежний пятый бросок после вставки становится шестым и достается другому свойству мира.

Дерево целиком описано в модуле seeds, а seeds.Component задает его нижний уровень — четыре подпотока дня:

корневое зерно
├── состав мира
│   ├── ось событий → номер дня → когорта
│   └── предыстория → глубина → когорта до D0
└── дни
    └── номер дня
        ├── TRAFFIC
        ├── COMMERCE
        ├── ORDERS
        └── BEACONS — потеря и повторная отправка событий

Отрицательному дню нельзя отдать отрицательную позицию, поэтому предыстория получила отдельную ветвь. Компоненты дня тоже занимают позиции, а не получают зерна в порядке запуска.

Что ломает вставка

Новый бросок в середине функции сдвигает все последующие значения этого подпотока. Код продолжает работать, но тем же свойствам достается другая случайность. Соседние подпотоки остаются прежними, а измененная часть канонического мира проявляется в паспорте и побайтовом сравнении.

Какое обещание воспроизводимости это защищает, записано в спеке генератора, раздел 2. Здесь важно различать два свойства: SeedSequence стабилизирует адрес ветви, но порядок бросков внутри Generator стабилизирует только сам код.

Броски последними

Новое свойство продолжает существующий подпоток после прежних бросков. Такой бросок не отнимает значения у уже рассчитанных свойств. В plan.cohort паспорт куки был дописан после состава и назначенных заказов, а личность человека — после паспорта. Поэтому прежние ряды остались прежними.

Почему паспорт вообще принадлежит этой ветви, разобрано отдельно в документе о паспорте куки.