Files
clickstream-ch-kafka-supers…/.scratch/generator-model-time-startup-history/PRD.md
T
ddadmin 79c2c2657c docs(generator): уточнены задачи по модельному времени
- Зачем:
  - ревью выявило слабые места в критериях приёмки модельного времени.
- Что:
  - уточнены правила повторяемости, чистого прогона и review gate.
  - добавлены критерии для однородности визита через восстановление и T_end.
  - обновлён handoff с важными рисками для следующего агента.
- Проверка:
  - git diff --check.
2026-06-14 16:12:46 +03:00

96 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Модельное время и стартовая история генератора
Status: Draft
## Зачем
Нужно довести решение ADR-0005 и ADR-0006 до рабочего процесса: генератор живёт
по модельному времени, умеет быстро создать прошлое, сохранить слепок состояния
и продолжить поток так, чтобы результат был проверяем в ClickHouse.
Источник решений:
- `docs/specs/2026-06-14-generator-model-time-and-startup-history.md`
- `docs/adr/0005-generator-model-clock.md`
- `docs/adr/0006-generation-as-sole-analytics-source.md`
- `docs/research/2026-06-11-subagent-coordinator-experiment.md`
## Общие правила приёмки
- Каждый кодовый срез должен заканчиваться проверкой через ClickHouse, а не
только локальными тестами генератора.
- Кодовые AFK-задачи идут через `/tdd`: один поведенческий тест, минимальная
реализация, зелёная проверка. HITL- и документные задачи идут через
обсуждение и фиксацию решения, без искусственного теста.
- Координатор не работает в `/goal` на всю цепочку. Один worker получает один
issue, не коммитит и не реализует следующие задачи.
- После реализации worker делает саморевью без правок. Координатор
классифицирует находки и возвращает только обязательные исправления.
- В задачах 03 и 05 worker заранее даёт промежуточный статус, если статистический
прогон или стендовая проверка идут долго.
- Если исправление после review gate меняет дизайн, формат state, манифест или
схему проверки, результат исправления проходит повторный review gate.
- Коммиты делает координатор после своих проверок и `git status --short`.
- Ручная проверка дашбордов глазами выполняется только в конце всей цепочки.
## Сквозные инварианты
- `event_timestamp` — модельное время, а не настенные часы компьютера.
- Операционные метки сервиса, история пачек, метрики здоровья и длительность
тика остаются настенным временем, если отдельная задача не докажет обратное.
- Контракт задачи 1 должен разделить, где повторяемость точная, а где
статистическая: промотка прошлого должна быть точной, живой режим зависит от
выбранного драйвера часов.
- При ×K модельное время и событийный бюджет идут по модельной длительности
тика, а не по реальной длительности сна процесса.
- Часовой пояс модельных часов явно задан в контракте; дневной коэффициент
считается по нему, а не по неявному локальному времени.
- После сбоя точка возобновления считается из сохранённой связки модельного и
настенного времени, а не простым `datetime.now()`.
- Стартовая история — это события плюс слепок состояния плюс манифест, чтобы не
смешать данные от разных `GEN_SEED`, `T0` и `T_end`.
- На стыке `[T0, T_end]` и живого продолжения не должно быть дублей и дыр.
- Повторная проверка на чистом стенде должна быть воспроизводимой: либо команда
явно чистит ClickHouse, Kafka-топики данных и состояние генератора, либо
процесс идемпотентен.
## Задачи
1. `issues/01-time-and-startup-history-contract.md` — контракт модельного
времени и стартовой истории.
2. `issues/02-model-time-to-clickhouse.md` — минимальный поток по модельному
времени до ClickHouse.
3. `issues/03-model-speed-and-day-factor.md` — ×K и дневной коэффициент по
модельному времени.
4. `issues/04-state-v2-model-resume.md` — восстановление state v2 от модельной
точки возобновления.
5. `issues/05-startup-history-backfill-to-clickhouse.md` — промотка прошлого,
стартовая история и живое продолжение до ClickHouse.
6. `issues/06-generated-history-as-analytics-source.md` — штатный путь стенда
переводится на стартовую историю как источник аналитики.
## Контрольные точки
- После задачи 3 нужен внешний review gate по сквозному инварианту времени:
проверить, где ещё остались настенные часы, и не расходятся ли живой путь,
расчёт интенсивности и сохранение состояния.
- После задачи 5 нужен внешний review gate по распределениям и двум путям
генерации: проверить форму данных, стык истории и живого продолжения,
однородность визита до и после восстановления.
Для review gate после задачи 3 reviewer другой родословной сильно желателен.
Для review gate после задачи 5 он обязателен: research показал, что форма
распределений и свойства на стыке двух путей хуже ловятся одной линией проверки.
Если такого reviewer-а нет, координатор останавливает цепочку и явно отдаёт
решение человеку.
## Финальная ручная приёмка
После задачи 6 человек смотрит Superset/Grafana и проверяет, что стенд живёт на
генерации: видны история, возвраты, воронка и суточное «дыхание». Если текущих
панелей не хватает для такого просмотра, создаётся отдельная задача на панель
или runbook, а не расширяется эта цепочка задним числом.
Миграция уроков по ADR-0006 сознательно отслеживается отдельно. Задача 6 должна
создать follow-up, если учебные материалы требуют нетривиальной переделки.