Карта проектирования генератора v2. Мандат — тикет #14 (родитель — этап 2, #4): там цель, критерии приёмки и границы; карта прокладывает маршрут к ним.
Пункт назначения
Спека генератора принята владельцем, лежит файлом в docs/specs/ в main, а этап 2 нарезан на тикеты чек-листом в корневом issue #4. Карта несёт и исполнение маршрута: сборку спеки, приёмку и нарезку тикетов, а не только решения по развилкам.
Заметки
Источник истины — мастер-спека docs/specs/2026-07-30-stand-v2-realism.md; сначала читать разделы 1 (особенно 1.4 «схема как контракт»), 5, 9, 10 и 11.
Развилки вести через /brainstorm-with-docs с /grilling и /domain-modeling: сначала веер вариантов, потом конвергенция; отклонённые варианты записывать с доводами, чтобы не возвращаться.
Если решение развилки расходится с мастер-спекой — расхождение вносится в неё тем же коммитом, что и спека генератора.
Спорные API перед фиксацией в спеке сверять через MCP Context7 (правило AGENTS.md).
Решения по пути
Модель мира: что живёт между прогонами и как устроены модельные сутки — мир функциональный: состав — чистая функция зерна, день — функция (зерно, D); своя ось времени с фиксированным D0, между прогонами живут только зерно и позиция; два режима — пошаговый для лаб и живой день с ускорением; граница суток — единственный шов.
Детерминизм от зерна: что воспроизводимо и как зерно переживает параллельность — содержимое до байта (при uv.lock и каноническом контейнере), транспорт вне обещания; иерархия подпотоков «зерно → день → компонент»; целочисленная случайность, деньги в копейках; канонический seed и паспорт мира в манифесте; расхождение платформ = баг.
Скорость батчевой генерации в Python: подходы и порядки величин — orjson в 5–14 раз быстрее stdlib; посточная генерация с orjson ~2–5×10⁵ событий/с на ядро; живой поток ×60 ниже планки на 3–4 порядка; заметка — docs/research/2026-08-01-python-batch-generation-speed.md на ветке research/python-batch-generation-speed.
Архитектура: источник истины схемы и разделение потока и пакета — контракт схемы — python-модуль с чистыми данными, собственность генератора (data contract): из него — генератор, валидация и документация формата; склад пишется по документации руками, границу сторожат строгий приём и contract-тест в smoke; день-функция → один канонический сериализатор → приёмники (файл только для git-снимка, Kafka пачкой, Kafka ×60), промежуточные файлы не хранятся, обрыв — переигровка через дедуп; эталонный снимок при старте — через Kafka пакетным режимом (оговорка на объём — #30).
Производительность: числовые требования и чем их замерять — ~50 тыс. событий в средний модельный день; снимок 14 дней (две недели, D0 — понедельник); в git — только манифест, снимок генерируется при make up; живой день ×60 по умолчанию, флаг проигрывателя; бюджеты — ориентиры в спеке, автоматический порог один (день ≤ 30 с, pytest perf в CI), остальное — печать таймингов; прототип-замер не нужен, туман рассеян.
Собрать спеку генератора из решений развилок — спека docs/specs/2026-08-01-generator.md собрана из решений четырёх развилок, PR #35; мастер-спека (1.4, 8, 11) и CONTEXT.md согласованы тем же коммитом; SeedSequence.spawn сверен через Context7. Дальше — приёмка владельцем: слияние PR #35 и есть она.
Приёмка спеки генератора владельцем — принята: PR #35 влит в main (9e04eae). Приёмка в две вычитки: правки владельца (приток посетителей, фейкеры без гвоздя) и холодное ревью на Fable — «блокеров нет», находки внесены. Спека — docs/specs/2026-08-01-generator.md; развилки карты пройдены, остался последний шаг — нарезка (#34).
Нарезать тикеты этапа 2 по принятой спеке — этап 2 нарезан на тикеты #36–#43 с цепочкой блокировок (семь при нарезке; восьмой, #43, добавлен холодным ревью нарезки — см. хвост в #34), чек-лист в #4, мандат #14 закрыт; вопросы раздела 9 спеки разложены по тикетам: приток и D0 — #38, CLI и контейнер — #41, мини-манифест зернового мира — #42.
Ещё не специфицировано
Пусто: туман рассеян. Вопросы уровня тикетов из раздела 9 спеки генератора разложены по тикетам этапа 2 (#38, #41, #42) — каждый фиксирует решение в спеке тем же PR.
Вне маршрута
Код генератора — тикеты этапа 2, после приёмки спеки.
Модель данных события (47 колонок), таксономия, анонимность и заказы — решены мастер-спекой и не переоткрываются (границы #14).
Генератор слепков заказов — этап 3 (#5): спека генератора лишь не должна ему мешать.
Пересборка эталонного мира и манифест — этап 7 (#9), у него своя спека.
Тикеты
Блокировки — нативные зависимости Gitea, они же рисуют фронтир. Стартовый фронтир: #27 (модель мира) и #31 (research).
#27 Модель мира: что живёт между прогонами и как устроены модельные сутки
#28 Детерминизм от зерна: что воспроизводимо и как зерно переживает параллельность
#29 Архитектура: источник истины схемы и разделение потока и пакета
#30 Производительность: числовые требования и чем их замерять
#31 Скорость батчевой генерации в Python: подходы и порядки величин
Карта проектирования генератора v2. Мандат — тикет #14 (родитель — этап 2, #4): там цель, критерии приёмки и границы; карта прокладывает маршрут к ним.
## Пункт назначения
Спека генератора принята владельцем, лежит файлом в docs/specs/ в main, а этап 2 нарезан на тикеты чек-листом в корневом issue #4. Карта несёт и исполнение маршрута: сборку спеки, приёмку и нарезку тикетов, а не только решения по развилкам.
## Заметки
- Источник истины — мастер-спека docs/specs/2026-07-30-stand-v2-realism.md; сначала читать разделы 1 (особенно 1.4 «схема как контракт»), 5, 9, 10 и 11.
- Развилки вести через /brainstorm-with-docs с /grilling и /domain-modeling: сначала веер вариантов, потом конвергенция; отклонённые варианты записывать с доводами, чтобы не возвращаться.
- Если решение развилки расходится с мастер-спекой — расхождение вносится в неё тем же коммитом, что и спека генератора.
- Спорные API перед фиксацией в спеке сверять через MCP Context7 (правило AGENTS.md).
## Решения по пути
- [Модель мира: что живёт между прогонами и как устроены модельные сутки](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/27) — мир функциональный: состав — чистая функция зерна, день — функция (зерно, D); своя ось времени с фиксированным D0, между прогонами живут только зерно и позиция; два режима — пошаговый для лаб и живой день с ускорением; граница суток — единственный шов.
- [Детерминизм от зерна: что воспроизводимо и как зерно переживает параллельность](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/28) — содержимое до байта (при uv.lock и каноническом контейнере), транспорт вне обещания; иерархия подпотоков «зерно → день → компонент»; целочисленная случайность, деньги в копейках; канонический seed и паспорт мира в манифесте; расхождение платформ = баг.
- [Скорость батчевой генерации в Python: подходы и порядки величин](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/31) — orjson в 5–14 раз быстрее stdlib; посточная генерация с orjson ~2–5×10⁵ событий/с на ядро; живой поток ×60 ниже планки на 3–4 порядка; заметка — docs/research/2026-08-01-python-batch-generation-speed.md на ветке research/python-batch-generation-speed.
- [Архитектура: источник истины схемы и разделение потока и пакета](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/29) — контракт схемы — python-модуль с чистыми данными, собственность генератора (data contract): из него — генератор, валидация и документация формата; склад пишется по документации руками, границу сторожат строгий приём и contract-тест в smoke; день-функция → один канонический сериализатор → приёмники (файл только для git-снимка, Kafka пачкой, Kafka ×60), промежуточные файлы не хранятся, обрыв — переигровка через дедуп; эталонный снимок при старте — через Kafka пакетным режимом (оговорка на объём — #30).
- [Производительность: числовые требования и чем их замерять](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/30) — ~50 тыс. событий в средний модельный день; снимок 14 дней (две недели, D0 — понедельник); в git — только манифест, снимок генерируется при make up; живой день ×60 по умолчанию, флаг проигрывателя; бюджеты — ориентиры в спеке, автоматический порог один (день ≤ 30 с, pytest perf в CI), остальное — печать таймингов; прототип-замер не нужен, туман рассеян.
- [Собрать спеку генератора из решений развилок](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/32) — спека docs/specs/2026-08-01-generator.md собрана из решений четырёх развилок, PR #35; мастер-спека (1.4, 8, 11) и CONTEXT.md согласованы тем же коммитом; SeedSequence.spawn сверен через Context7. Дальше — приёмка владельцем: слияние PR #35 и есть она.
- [Приёмка спеки генератора владельцем](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/33) — принята: PR #35 влит в main (9e04eae). Приёмка в две вычитки: правки владельца (приток посетителей, фейкеры без гвоздя) и холодное ревью на Fable — «блокеров нет», находки внесены. Спека — docs/specs/2026-08-01-generator.md; развилки карты пройдены, остался последний шаг — нарезка (#34).
- [Нарезать тикеты этапа 2 по принятой спеке](https://git.dementev.space/ddmitry/clickstream-data-platform/issues/34) — этап 2 нарезан на тикеты #36–#43 с цепочкой блокировок (семь при нарезке; восьмой, #43, добавлен холодным ревью нарезки — см. хвост в #34), чек-лист в #4, мандат #14 закрыт; вопросы раздела 9 спеки разложены по тикетам: приток и D0 — #38, CLI и контейнер — #41, мини-манифест зернового мира — #42.
## Ещё не специфицировано
Пусто: туман рассеян. Вопросы уровня тикетов из раздела 9 спеки генератора разложены по тикетам этапа 2 (#38, #41, #42) — каждый фиксирует решение в спеке тем же PR.
## Вне маршрута
- Код генератора — тикеты этапа 2, после приёмки спеки.
- Модель данных события (47 колонок), таксономия, анонимность и заказы — решены мастер-спекой и не переоткрываются (границы #14).
- Генератор слепков заказов — этап 3 (#5): спека генератора лишь не должна ему мешать.
- Пересборка эталонного мира и манифест — этап 7 (#9), у него своя спека.
## Тикеты
Блокировки — нативные зависимости Gitea, они же рисуют фронтир. Стартовый фронтир: #27 (модель мира) и #31 (research).
- [x] #27 Модель мира: что живёт между прогонами и как устроены модельные сутки
- [x] #28 Детерминизм от зерна: что воспроизводимо и как зерно переживает параллельность
- [x] #29 Архитектура: источник истины схемы и разделение потока и пакета
- [x] #30 Производительность: числовые требования и чем их замерять
- [x] #31 Скорость батчевой генерации в Python: подходы и порядки величин
- [x] #32 Собрать спеку генератора из решений развилок
- [x] #33 Приёмка спеки генератора владельцем
- [x] #34 Нарезать тикеты этапа 2 по принятой спеке
Пункт назначения достигнут: спека генератора принята и лежит в main (docs/specs/2026-08-01-generator.md), этап 2 нарезан на тикеты #36–#42 чек-листом в #4, мандат #14 закрыт. Все восемь тикетов карты закрыты, туман рассеян — карта завершена.
Пункт назначения достигнут: спека генератора принята и лежит в main (docs/specs/2026-08-01-generator.md), этап 2 нарезан на тикеты #36–#42 чек-листом в #4, мандат #14 закрыт. Все восемь тикетов карты закрыты, туман рассеян — карта завершена.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Карта проектирования генератора v2. Мандат — тикет #14 (родитель — этап 2, #4): там цель, критерии приёмки и границы; карта прокладывает маршрут к ним.
Пункт назначения
Спека генератора принята владельцем, лежит файлом в docs/specs/ в main, а этап 2 нарезан на тикеты чек-листом в корневом issue #4. Карта несёт и исполнение маршрута: сборку спеки, приёмку и нарезку тикетов, а не только решения по развилкам.
Заметки
Решения по пути
Модель мира: что живёт между прогонами и как устроены модельные сутки — мир функциональный: состав — чистая функция зерна, день — функция (зерно, D); своя ось времени с фиксированным D0, между прогонами живут только зерно и позиция; два режима — пошаговый для лаб и живой день с ускорением; граница суток — единственный шов.
Детерминизм от зерна: что воспроизводимо и как зерно переживает параллельность — содержимое до байта (при uv.lock и каноническом контейнере), транспорт вне обещания; иерархия подпотоков «зерно → день → компонент»; целочисленная случайность, деньги в копейках; канонический seed и паспорт мира в манифесте; расхождение платформ = баг.
Скорость батчевой генерации в Python: подходы и порядки величин — orjson в 5–14 раз быстрее stdlib; посточная генерация с orjson ~2–5×10⁵ событий/с на ядро; живой поток ×60 ниже планки на 3–4 порядка; заметка — docs/research/2026-08-01-python-batch-generation-speed.md на ветке research/python-batch-generation-speed.
Архитектура: источник истины схемы и разделение потока и пакета — контракт схемы — python-модуль с чистыми данными, собственность генератора (data contract): из него — генератор, валидация и документация формата; склад пишется по документации руками, границу сторожат строгий приём и contract-тест в smoke; день-функция → один канонический сериализатор → приёмники (файл только для git-снимка, Kafka пачкой, Kafka ×60), промежуточные файлы не хранятся, обрыв — переигровка через дедуп; эталонный снимок при старте — через Kafka пакетным режимом (оговорка на объём — #30).
Производительность: числовые требования и чем их замерять — ~50 тыс. событий в средний модельный день; снимок 14 дней (две недели, D0 — понедельник); в git — только манифест, снимок генерируется при make up; живой день ×60 по умолчанию, флаг проигрывателя; бюджеты — ориентиры в спеке, автоматический порог один (день ≤ 30 с, pytest perf в CI), остальное — печать таймингов; прототип-замер не нужен, туман рассеян.
Собрать спеку генератора из решений развилок — спека docs/specs/2026-08-01-generator.md собрана из решений четырёх развилок, PR #35; мастер-спека (1.4, 8, 11) и CONTEXT.md согласованы тем же коммитом; SeedSequence.spawn сверен через Context7. Дальше — приёмка владельцем: слияние PR #35 и есть она.
Приёмка спеки генератора владельцем — принята: PR #35 влит в main (
9e04eae). Приёмка в две вычитки: правки владельца (приток посетителей, фейкеры без гвоздя) и холодное ревью на Fable — «блокеров нет», находки внесены. Спека — docs/specs/2026-08-01-generator.md; развилки карты пройдены, остался последний шаг — нарезка (#34).Нарезать тикеты этапа 2 по принятой спеке — этап 2 нарезан на тикеты #36–#43 с цепочкой блокировок (семь при нарезке; восьмой, #43, добавлен холодным ревью нарезки — см. хвост в #34), чек-лист в #4, мандат #14 закрыт; вопросы раздела 9 спеки разложены по тикетам: приток и D0 — #38, CLI и контейнер — #41, мини-манифест зернового мира — #42.
Ещё не специфицировано
Пусто: туман рассеян. Вопросы уровня тикетов из раздела 9 спеки генератора разложены по тикетам этапа 2 (#38, #41, #42) — каждый фиксирует решение в спеке тем же PR.
Вне маршрута
Тикеты
Блокировки — нативные зависимости Gitea, они же рисуют фронтир. Стартовый фронтир: #27 (модель мира) и #31 (research).
Пункт назначения достигнут: спека генератора принята и лежит в main (docs/specs/2026-08-01-generator.md), этап 2 нарезан на тикеты #36–#42 чек-листом в #4, мандат #14 закрыт. Все восемь тикетов карты закрыты, туман рассеян — карта завершена.