Спроектировать генератор: brainstorm → спека → нарезка этапа 2 #14

Closed
opened 2026-07-30 16:43:54 +03:00 by ddmitry · 2 comments
Owner

Родитель

#4 — Этап 2: DDL и генератор.

Что сделать

Провести проектную сессию с владельцем стенда и превратить её результат в спеку генератора, по которой потом режутся тикеты этапа 2. Тикет процессный: результат — принятая спека и созданные тикеты, а не код.

Развилки, которые мастер-спека сознательно отложила:

  • Модель мира. Что живёт между прогонами (посетители, их привычки, история), а что рождается заново; как устроены модельные сутки и переход к следующему дню.
  • Детерминизм от зерна (seed). Что именно воспроизводимо при том же зерне — поток событий целиком или только состав мира; как зерно проходит через распараллеливание по дням.
  • Архитектура. Где источник истины схемы события (раздел 1.4 мастер-спеки: одно машинное описание, из которого выводятся DDL и валидация) и как из него получаются остальные семь мест, где повторяются 47 колонок; как разделены живой поток и пакетная генерация.
  • Производительность. Числовые требования: время пересборки эталонного мира и живой поток с ускорением ×60. Рабочее решение — Python с батчевой генерацией и распараллеливанием по модельным дням; компилируемый язык — только если замеры покажут, что Python не даёт приемлемой скорости.

Порядок работы: /brainstorm-with-docs по развилкам → /to-spec (спека файлом в docs/specs/) → приёмка владельцем → /to-tickets режет тикеты этапа 2 и складывает их чек-листом в корневой issue этапа.

Критерии приёмки

  • Все четыре развилки закрыты решениями с доводами; отклонённые варианты записаны, чтобы к ним не возвращаться заново.
  • Спека генератора лежит файлом в docs/specs/, имеет статус «принята» и попала в main.
  • Требования производительности зафиксированы числами (а не словами «быстро»), с указанием, чем и как замерять.
  • Тикеты этапа 2 созданы и перечислены чек-листом в корневом issue #4.
  • Если решения сессии расходятся с мастер-спекой, расхождение внесено в неё тем же коммитом.

Границы

  • Код генератора здесь не пишется — он в тикетах, которые появятся после приёмки спеки.
  • Модель данных события (47 колонок), таксономия, анонимность и заказы уже решены в мастер-спеке и заново не обсуждаются.
  • Пересборка эталонного мира и манифест — этап 7, у него своя спека.

Сначала прочитать

  • docs/specs/2026-07-30-stand-v2-realism.md: раздел 1 (широкое событие, особенно 1.4 «схема как контракт»), 5 (анонимность и склейка), 9 (оценка: генератор ~4–5 тысяч строк, тяжёлое направление), 10 (границы) и 11 (что проверить при исполнении).
  • AGENTS.md — правила репозитория и порядок работы со спеками.

Проверка

Приёмка живая: владелец читает спеку и говорит «принято». Формальный след — файл спеки в main и тикеты этапа 2 в трекере.

Блокируется

Нет. Проектирование можно вести параллельно этапу 1.

