- Зачем:
- параллельный DQ выгружал деловые ключи в Python и исчерпывал 640 МиБ планировщика.
- Что:
- четыре сверки агрегируют дневные итоги и ограниченную диагностику в ClickHouse.
- коробка планировщика поднята до 1,5 ГиБ, локальные пределы задач удалены.
- измерения и граница между SQL и Python записаны в документации.
- Проверка:
- make lint, make config-test, make smoke, make check-clickhouse, make check-services.
- полный etl_pipeline, красный и восстановительный прогоны dq_check.
- Зачем:
- конвейеру нужна публикуемая сводка текущего качества с красным завершением при нарушении договоров.
- Что:
- добавлены DDL, публичное представление и пять сверок на естественном деловом зерне.
- даг dq_check встроен после DM и публикует полные дневные партиции до именованных утверждений.
- параллелизм DDS, DM и DQ приведён к измеренному лимиту памяти планировщика.
- Проверка:
- make lint; make config-test; make rebuild-storage.
- make smoke; make check-clickhouse; make check-services.
- три семейства проверок покрашены искусственными расхождениями и восстановлены повторным полным прогоном.
Зачем:
- Один запуск должен одинаково работать из жизненного цикла, вручную после разгона и повторно после отказа.
Что:
- Добавлена последовательная сцепка DDS и DM с ожиданием каждого слоя.
- DDS дожидается смещений Kafka и очереди доставки ClickHouse за общий срок.
- ETL встроен в создание мира и живой день; документация приведена к новому графу.
Проверка:
- make config-test; make lint.
- make smoke: 21/21; make check-clickhouse: 10/10; make check-services: 7/7.
- make rebuild-storage, живой и пакетный дни, искусственный отказ и ручное восстановление ETL.
Зачем:
- Показать два ритма пересборки агрегатов на готовых витринах DM.
Что:
- Добавлены физические модели и публичные договоры revenue_daily и daily_traffic.
- Добавлен dm_transform с оконной заменой выручки и полным пересчетом трафика.
- Отрицательный опыт локального соединения через публичные _v зафиксирован; выбран явный GLOBAL LEFT JOIN.
- Замены партиций сериализованы после подтвержденного OOM при трех одновременных задачах.
- Обновлены архитектурные документы и мастер-спека.
Проверка:
- make lint, make config-test, make smoke, make check-clickhouse, make check-services.
- Чистая сборка world_recreate, dds_transform и dm_transform; меры сверены с прямыми агрегатами.
Зачем:
- Показать слой DDS как договор данных, которому не нужна физическая копия.
- Сохранить простой учебный стенд без отдельного маршрута ради узких прав.
Что:
- Добавлено кластерное представление dds.event_v с явными 44 колонками.
- Роли bi_reader разрешено чтение ODS, DDS и DM при договоре чтения через _v.
- Согласованы мастер-спека, ADR, справочники архитектуры и живые тикеты этапа.
- Зафиксировано исследование поведения DEFINER поверх Distributed.
Проверка:
- make config-test
- make smoke
- make check-clickhouse
- Приёмочные запросы: равенство ODS/DDS, состав колонок, коды устройств и права bi.
- Зачем:
- сверка с описью подглядывает внутрь генератора: у настоящего магазина
такого оракула нет, и выдавать её за учебный урок DQ нельзя (развилка
из комментария к #157).
- Что:
- в dm.md проверка счётчиков классов помечена технической, её обещание
сужено честно: до витрин доехал рождённый мир; верно ли мир рождён,
проверка не видит — опись считает тот же генератор.
- в §8 мастер-спеки читатель счётчиков «самопроверка лабы сверки»
заменён на техническую проверку classes_vs_inventory звена DQ.
- словарь: короткий термин «Техническая проверка» в CONTEXT.md — только
язык, решение живёт в dm.md; та же формулировка читателя в inventory.md.
- Проверка:
- grep -rn "лабы сверки" docs/ — упоминаний не осталось.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- после переписывания ритма пересборки в тексте остались швы прежних
формулировок и один разрыв с докой конвейера.
- Что:
- довод против дневных партиций daily_traffic заменён верным: партиция —
единица замены, а витрина заменяется только целиком (число строк тут
ни при чём, иначе довод бил бы и по dq_summary).
- в etl.md к механике REPLACE PARTITION добавлена вторая идемпотентность
конвейера — полная перезапись в ReplacingMergeTree.
- правило ритмов говорит про день, а не партицию; поправлены переносы
строк и обороты.
- Проверка:
- make config-test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- обсуждение горячего ревью показало: «окно K для всех» — ритм заказов,
натянутый на слой, а замерзание daily_traffic обесценивало витрину.
- Что:
- раздел «Объём пересборки» заменён «Ритмом пересборки»: три ритма —
хвост / окно K / целиком; daily_traffic наследует у карты полный
пересчёт в ReplacingMergeTree, дневные партиции ей не положены.
- в отклонённые добавлены замерзание за окном K и инкремент по
first_matched_at; инкремент стал идеей лабы повышенной сложности #149.
- Проверка:
- make config-test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- горячее ревью развилки #135 нашло два незакрытых решения: объём
пересборки витрин и судьба менти-витрины после постройки.
- Что:
- добавлен раздел «Объём пересборки»: одно окно K для всех витрин,
замерзание daily_traffic за окном названо решением с объяснением.
- в ТЗ менти добавлен финальный пункт — встроить витрину в dm_transform.
- поправлены мелочи: greenplum-стенд больше не зовётся предшественником,
добавлены ссылки на спеку и карту идентичностей.
- Проверка:
- make config-test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- развилка #135 карты #127 решена: форма и состав витрин DM,
контур DQ этапа 4; резолюция переносится в доки architecture.
- Что:
- создана docs/architecture/dm.md: форма по зерну, дележ витрин
между стендом и заданиями менти, dq_summary с REPLACE PARTITION,
звено DQ конвейера и даг самопроверки домашек.
- ссылки на #135 в etl.md и dds/README.md заменены на доку слоя.
- Проверка:
- make config-test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>