Files
clickstream-ch-kafka-supers…/.scratch/generator-model-time-startup-history/issues/03-model-speed-and-day-factor.md
T
ddadminandClaude Fable 5 85f076e205 docs(generator): проведён триаж бэклога фичи, задачи 01-06 закрыты
- Зачем:
  - follow-up задачи после ревью 2026-06-14 лежали без триажа; решения по
    артефакту, громкому отказу и интерфейсу приняты 2026-07-04 и должны
    попасть в задачи до передачи исполнителю.
- Что:
  - задачи 07 (миграция курса) и 08 (артефакт) поменяны местами — номера
    отражают порядок; ссылки обновлены.
  - 07 (артефакт + runbook) дооформлен: импорт строго через Kafka (напрямую
    в ClickHouse не пишет), громкий отказ при несовместимом state с правкой
    спеки, граница runbook «использование, не устройство»; ready-for-agent.
  - 08 дооформлен: устройство генератора вне пути менти, реальный объём
    (make data во всех уроках 00-05), демо вне скоупа; ready-for-agent.
  - новые задачи: 11 глаголы/длительность/профили (после 07, до 12),
    12 Airflow-DAG как пульт (приоритет поднят), 13 доливка (после 09).
  - задачи 01-06 переведены в done (стояли ошибочные ready-for-human);
    PRD фичи дополнен списком задач 7-13 с порядком и зависимостями.
- Проверка:
  - head -1 .scratch/generator-model-time-startup-history/issues/*.md;
    grep по старым именам файлов ничего не находит вне handoff.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 16:39:40 +03:00

87 lines
5.5 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: done
# ×K и дневной коэффициент по модельному времени
## Parent
`.scratch/generator-model-time-startup-history/PRD.md`
## What to build
Добавить ускоренный живой ход модельных часов. При ×K за один реальный тик
должна проходить большая модельная длительность, а событийный бюджет должен
считаться по этой модельной длительности. Дневной коэффициент считается по
модельному часу.
Результат должен быть виден в ClickHouse: модельные метки уходят вперёд быстрее
реального времени, а объём событий соответствует пройденному модельному
интервалу.
## Acceptance criteria
- [x] На ×1 поведение остаётся совместимым с обычным живым режимом.
- [x] На ×K модельные `event_timestamp` за короткий реальный прогон покрывают
примерно `K` раз большую модельную длительность.
- [x] Событийный бюджет считается по модельной длительности тика, а не по
реальному времени сна процесса.
- [x] Дневной коэффициент меняется при переходе модельного времени через
дневные/ночные часы в зафиксированном часовом поясе, независимо от реального
часа запуска.
- [x] ClickHouse-проверка показывает повторяемые контрольные числа при тех же
`GEN_SEED`, `T0`, скорости и настройках.
- [x] Worker даёт промежуточный статус, если статистический прогон или стендовая
проверка занимает заметное время.
- [x] В `generator/README.md` или `docs/OPERATIONS.md` кратко описано, что ×K
ускоряет именно модельное время стенда.
## Решение
`calculate_events_count()` теперь считает λ тика по модельной длительности:
`GEN_TICK_SECONDS * GEN_MODEL_TIME_SPEED`. При `GEN_MODEL_TIME_SPEED=1`
формула остаётся прежней.
Для больших λ старый Knuth-алгоритм заменён нормальным приближением, чтобы
ускорение ×K не упиралось в underflow `exp(-λ)` и событийный бюджет продолжал
расти вместе с модельной длительностью.
Добавлены проверки:
- средний бюджет ×10 примерно в 10 раз больше бюджета ×1;
- большой λ не залипает на старом underflow-ограничении;
- `hour_factor()` берёт час из заданного `GEN_MODEL_TIMEZONE`;
- сервисный live-тик при ×10 сдвигает `event_timestamp` с `10:00` на `10:10`;
- старый live-сценарий ×1 остаётся зелёным.
Документация в `generator/README.md` и `docs/OPERATIONS.md` уточняет, что ×K
ускоряет модельную длительность тика и событийный бюджет.
## Проверка
- `make generator-test``120 passed`.
- ClickHouse, быстрый прогон ×60 с `GEN_STATE_RESET=true`,
`GEN_MODEL_T0=2026-01-01T05:58:00+00:00`, `GEN_TICK_SECONDS=1`: за короткий
реальный прогон `event_ts` покрыл `2026-01-01 05:58:00`
`2026-01-01 06:09:00`; после 06:00 UTC поминутные числа выросли с `40/42` до
примерно `58..63`, что показывает смену ночного коэффициента.
- ClickHouse, повторяемость: два чистых запуска с одинаковыми
`GEN_SEED=4242`, `GEN_MODEL_T0=2026-01-01T10:00:00+00:00`,
`GEN_MODEL_TIME_SPEED=60`, `GEN_TICK_SECONDS=60`,
`GEN_STATE_RESET=true` дали одинаковые контрольные числа:
`events=73`, `unique_events=73`, `unique_clicks=73`,
`min_event_ts=max_event_ts=2026-01-01 10:00:00`.
## Риски и границы
- State v2 resume, backfill, manifest и startup history не менялись. Известные
риски по ним остаются задачами 04/05.
- Сервис всё ещё пишет операционные метки state и истории пачек по настенному
времени; это соответствует текущему контракту issue 03.
- Нормальное приближение для больших λ не является точным Poisson, но для
событийного бюджета учебного демо достаточно сохраняет масштаб, среднее и
дисперсию. Точную статистическую выборку можно выделить в отдельную задачу,
если она станет учебной целью.
## Blocked by
- `.scratch/generator-model-time-startup-history/issues/02-model-time-to-clickhouse.md`