Нарезать тикеты этапа 4 по резолюциям карты #136
Notifications
Due Date
No due date set.
Depends on
#133 Сборка identity_map: трансформация и повторы
ddmitry/clickstream-data-platform
#134 Запуск трансформаций до etl_pipeline
ddmitry/clickstream-data-platform
#135 Витрины DM: форма и состав
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#136
Reference in new issue
Block a user
Part of #127.
Вопрос
Нарезать этап 4 на тикеты исполнения по резолюциям развилок этой карты:
самодостаточные постановки по правилам AGENTS.md (цель, критерии
приёмки чекбоксами, границы, «сначала прочитать», команды проверки),
цепочка блокировок нативными зависимостями Gitea и чек-лист
- [ ] #NNв корневом issue этапа #6. Здесь же — наблюдаемые критерии приёмки
самого этапа (правило спеки §9).
Этап 4 нарезан по резолюциям карты #127: десять тикетов исполнения чек-листом в #6, порядок — цепочка нативных блокировок. С порога открыты #150 (контракт dds.event_v), #151 (модель заказа) и #157 (опись); за ними #152 (сессии) и #153 (карта идентичностей), затем #154 (витрины и dm_transform) → #155 (сверка A+C) и #156 (конвейер etl_pipeline); замыкают #158 (звено DQ и dq_summary) и #159 (ТЗ витрин и даг самопроверки).
Решения нарезки (25 августа 2026):
• даги рождаются тикетами своей первой задачи: dds_transform — заказом (#151), dm_transform — витринами (#154), etl_pipeline с ожиданием хвоста hits — конвейером (#156);
• граница доступа storage.md становится проверяемой первым
_v: #150 сужает грант bi_reader с dds.* до явных представлений, #154 — с dm.*, дальше каждый тикет добавляет свои;• имена дагов и задач закреплены: dq_check с задачами по имени проверки (sessions_vs_reference, classes_vs_inventory, marts_vs_dds), homework_check, задачи слойных дагов — по имени сущности и витрины;
• счётчики описи для классов A и C — отдельный генераторный тикет #157: обещание нарезки этапа 3 (#89) — «счётчики заводит этап, приносящий читателя»; расхождение спеки §8 со словарём описи закрывается там же;
• окно K приходит на сторону стенда в #151 — сейчас константа живёт только в генераторе;
• ТЗ домашек и даг самопроверки — тикет этапа #159 (dm.md отдал их нарезке); дом ТЗ — docs/labs/, имена-слаги, правило — в AGENTS.md тем же PR;
• наблюдаемые критерии приёмки этапа добавлены в #6 (правило спеки §9).
Нарезка прошла холодное ревью свежей сессией (Opus, 28 находок, все оттриажированы). Блокеры закрыты правками: грант dm.* не имел хозяина — ушёл в #154; первичное наполнение DDS за пределами окна K было бездомным — объём #151 расширен до «дни окна плюс отсутствующие»; критерии идемпотентности спотыкались о служебные колонки — всюду «деловое содержимое»; соединения звали колонку именем ODS (purchaseID) вместо имени контракта (purchase_id); classes_vs_inventory ограничена днями, которые опись покрывает. Срезано по проходу на вычитание: пересказы док-спек и конвенций storage.md в тикетах, EXPLAIN-сторож (снят исследованием #128), «байт-в-байт» описи (это утверждает make test генератора); однотипный блок целей make заменён адресным.
Вторая линия ревью нарезки — Codex (gpt-5.6-sol, xhigh, свежий тред): 13 находок (1 блокер, 9 major, 3 minor), все перепроверены владельцем задачи по докам и коду, все подтвердились и закрыты правками тикетов:
• testing.md требует
make check-servicesдля правок дагов иmake typecheckдля генератора — добавлены в проверки #151–#156, #158, #159 и в критерии этапа в #6 (SPEC-1, SPEC-8);• критерий границы доступа в #151 не мог позеленеть раньше сужения гранта в #150 — добавлена блокировка 151 ← 150, фронтир теперь #150 и #157 (SPEC-2);
• объём пересборки заказов «K дней от позиции» промахивался из-за суточного лага слепков — семантика заменена на «дни, которые принёс последний слепок» (SPEC-3);
• обыгрываемые критерии закрыты инвариантами: разбор позиций против items_total (#151), все меры витрин против прямых агрегатов DDS (#154), красная демонстрация каждой из трёх DQ-проверок (#158), черновая сборка каждой домашки (#159) (SPEC-4, 5, 9, 13);
• ожидание хвоста hits — по обеим нодам, system.kafka_consumers локальна (#156, SPEC-6); отказ конвейера на инициализации явно чинится тем же перезапуском (#156, SPEC-7);
• блокер SPEC-11: спека §7 не даёт состава колонок четырёх витрин менти — #159 переписан: состав проектирует само ТЗ, образец — стенд-предшественник; представление-разминка в конвейер не встаёт, слово «каждого» в dm.md — поправить (SPEC-12); противоречие резолюции #135 с границей §10 «лабы — отдельная работа» #159 снимает правкой §10 тем же PR (SPEC-10).