- Зачем:
- чистый стенд должен строить аналитику из генерации, а не из архивного JSONL-сида.
- Что:
- добавлены команды generated-history-analytics и generated-history-check.
- обновлены README, operations и Superset-документы под путь generator backfill -> DM -> Superset.
- создан follow-up на миграцию учебных материалов с архивного сида.
- Проверка:
- make generated-history-analytics.
- make generated-history-check.
- reviewer gate issue 06 пройден без блокирующих находок.
- Зачем:
- стенду нужна повторяемая история с живым продолжением от модельной границы без дублей и разрыва визитов.
- Что:
- добавлен 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.
- Зачем:
- ускоренный стенд должен проходить больше модельного времени и давать соответствующий событийный бюджет.
- Что:
- расчёт интенсивности переведён на модельную длительность тика.
- добавлена устойчивая выборка бюджета при больших λ.
- усилены тесты ×K, дневного коэффициента и независимости от настенного часа.
- Проверка:
- make generator-test.
- review gate после issue 03 пройден после исправления underflow Poisson.
- Зачем:
- генератор должен писать события от модельной точки T0 и проверяться повторяемо в ClickHouse.
- Что:
- добавлены настройки модельного времени и передача модельной точки в live-тик.
- дневной коэффициент считается по модельному времени и часовому поясу.
- обновлены проверки, compose, документация и статус issue 02.
- Проверка:
- make generator-test.
- два чистых ClickHouse-прогона с GEN_STATE_RESET=true дали одинаковые контрольные числа.
- Зачем:
- нужно закрепить принятое человеком HITL-решение до кодовых задач 02-06.
- Что:
- добавлен рабочий контракт настроек, хода часов, state, манифеста и ClickHouse-проверки.
- выбран один живой ход часов через фиксированный модельный шаг без отдельной матрицы драйверов.
- уточнена граница стартовой истории как [T0, T_end) и закрыт чек-лист issue 01.
- Проверка:
- git diff --cached --check.
- Зачем:
- ревью выявило слабые места в критериях приёмки модельного времени.
- Что:
- уточнены правила повторяемости, чистого прогона и review gate.
- добавлены критерии для однородности визита через восстановление и T_end.
- обновлён handoff с важными рисками для следующего агента.
- Проверка:
- git diff --check.
- Зачем:
- нужен рабочий план для реализации модельного времени и стартовой истории.
- Что:
- добавлен parent PRD с инвариантами, зависимостями и review gate.
- добавлены шесть локальных issue для последовательной работы.
- добавлен handoff для продолжения в новой сессии.
- Проверка:
- git diff --check.
- Зачем:
- сохранить контекст сессии для продолжения работы в новой сессии.
- Что:
- добавлен handoff: что сделано и закоммичено, контекст вне артефактов, очередь шагов, ограничения.
- Проверка:
- чтение .scratch/handoffs/2026-06-14-adr0006-source-flip-and-model-time-spec.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- инвариант «время генератора ≡ реальное ×1» неудобен для учебного плана:
медленные явления (возвраты, воронка) не успеть показать на уроке, а
историческую глубину живой генератор не создаёт.
- Что:
- добавлен ADR-0005: модельные часы отвязаны от настенного времени, режимы
(живой ×1 / ускоренный ×K / заливка) — драйверы одного шва, правило 30 минут
переопределено в модельном времени; сид-продолжение помечено как будущее.
- в CONTEXT.md разведены три значения «сида» и добавлен термин модельного
времени и масштаба ×K.
- добавлен handoff с отложенным ревью петли и реконсиляцией мат-спеки.
- Проверка:
- прочитать docs/adr/0005-generator-model-clock.md и раздел «Три значения
слова сид» в CONTEXT.md; git log -1.
- Зачем:
- наблюдения по задаче 07 нужны для итоговой рефлексии эксперимента с субагентами.
- Что:
- добавлен вывод о роли reviewer-а в проверке силы интеграционного теста.
- Проверка:
- git diff -- .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
- Зачем:
- после калибровки потока и state v2 генератор нужно принять как рабочий steady-stream источник, а не как исторически сломанный прототип.
- Что:
- добавлен сервисный тест multi-event визита с мок-публикацией во все четыре Kafka-топика.
- compose позволяет переопределять демо-параметры генератора без правки файла, сохраняя внутренние контейнерные адреса.
- README, OPERATIONS, KNOWN_ISSUES и карточка задачи синхронизированы с новой моделью и state v2.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
- git diff --check.
- GEN_STATE_RESET=true GEN_POPULATION_MAX=123 docker compose config.
- Зачем:
- результаты первых циклов эксперимента нужно сохранить отдельно от рабочих изменений генератора.
- Что:
- зафиксированы выводы по саморевью, reviewer-субагенту и второму кругу ревью.
- описана классификация reviewer-находок перед отправкой worker-агенту.
- Проверка:
- git diff --stat -- .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
- Зачем:
- генератор должен переживать рестарт без потери популяции пользователей и коротко прерванных активных визитов.
- Что:
- добавлен компактный 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.
- Зачем:
- перед запуском задачи 05 нужно отделить координационные договорённости от будущих изменений генератора.
- Что:
- добавлен handoff с правилами эксперимента координатора и субагентов.
- уточнён порядок возврата к задаче состояния версии 2 после калибровки потока.
- Проверка:
- git diff -- .scratch/feature-data-generator/issues/06-state-v2-and-restart.md .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
- Зачем:
- 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.
- Зачем:
- перед задачей активных визитов нужно отделить модель генератора от сервисной обвязки.
- Что:
- добавлена спека уборки сервиса генератора перед задачей 03.
- добавлена промежуточная issue 02.5 с критериями приёмки.
- уточнены требования к Dockerfile и временному тиковому слою.
- задача 03 заблокирована новой задачей уборки.
- Проверка:
- просмотрен staged diff через `git diff --cached --stat`.
- Зачем:
- генератор должен создавать учебно полезный визит с общим click_id, правдоподобным путём и честным тиковым бюджетом событий.
- Что:
- добавлена марковская цепочка страниц, запланированные метки времени и потолок GEN_MAX_SESSION_EVENTS.
- добавлен набор тикового батча из нескольких визитов до рассчитанного бюджета событий.
- обновлены тесты, README, KNOWN_ISSUES и статусы задач 01/02.
- Проверка:
- uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q
- Зачем:
- переработку steady-stream генератора нужно передать агентам как набор
проверяемых вертикальных задач, а не как один крупный rewrite.
- Что:
- создан локальный набор из семи ready-for-agent задач для реализации новой
иерархической модели генератора.
- добавлен handoff с текущим состоянием обсуждения, рекомендуемым следующим
шагом через TDD и примером команды /goal для запуска задачи 01.
- Проверка:
- git diff HEAD~1 --stat.
- Зачем:
- продолжить работу над генератором в новой сессии без потери контекста.
- Что:
- .scratch/handoffs/2026-06-09-generator-rework.md: где остановились,
ссылки на ADR/спеку, следующий шаг, suggested skills, состояние git.
- Проверка:
- прочитать .scratch/handoffs/2026-06-09-generator-rework.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>