Модель мира: что живёт между прогонами и как устроены модельные сутки #27
Notifications
Due Date
No due date set.
Blocks
#28 Детерминизм от зерна: что воспроизводимо и как зерно переживает параллельность
ddmitry/clickstream-data-platform
#29 Архитектура: источник истины схемы и разделение потока и пакета
ddmitry/clickstream-data-platform
#30 Производительность: числовые требования и чем их замерять
ddmitry/clickstream-data-platform
#32 Собрать спеку генератора из решений развилок
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#27
Reference in New Issue
Block a user
Part of #26.
Вопрос
Что в мире генератора живёт между прогонами (посетители, их привычки, история), а что рождается заново при каждом прогоне? Как устроены модельные сутки и переход к следующему дню?
Развилка отложена мастер-спекой (см. тикет #14). Смежные решения, которые модель мира должна уважать: N:1 «две куки» и константа «каждый двухкуковый покупатель заказывает с обеих кук» (раздел 5 мастер-спеки), правило «сессия режется по границе модельных суток» (раздел 6), «зерновой» мир конца этапа 2 (раздел 9).
Резолюция (сессия 2026-08-01, владелец подтвердил):
Мир функциональный, ничего не мутирует. Постоянный состав мира (популяция посетителей, привычки, календарь двухкуковых пар) — чистая функция зерна, вычисляется при старте любого процесса. День D — функция (зерно, D); межднёвные связи (окно заказов K, опоздания) выводятся из плана, а не копятся в состоянии. Глобальные инварианты (каждый двухкуковый заказал с обеих кук) гарантируются планом состава — счётчики манифеста известны до генерации событий.
Своя ось времени. Мир всегда рождается в фиксированный день D0; реальный календарь в модели не участвует. Между прогонами живут только зерно и позиция на оси (какой день прожит). Выключенный ноут — мир замер, потом продолжил.
Два режима движения времени на одной оси: пошаговый — базовый для лаб (старт с эталонного снимка ~недели, дальше «прожить следующий день» — явное действие); живой день — текущий день проигрывается с ускорением, дашборд и мониторинг «дышат». Живой режим — по требованию, не постоянный фон.
Граница суток — единственный структурный шов: сессии режутся по ней (дневная партиция самодостаточна), в конце модельного дня — слепок заказов. День проживается целиком: полдня не бывает; недожитый день при обрыве доигрывается или пересчитывается (деталь реализации).
Поток и пакет совместимы по построению: день-функция выдаёт один поток событий; режимы отличаются только способом проигрывания (пачкой или с темпом).
Отклонено с доводами:
Хвосты соседям: доставка эталонного снимка (через Kafka или напрямую в ClickHouse) — тикет #29; ускорение живого режима и длина эталонного снимка числами — тикет #30. Термины для CONTEXT.md при сборке спеки (#32): состав мира, ось модельного времени / D0, пошаговый режим, живой день, граница суток.