- Зачем:
- справочники читает человек со стороны, а «пульт мира», «опись мира»,
«работник» и «сырьё» звучали шуткой или калькой времён разработки
(тикет #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
3.9 KiB
Дерево зерен и порядок бросков
Этот документ отвечает на вопрос, почему место подпотока стабильно, а порядок бросков внутри него менять нельзя.
Два порядка
seeds.cohort_stream
и seeds.day_stream
находят ветвь по позиции SeedSequence(entropy, spawn_key). Поэтому результат
ветви не зависит от того, какую соседнюю ветвь вычислили раньше.
Внутри найденной ветви живет один Generator. Каждый его вызов забирает
следующие значения. Поэтому порядок вызовов меняет результат: прежний
пятый бросок после вставки становится шестым и достается другому свойству
мира.
Дерево целиком описано в модуле
seeds, а
seeds.Component
задает его нижний уровень — четыре подпотока дня:
корневое зерно
├── состав мира
│ ├── ось событий → номер дня → когорта
│ └── предыстория → глубина → когорта до D0
└── дни
└── номер дня
├── TRAFFIC
├── COMMERCE
├── ORDERS
└── BEACONS — потеря и повторная отправка событий
Отрицательному дню нельзя отдать отрицательную позицию, поэтому предыстория получила отдельную ветвь. Компоненты дня тоже занимают позиции, а не получают зерна в порядке запуска.
Что ломает вставка
Новый бросок в середине функции сдвигает все последующие значения этого подпотока. Код продолжает работать, но тем же свойствам достается другая случайность. Соседние подпотоки остаются прежними, а измененная часть канонического мира проявляется в паспорте и побайтовом сравнении.
Какое обещание воспроизводимости это защищает, записано в
спеке генератора, раздел 2. Здесь важно
различать два свойства: SeedSequence стабилизирует адрес ветви, но порядок
бросков внутри Generator стабилизирует только сам код.
Броски последними
Новое свойство продолжает существующий подпоток после прежних бросков. Такой
бросок не отнимает значения у уже рассчитанных свойств. В
plan.cohort паспорт
куки был дописан после состава и назначенных заказов, а личность человека —
после паспорта. Поэтому прежние ряды остались прежними.
Почему паспорт вообще принадлежит этой ветви, разобрано отдельно в документе о паспорте куки.