## Родитель #4 — Этап 2: DDL и генератор. ## Что сделать Провести проектную сессию с владельцем стенда и превратить её результат в спеку генератора, по которой потом режутся тикеты этапа 2. Тикет процессный: результат — принятая спека и созданные тикеты, а не код. Развилки, которые мастер-спека сознательно отложила: - **Модель мира.** Что живёт между прогонами (посетители, их привычки, история), а что рождается заново; как устроены модельные сутки и переход к следующему дню. - **Детерминизм от зерна (seed).** Что именно воспроизводимо при том же зерне — поток событий целиком или только состав мира; как зерно проходит через распараллеливание по дням. - **Архитектура.** Где источник истины схемы события (раздел 1.4 мастер-спеки: одно машинное описание, из которого выводятся DDL и валидация) и как из него получаются остальные семь мест, где повторяются 47 колонок; как разделены живой поток и пакетная генерация. - **Производительность.** Числовые требования: время пересборки эталонного мира и живой поток с ускорением ×60. Рабочее решение — Python с батчевой генерацией и распараллеливанием по модельным дням; компилируемый язык — только если замеры покажут, что Python не даёт приемлемой скорости. Порядок работы: `/brainstorm-with-docs` по развилкам → `/to-spec` (спека файлом в `docs/specs/`) → приёмка владельцем → `/to-tickets` режет тикеты этапа 2 и складывает их чек-листом в корневой issue этапа. ## Критерии приёмки - [x] Все четыре развилки закрыты решениями с доводами; отклонённые варианты записаны, чтобы к ним не возвращаться заново. - [x] Спека генератора лежит файлом в `docs/specs/`, имеет статус «принята» и попала в `main`. - [x] Требования производительности зафиксированы числами (а не словами «быстро»), с указанием, чем и как замерять. - [x] Тикеты этапа 2 созданы и перечислены чек-листом в корневом issue #4. - [x] Если решения сессии расходятся с мастер-спекой, расхождение внесено в неё тем же коммитом. ## Границы - Код генератора здесь не пишется — он в тикетах, которые появятся после приёмки спеки. - Модель данных события (47 колонок), таксономия, анонимность и заказы уже решены в мастер-спеке и заново не обсуждаются. - Пересборка эталонного мира и манифест — этап 7, у него своя спека. ## Сначала прочитать - `docs/specs/2026-07-30-stand-v2-realism.md`: раздел 1 (широкое событие, особенно 1.4 «схема как контракт»), 5 (анонимность и склейка), 9 (оценка: генератор ~4–5 тысяч строк, тяжёлое направление), 10 (границы) и 11 (что проверить при исполнении). - `AGENTS.md` — правила репозитория и порядок работы со спеками. ## Проверка Приёмка живая: владелец читает спеку и говорит «принято». Формальный след — файл спеки в `main` и тикеты этапа 2 в трекере. ## Блокируется Нет. Проектирование можно вести параллельно этапу 1.
ddmitry added the ready-for-human label 2026-07-30 16:43:54 +03:00
Author
Owner

Тикет прокладывается картой wayfinder #26 «Карта: проектирование генератора (этап 2)»: четыре развилки — тикеты #27–#30 (research-опора #31), дальше сборка спеки #32, приёмка #33 и нарезка этапа 2 #34. Закрывается после #34.

Тикет прокладывается картой wayfinder #26 «Карта: проектирование генератора (этап 2)»: четыре развилки — тикеты #27–#30 (research-опора #31), дальше сборка спеки #32, приёмка #33 и нарезка этапа 2 #34. Закрывается после #34.
Author
Owner

Мандат выполнен, все критерии приёмки закрыты:

  • Четыре развилки решены с доводами и записанными отклонёнными вариантами — тикеты #27–#30 карты #26 (research-опора #31).
  • Спека генератора принята и в main: docs/specs/2026-08-01-generator.md (PR #35, коммит 9e04eae).
  • Производительность зафиксирована числами (спека, раздел 5): день ~50 тыс. событий, снимок 14 дней, автоматический порог «день ≤ 30 с» pytest-маркером perf; остальное — тайминги без порогов.
  • Расхождения с мастер-спекой внесены тем же коммитом (разделы 1.4, 8, 11).
  • Этап 2 нарезан: тикеты #36–#42 чек-листом в #4, блокировки — нативными зависимостями. Вопросы раздела 9 спеки разложены по тикетам: приток и D0 — #38, интерфейс запуска и контейнер — #41, форма зернового мира — #42.

Нарезка — тикет #34 карты #26.

Мандат выполнен, все критерии приёмки закрыты: - Четыре развилки решены с доводами и записанными отклонёнными вариантами — тикеты #27–#30 карты #26 (research-опора #31). - Спека генератора принята и в main: docs/specs/2026-08-01-generator.md (PR #35, коммит 9e04eae). - Производительность зафиксирована числами (спека, раздел 5): день ~50 тыс. событий, снимок 14 дней, автоматический порог «день ≤ 30 с» pytest-маркером perf; остальное — тайминги без порогов. - Расхождения с мастер-спекой внесены тем же коммитом (разделы 1.4, 8, 11). - Этап 2 нарезан: тикеты #36–#42 чек-листом в #4, блокировки — нативными зависимостями. Вопросы раздела 9 спеки разложены по тикетам: приток и D0 — #38, интерфейс запуска и контейнер — #41, форма зернового мира — #42. Нарезка — тикет #34 карты #26.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#14