- Зачем:
- стенду нужна повторяемая история с живым продолжением от модельной границы без дублей и разрыва визитов.
- Что:
- добавлен backfill-режим с `GEN_MODEL_T_END`, manifest и state на `T_end`.
- live-запуск восстанавливается из manifest без настенной дельты и проверяет совместимость state.
- добавлены SQL-проверки формы данных, повторяемости и стыка backfill с live.
- Проверка:
- make generator-test.
- два чистых ClickHouse-прогона backfill дали одинаковые manifest checksums и digest.
- reviewer gate issue 05 пройден после исправлений state/manifest.
- Зачем:
- рестарт генератора должен продолжать поток от модельной точки без дублей и смешивания state разных настроек.
- Что:
- state v2 хранит модельную и настенную метки, скорость, timezone, T0 и seed.
- live-восстановление считает модельную точку по настенной дельте и проверяет совместимость config.
- добавлен путь восстановления от T_end и тесты короткого и долгого простоя.
- Проверка:
- make generator-test.
- ClickHouse-сценарии короткого и долгого восстановления state.
- reviewer gate issue 04 пройден после исправления совместимости state.
- Зачем:
- генератор должен переживать рестарт без потери популяции пользователей и коротко прерванных активных визитов.
- Что:
- добавлен компактный state v2 для популяции, активных визитов и остатка бюджета рождений.
- сервис генератора переведён на единый тиковый поток с сохранением и восстановлением состояния.
- добавлена безопасная деградация для старого state v1 и битого state v2.
- покрыты короткий и долгий простой, reset состояния и валидация вложенного state.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
- git diff --check.
- Зачем:
- поток генератора должен соответствовать модели интенсивности и профилю сида перед реализацией состояния версии 2.
- Что:
- событийный бюджет тика переведён в рождения визитов через ожидаемую среднюю длину визита.
- дефолты интенсивности и обычный docker-compose запуск синхронизированы с целевыми 30 событиями в минуту.
- добавлены статистические проверки длины визита, воронки, новых пользователей, межсессионных пауз и долгого окна потока.
- обновлены README, OPERATIONS и карточка задачи 05.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
- git diff --check.
- Зачем:
- steady-stream генератору нужны устойчивые пользователи и возвраты между визитами, чтобы поток был похож на живую модель поведения.
- Что:
- добавлена ограниченная популяция с кулдауном возврата, ротацией новых пользователей и защитой от второго активного визита.
- UUID переведены на единый ГПСЧ генератора, а завершение визита считается по запланированному последнему событию.
- добавлены регрессионные тесты и обновлена документация генератора.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q
- Зачем:
- генератор должен выпускать события визита по запланированным тикам, не приклеивая весь визит к одному запуску.
- Что:
- добавлен тиковый слой `TickStreamGenerator` с активными визитами и выпуском созревших событий.
- добавлена валидация потолка активных визитов относительно потолка популяции.
- сохранён событийный смысл `event_budget` и добавлен регрессионный тест против разгона интенсивности.
- Проверка:
- `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed.