docs(generator): уточнены задачи по модельному времени

- Зачем:
  - ревью выявило слабые места в критериях приёмки модельного времени.
- Что:
  - уточнены правила повторяемости, чистого прогона и review gate.
  - добавлены критерии для однородности визита через восстановление и T_end.
  - обновлён handoff с важными рисками для следующего агента.
- Проверка:
  - git diff --check.
This commit is contained in:
2026-06-14 16:12:46 +03:00
parent 796c3f26a9
commit 79c2c2657c
8 changed files with 67 additions and 17 deletions
@@ -21,15 +21,26 @@ Status: ready-for-human
- [ ] Выбраны имена и формат настроек для `T0`, скорости ×K и режима промотки
прошлого.
- [ ] Описан драйвер живых часов: модельное время идёт фиксированным шагом
`tick_seconds * K` или по измеренному настенному интервалу. Для каждого режима
записано, что именно считается повторяемым.
- [ ] Разделены уровни повторяемости: точная повторяемость промотки прошлого и
повторяемость живого режима по правилам выбранного драйвера часов.
- [ ] Описано, как после сбоя вычисляется модельная точка возобновления при ×K:
из сохранённой модельной метки, сохранённой настенной метки и скорости.
- [ ] Описано, что короткий и долгий простой считаются по модельному времени:
при большом ×K короткий настенный простой может стать долгим модельным.
- [ ] Описан манифест стартовой истории: минимум `GEN_SEED`, `T0`, `T_end`,
настройки генерации, версия state и контрольные числа.
- [ ] Описана граница `T_end`: где заканчивается прошлое и с какой метки
начинается живое продолжение, без дублей и дыр.
- [ ] Разделены модельные метки событий и настенные операционные метки сервиса.
- [ ] Зафиксирован часовой пояс модельных часов для дневного коэффициента.
- [ ] Решено, как координатор будет получать повторяемую ClickHouse-проверку:
через очистку данных или идемпотентный прогон.
- [ ] Если выбран чистый прогон, перечислены поверхности сброса: таблицы
ClickHouse, Kafka-топики данных и состояние генератора (`generator_state` или
явный сброс состояния при старте).
- [ ] Контракт записан в durable-документ: обновление `PRD.md`, короткий
design note в `.scratch/generator-model-time-startup-history/` или уточнение
спеки. Сам issue 01 только ссылается на источник истины.
@@ -19,7 +19,9 @@ Status: ready-for-agent
- [ ] При фиксированных `GEN_SEED` и `T0` первый короткий прогон пишет события с
модельными `event_timestamp`, начинающимися около `T0`.
- [ ] Повторный чистый прогон с теми же настройками даёт те же контрольные
числа в ClickHouse.
числа в ClickHouse по правилу повторяемости из контракта задачи 1.
- [ ] Повторный чистый прогон явно сбрасывает или обходит старое состояние
генератора, чтобы сервис не продолжил прошлый запуск из `generator_state`.
- [ ] Расчёт дневного коэффициента в этом срезе больше не зависит от реального
часа запуска процесса.
- [ ] Локальные тесты проверяют поведение через публичный интерфейс генератора
@@ -25,9 +25,12 @@ Status: ready-for-agent
- [ ] Событийный бюджет считается по модельной длительности тика, а не по
реальному времени сна процесса.
- [ ] Дневной коэффициент меняется при переходе модельного времени через
дневные/ночные часы, независимо от реального часа запуска.
дневные/ночные часы в зафиксированном часовом поясе, независимо от реального
часа запуска.
- [ ] ClickHouse-проверка показывает повторяемые контрольные числа при тех же
`GEN_SEED`, `T0`, скорости и настройках.
- [ ] Worker даёт промежуточный статус, если статистический прогон или стендовая
проверка занимает заметное время.
- [ ] В `generator/README.md` или `docs/OPERATIONS.md` кратко описано, что ×K
ускоряет именно модельное время стенда.
@@ -21,18 +21,23 @@ Status: ready-for-agent
- [ ] State сохраняет достаточно данных, чтобы после сбоя вычислить модельную
точку возобновления при ×K.
- [ ] Восстановление после короткого сбоя продолжает активные визиты и досылает
созревшие события с исходными модельными метками.
- [ ] Восстановление после долгого сбоя закрывает сильно просроченные активные
визиты без досылки остатка.
- [ ] Восстановление после короткого модельного сбоя продолжает активные визиты
и досылает созревшие события с исходными модельными метками.
- [ ] Восстановление после долгого модельного сбоя закрывает сильно просроченные
активные визиты без досылки остатка.
- [ ] Восстановление из стартовой истории использует `T_end` как точку
возобновления и не обрывает активные визиты из-за настенного простоя.
- [ ] Визит, переживший восстановление, остаётся однородным: события до и после
восстановления не меняют контекст визита и не создают второй путь генерации
внутри одного `click_id`.
- [ ] Повреждённый или несовместимый state не валит сервис: генератор стартует
с чистого листа и пишет предупреждение.
- [ ] ClickHouse-проверка подтверждает, что на стыке восстановления нет дублей
событий и нет разрыва `click_id` внутри продолжающегося визита.
- [ ] После реализации выполнено саморевью worker-а и отдельное reviewer-ревью,
потому что задача меняет state/serialization и сервисное восстановление.
- [ ] Если исправление после ревью меняет формат state или способ восстановления,
выполнен повторный reviewer-круг.
## Blocked by
@@ -21,8 +21,9 @@ Status: ready-for-agent
- [ ] Промотка прошлого создаёт события за `[T0, T_end]`, слепок состояния и
манифест с контрольными данными.
- [ ] При одинаковых `GEN_SEED`, `T0`, `T_end` и настройках результат промотки
повторяем в пределах согласованных допусков.
- [ ] При одинаковых `GEN_SEED`, `T0`, `T_end` и настройках артефакт промотки
прошлого повторяем точно; проверки в ClickHouse следуют правилам допуска из
контракта задачи 1.
- [ ] История загружается в ClickHouse штатной или явно описанной командой.
- [ ] SQL-проверка показывает здоровую пирамиду: пользователей меньше, чем
визитов, визитов меньше, чем событий.
@@ -35,8 +36,12 @@ Status: ready-for-agent
согласованном коридоре.
- [ ] Живое продолжение после `T_end` не создаёт дублей на границе и не выглядит
как независимый второй мир.
- [ ] Визиты, которые переходят через `T_end`, остаются однородными: контекст
визита не меняется на стыке стартовой истории и живого продолжения.
- [ ] Подготовлены данные, команды и SQL-проверки, достаточные для внешнего
review gate по распределениям и двум путям генерации из `PRD.md`.
- [ ] Worker даёт промежуточный статус, если промотка, загрузка в ClickHouse или
распределительные проверки занимают заметное время.
## Blocked by
@@ -38,6 +38,8 @@ STG→ODS→DDS→DM строится на ней, а Superset работает
описывают архивный сид как основной источник аналитики.
- [ ] Если уроки или дашборды требуют нетривиальной переделки, создан follow-up
issue вместо расширения этой задачи.
- [ ] Если учебные материалы ещё описывают архивный сид как основной источник,
создан отдельный follow-up на миграцию уроков по ADR-0006.
- [ ] Описан повторный чистый прогон: какие данные очищаются и какие команды
выполняются, чтобы координатор мог надёжно перепроверить результат.