- Зачем:
- режим кормления стенда порциями: менти триггерит «следующий день»,
видит полный цикл DWH за один шаг (задача 13, вариант 2 — генерация
от слепка T_end).
- Что:
- новый ограниченный режим next-day: восстановление мира из state,
генерация ровно [T_end, T_end+24h), публикация данные -> state ->
манифест (манифест — точка фиксации, автоотката нет).
- операция next-day в DAG generator_control: своя предпроверка границы
вместо clean-guard, идемпотентность через параметр expected_t_end.
- цепочка границ — накопительное поле boundaries в манифесте, старый
формат читается как [T0, T_end]; импорт не изменён.
- новая проверка цепочки (make generated-history-chain-check): непарные
счётчики и однородность по каждой границе, явный статус нулевого
стыка, хвост за границей по всем четырём топикам, литералы в UTC
с микросекундами.
- документация OPERATIONS.md: глагол, предпроверка, восстановление
после сбоя, ограничение retention; в задаче 13 — решения двух слепых
ревью постановки и кода с аргументами отклонений.
- Проверка:
- make test: 204 теста генератора + 31 контракт корня, зелёные.
- make generated-history-chain-check: зелёный, 2 внутренние границы,
непарные счётчики нулевые; учебный цикл: DM 322 -> 10026 -> 19196
за два next-day подряд.
- make generated-history-runtime-check (регрессия задачи 20): зелёный.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- нужен основной ручной интерфейс стенда для backfill/import/check без консольной матрицы переменных.
- Что:
- добавлен DAG generator_control с параметрами Airflow, ветвлением операций и ожиданием ETL.
- вынесена общая логика запуска и предпроверок генератора для Airflow.
- обновлены compose-настройки, зависимости, тесты и документация по пульту.
- Проверка:
- uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q.
- docker compose config --quiet.
- Зачем:
- стенду нужна повторяемая история с живым продолжением от модельной границы без дублей и разрыва визитов.
- Что:
- добавлен 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.
- Зачем:
- генератор должен писать события от модельной точки T0 и проверяться повторяемо в ClickHouse.
- Что:
- добавлены настройки модельного времени и передача модельной точки в live-тик.
- дневной коэффициент считается по модельному времени и часовому поясу.
- обновлены проверки, compose, документация и статус issue 02.
- Проверка:
- make generator-test.
- два чистых ClickHouse-прогона с GEN_STATE_RESET=true дали одинаковые контрольные числа.
- Зачем:
- поток генератора должен соответствовать модели интенсивности и профилю сида перед реализацией состояния версии 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.