Спроектировать заказы бэкенда: brainstorm → спека → нарезка этапа 3 #68

Closed
opened 2026-08-07 20:33:31 +03:00 by ddmitry · 1 comment
Owner

Родитель

#5 — Этап 3: заказы и каталог.

Что сделать

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

Заведён сразу после закрытия этапа 2, а не при входе в этап: пока мандата нет,
второй источник живёт только разделами мастер-спеки и выглядит забытым. В коде
от него сегодня есть один каталог товаров: топик orders не создаётся, таблиц
заказа нет, генератор слепков не написан.

Развилки

Маршрут проложен картой #69; каждая развилка живёт своим тикетом, здесь только
их список — содержание не дублируется.

  • #70 — приём заказов: нужен ли слепку слой сырья. Мастер-спека называет эту развилку нерешённой прямо (раздел 7).
  • #71 — генератор слепков: где живёт и чем связан с событиями.
  • #72 — расхождения A–D и опоздания: механика, доли и что обещано.
  • #73 — мост к склейке: user_id и двухкуковые пары.
  • #74 — место заказов в стартовом мире.

Часовые пояса в список не входят: у них свой тикет #63, и его решение — вход
для этой спеки. Слепок несёт created_at, updated_at и snapshot_date,
а dds.order партиционируется по toDate(created_at).

Порядок работы

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

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

  • Все пять развилок закрыты решениями с доводами; отклонённые варианты записаны, чтобы к ним не возвращаться заново.
  • Спека второго источника лежит файлом в docs/specs/, принята владельцем и попала в main.
  • Решение по приёму заказов записано так, чтобы читалось рядом с ADR 0005 — новым ADR или дополнением к нему.
  • Тикеты этапа 3 созданы и перечислены чек-листом в #5.
  • Расхождения решений с мастер-спекой внесены в неё тем же коммитом.

