- Зачем:
- 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>
5.5 KiB
Status: done
×K и дневной коэффициент по модельному времени
Parent
.scratch/generator-model-time-startup-history/PRD.md
What to build
Добавить ускоренный живой ход модельных часов. При ×K за один реальный тик должна проходить большая модельная длительность, а событийный бюджет должен считаться по этой модельной длительности. Дневной коэффициент считается по модельному часу.
Результат должен быть виден в ClickHouse: модельные метки уходят вперёд быстрее реального времени, а объём событий соответствует пройденному модельному интервалу.
Acceptance criteria
- На ×1 поведение остаётся совместимым с обычным живым режимом.
- На ×K модельные
event_timestampза короткий реальный прогон покрывают примерноKраз большую модельную длительность. - Событийный бюджет считается по модельной длительности тика, а не по реальному времени сна процесса.
- Дневной коэффициент меняется при переходе модельного времени через дневные/ночные часы в зафиксированном часовом поясе, независимо от реального часа запуска.
- ClickHouse-проверка показывает повторяемые контрольные числа при тех же
GEN_SEED,T0, скорости и настройках. - Worker даёт промежуточный статус, если статистический прогон или стендовая проверка занимает заметное время.
- В
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