feat(generator): добавлено модельное время live-потока

- Зачем:
  - генератор должен писать события от модельной точки T0 и проверяться повторяемо в ClickHouse.
- Что:
  - добавлены настройки модельного времени и передача модельной точки в live-тик.
  - дневной коэффициент считается по модельному времени и часовому поясу.
  - обновлены проверки, compose, документация и статус issue 02.
- Проверка:
  - make generator-test.
  - два чистых ClickHouse-прогона с GEN_STATE_RESET=true дали одинаковые контрольные числа.
This commit is contained in:
2026-06-14 17:23:12 +03:00
parent 31a71f93ea
commit efb07b0283
10 changed files with 248 additions and 18 deletions
@@ -1,4 +1,4 @@
Status: ready-for-agent
Status: ready-for-human
# Модельное время до ClickHouse
@@ -16,21 +16,36 @@ Status: ready-for-agent
## Acceptance criteria
- [ ] При фиксированных `GEN_SEED` и `T0` первый короткий прогон пишет события с
- [x] При фиксированных `GEN_SEED` и `T0` первый короткий прогон пишет события с
модельными `event_timestamp`, начинающимися около `T0`.
- [ ] Повторный чистый прогон с теми же настройками даёт те же контрольные
- [x] Повторный чистый прогон с теми же настройками даёт те же контрольные
числа в ClickHouse по правилу повторяемости из контракта задачи 1.
- [ ] Повторный чистый прогон явно сбрасывает или обходит старое состояние
- [x] Повторный чистый прогон явно сбрасывает или обходит старое состояние
генератора, чтобы сервис не продолжил прошлый запуск из `generator_state`.
- [ ] Расчёт дневного коэффициента в этом срезе больше не зависит от реального
- [x] Расчёт дневного коэффициента в этом срезе больше не зависит от реального
часа запуска процесса.
- [ ] Локальные тесты проверяют поведение через публичный интерфейс генератора
- [x] Локальные тесты проверяют поведение через публичный интерфейс генератора
или сервиса, без привязки к внутреннему устройству часов.
- [ ] Есть команда или короткая инструкция для координатора: поднять стенд,
- [x] Есть команда или короткая инструкция для координатора: поднять стенд,
прогнать поток, выполнить SQL-проверку в ClickHouse.
- [ ] Документация запуска не утверждает, что `event_timestamp` равен
- [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`