- Зачем: - генератор должен писать события от модельной точки T0 и проверяться повторяемо в ClickHouse. - Что: - добавлены настройки модельного времени и передача модельной точки в live-тик. - дневной коэффициент считается по модельному времени и часовому поясу. - обновлены проверки, compose, документация и статус issue 02. - Проверка: - make generator-test. - два чистых ClickHouse-прогона с GEN_STATE_RESET=true дали одинаковые контрольные числа.
52 lines
3.3 KiB
Markdown
52 lines
3.3 KiB
Markdown
Status: ready-for-human
|
|
|
|
# Модельное время до ClickHouse
|
|
|
|
## Parent
|
|
|
|
`.scratch/generator-model-time-startup-history/PRD.md`
|
|
|
|
## What to build
|
|
|
|
Сделать минимальный живой поток, где генератор стартует от `T0`, пишет
|
|
`event_timestamp` по модельному времени и доводит события до ClickHouse
|
|
обычным путём стенда. Срез должен доказать не внутренний класс часов, а
|
|
наблюдаемое поведение: данные в ClickHouse начинаются от модельной точки и
|
|
повторяются при тех же настройках.
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] При фиксированных `GEN_SEED` и `T0` первый короткий прогон пишет события с
|
|
модельными `event_timestamp`, начинающимися около `T0`.
|
|
- [x] Повторный чистый прогон с теми же настройками даёт те же контрольные
|
|
числа в ClickHouse по правилу повторяемости из контракта задачи 1.
|
|
- [x] Повторный чистый прогон явно сбрасывает или обходит старое состояние
|
|
генератора, чтобы сервис не продолжил прошлый запуск из `generator_state`.
|
|
- [x] Расчёт дневного коэффициента в этом срезе больше не зависит от реального
|
|
часа запуска процесса.
|
|
- [x] Локальные тесты проверяют поведение через публичный интерфейс генератора
|
|
или сервиса, без привязки к внутреннему устройству часов.
|
|
- [x] Есть команда или короткая инструкция для координатора: поднять стенд,
|
|
прогнать поток, выполнить SQL-проверку в ClickHouse.
|
|
- [x] Документация запуска не утверждает, что `event_timestamp` равен
|
|
настенному времени.
|
|
|
|
## Решение
|
|
|
|
Живой сервис получает модельную точку из `GEN_MODEL_T0`, считает дневной
|
|
коэффициент по модельному времени и передаёт эту же точку в тиковый поток. После
|
|
успешного тика модельная точка сдвигается на
|
|
`GEN_TICK_SECONDS * GEN_MODEL_TIME_SPEED`.
|
|
|
|
Проверка ClickHouse выполнена двумя чистыми прогонами с `GEN_STATE_RESET=true`.
|
|
Оба раза получены одинаковые контрольные числа: 5 событий, диапазон
|
|
`event_ts = 2026-01-01 10:00:00.000000`, 5 уникальных `event_id` и 5 уникальных
|
|
`click_id`.
|
|
|
|
Риски по восстановлению state v2 оставлены для задачи 04: текущий срез
|
|
доказывает чистый live-старт, а не возобновление после сбоя.
|
|
|
|
## Blocked by
|
|
|
|
- `.scratch/generator-model-time-startup-history/issues/01-time-and-startup-history-contract.md`
|