Границы

  • Код здесь не пишется — он в тикетах, которые появятся после приёмки спеки.
  • Заново не обсуждается решённое мастер-спекой: поля слепка, окно K = 7 как
    константа мира, три статуса, два слоя дедупа (ods.order_snapshot без дедупа
    плюс argMax при сборке dds.order), приоритет классов расхождений, правило
    «поведение и атрибуцию считаем по трекеру, деньги — по бэкенду».
  • Витрины и сама сверка — этап 4 (#6): здесь только источник и его слои.
  • Пересборка эталонного мира целиком — этап 7 (#9).

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

  • docs/specs/2026-07-30-stand-v2-realism.md: разделы 2 (заказы бэкенда),
    3 (каталог), 4 (сверка purchase против заказов), 5 (мост к склейке),
    7 (карта слоёв — там же абзац про нерешённую развилку приёма) и 9
    (страховочные срезы: что уже применено, что в резерве);
  • docs/adr/0005-event-ingestion.md — чем обоснован выбор приёма для событий;
  • docs/architecture/storage.md — служебные колонки, конвенция суффиксов,
    сроки хранения, что уже проверено на стенде;
  • docs/specs/2026-08-01-generator.md — детерминизм, иерархия зёрен, правило
    порядка бросков;
  • #63 — часовые пояса, вход для этой спеки.
## Родитель #5 — Этап 3: заказы и каталог. ## Что сделать Провести проектную сессию с владельцем и превратить её результат в спеку второго источника, по которой потом режутся тикеты этапа 3. Тикет процессный: результат — принятая спека и созданные тикеты, а не код. Образец — #14, тем же порядком собрана спека генератора. Заведён сразу после закрытия этапа 2, а не при входе в этап: пока мандата нет, второй источник живёт только разделами мастер-спеки и выглядит забытым. В коде от него сегодня есть один каталог товаров: топик `orders` не создаётся, таблиц заказа нет, генератор слепков не написан. ## Развилки Маршрут проложен картой #69; каждая развилка живёт своим тикетом, здесь только их список — содержание не дублируется. - #70 — приём заказов: нужен ли слепку слой сырья. Мастер-спека называет эту развилку нерешённой прямо (раздел 7). - #71 — генератор слепков: где живёт и чем связан с событиями. - #72 — расхождения A–D и опоздания: механика, доли и что обещано. - #73 — мост к склейке: `user_id` и двухкуковые пары. - #74 — место заказов в стартовом мире. Часовые пояса в список не входят: у них свой тикет #63, и его решение — вход для этой спеки. Слепок несёт `created_at`, `updated_at` и `snapshot_date`, а `dds.order` партиционируется по `toDate(created_at)`. ## Порядок работы `/brainstorm-with-docs` по развилкам (сначала веер, потом конвергенция) → `/to-spec`: спека файлом в `docs/specs/` → приёмка владельцем → `/to-tickets` режет тикеты этапа 3 и складывает их чек-листом в #5. ## Критерии приёмки - [ ] Все пять развилок закрыты решениями с доводами; отклонённые варианты записаны, чтобы к ним не возвращаться заново. - [ ] Спека второго источника лежит файлом в `docs/specs/`, принята владельцем и попала в main. - [ ] Решение по приёму заказов записано так, чтобы читалось рядом с ADR 0005 — новым ADR или дополнением к нему. - [ ] Тикеты этапа 3 созданы и перечислены чек-листом в #5. - [ ] Расхождения решений с мастер-спекой внесены в неё тем же коммитом. ## Границы - Код здесь не пишется — он в тикетах, которые появятся после приёмки спеки. - Заново не обсуждается решённое мастер-спекой: поля слепка, окно K = 7 как константа мира, три статуса, два слоя дедупа (`ods.order_snapshot` без дедупа плюс `argMax` при сборке `dds.order`), приоритет классов расхождений, правило «поведение и атрибуцию считаем по трекеру, деньги — по бэкенду». - Витрины и сама сверка — этап 4 (#6): здесь только источник и его слои. - Пересборка эталонного мира целиком — этап 7 (#9). ## Сначала прочитать - `docs/specs/2026-07-30-stand-v2-realism.md`: разделы 2 (заказы бэкенда), 3 (каталог), 4 (сверка `purchase` против заказов), 5 (мост к склейке), 7 (карта слоёв — там же абзац про нерешённую развилку приёма) и 9 (страховочные срезы: что уже применено, что в резерве); - `docs/adr/0005-event-ingestion.md` — чем обоснован выбор приёма для событий; - `docs/architecture/storage.md` — служебные колонки, конвенция суффиксов, сроки хранения, что уже проверено на стенде; - `docs/specs/2026-08-01-generator.md` — детерминизм, иерархия зёрен, правило порядка бросков; - #63 — часовые пояса, вход для этой спеки.
ddmitry added the ready-for-humanwayfinder:grilling labels 2026-08-07 20:33:31 +03:00
ddmitry removed the wayfinder:grilling label 2026-08-07 20:39:31 +03:00
Author
Owner

Срезан как лишний, через час после заведения.

Тикет писался по образцу #14 — мандата, который на этапе 2 существовал сам по
себе почти двое суток и только потом обзавёлся картой #26. Здесь мандат и карта
появились в один вечер, и карта #69 забрала всё: пункт назначения — это «что
сделать», заметки — «сначала прочитать» и правила работы, «за границей карты» —
границы. Оставшись рядом, мандат сообщал бы читателю, что у этапа два входа,
хотя вход один.

Что переехало перед закрытием:

  • список «решённое мастер-спекой заново не обсуждается» (поля слепка, K = 7,
    три статуса, два слоя дедупа, приоритет классов, «поведение по трекеру,
    деньги по бэкенду») — в #69, раздел «За границей карты»;
  • «сначала прочитать» целиком — в заметки #69;
  • порядок работы brainstorm → спека → приёмка → нарезка — в пункт назначения #69;
  • требование записать решение по приёму рядом с ADR 0005 — в #70, где ему и
    место: это часть самой развилки, а не мерка над ней.

Критерии приёмки не переезжали: четыре из пяти повторяли пункт назначения
карты и её закрытых детей.

Карточка этапа #5 теперь ссылается на #69.

Срезан как лишний, через час после заведения. Тикет писался по образцу #14 — мандата, который на этапе 2 существовал сам по себе почти двое суток и только потом обзавёлся картой #26. Здесь мандат и карта появились в один вечер, и карта #69 забрала всё: пункт назначения — это «что сделать», заметки — «сначала прочитать» и правила работы, «за границей карты» — границы. Оставшись рядом, мандат сообщал бы читателю, что у этапа два входа, хотя вход один. Что переехало перед закрытием: - список «решённое мастер-спекой заново не обсуждается» (поля слепка, K = 7, три статуса, два слоя дедупа, приоритет классов, «поведение по трекеру, деньги по бэкенду») — в #69, раздел «За границей карты»; - «сначала прочитать» целиком — в заметки #69; - порядок работы brainstorm → спека → приёмка → нарезка — в пункт назначения #69; - требование записать решение по приёму рядом с ADR 0005 — в #70, где ему и место: это часть самой развилки, а не мерка над ней. Критерии приёмки не переезжали: четыре из пяти повторяли пункт назначения карты и её закрытых детей. Карточка этапа #5 теперь ссылается на #69.
ddmitry added wontfix and removed ready-for-human labels 2026-08-07 20:48:22 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#68