Менти видит один etl_pipeline, который одинаково верно запускается из жизненного цикла, вручную после разгона и повторно после падения: он сам ждёт готовности источника и выводит объём работы из состояния данных.
Что
Добавлен параметрически независимый etl_pipeline: DDS, затем DM, с ожиданием и распространением отказа.
Первый шаг DDS ждёт нулевого отставания группы clickstream_hits, затем пустой очереди доставки ods.event_dist на обеих нодах ClickHouse. У барьеров общий предел 300 секунд и опрос раз в 3 секунды.
world_initialize и world_live_day ждут ETL последним шагом после установки позиции. world_next_day по-прежнему только разгоняет источники.
Архитектура, ADR, спека жизненного цикла и карта проверок приведены к новому графу.
Проверка
make config-test; make lint.
make smoke: 21/21; make check-clickhouse: 10/10; финальный make check-services: 7/7 за 129 с.
make rebuild-storage: 7 минут; world_initialize без ручного шага довёл позицию до 8 и собрал DDS и DM.
Два пакетных дня догнаны одним ручным etl_pipeline без параметров; полный зелёный world_live_day занял 27 м 2 с.
Временная поломка SQL daily_traffic покрасила DM, etl_pipeline и world_live_day; после возврата SQL ручной ETL восстановил слои без параметров.
Реальный пакетный хвост прошёл 46 367 → 27 239 → 0; только затем обе очереди ClickHouse показали 0 файлов и начались трансформации.
После пересборки два холодных прогона check-services дали 5/1 из-за 30-секундного ожидания импорта Superset. Диагностический прогон с 90 с прошёл 3/0, а последующий штатный прогон — 7/7; тайм-аут вне границ задачи не менялся.
Ревью и текст
Линия уместности: два прогона Fable; дополнительное ревью перепроверено и разобрано в комментарии к PR.
Линия дефектов: Opus, все принятые находки исправлены и перепроверены; два отклонения сохранены с доводами.
Владелец снял для этого прогона раздел AGENTS.md «Кому что поручать»: вся реализация выполнена Codex, и ревьюеры были предупреждены не считать это находкой.
Документация написана через writing-for-agents; финальный ai-text-lint дал Голос: чисто, затем выполнена отдельная литературная вычитка русского текста.
## Зачем
Менти видит один `etl_pipeline`, который одинаково верно запускается из жизненного цикла, вручную после разгона и повторно после падения: он сам ждёт готовности источника и выводит объём работы из состояния данных.
## Что
- Добавлен параметрически независимый `etl_pipeline`: DDS, затем DM, с ожиданием и распространением отказа.
- Первый шаг DDS ждёт нулевого отставания группы `clickstream_hits`, затем пустой очереди доставки `ods.event_dist` на обеих нодах ClickHouse. У барьеров общий предел 300 секунд и опрос раз в 3 секунды.
- `world_initialize` и `world_live_day` ждут ETL последним шагом после установки позиции. `world_next_day` по-прежнему только разгоняет источники.
- Архитектура, ADR, спека жизненного цикла и карта проверок приведены к новому графу.
## Проверка
- `make config-test`; `make lint`.
- `make smoke`: 21/21; `make check-clickhouse`: 10/10; финальный `make check-services`: 7/7 за 129 с.
- `make rebuild-storage`: 7 минут; `world_initialize` без ручного шага довёл позицию до `8` и собрал DDS и DM.
- Два пакетных дня догнаны одним ручным `etl_pipeline` без параметров; полный зелёный `world_live_day` занял 27 м 2 с.
- Временная поломка SQL `daily_traffic` покрасила DM, `etl_pipeline` и `world_live_day`; после возврата SQL ручной ETL восстановил слои без параметров.
- Реальный пакетный хвост прошёл 46 367 → 27 239 → 0; только затем обе очереди ClickHouse показали 0 файлов и начались трансформации.
- После пересборки два холодных прогона `check-services` дали 5/1 из-за 30-секундного ожидания импорта Superset. Диагностический прогон с 90 с прошёл 3/0, а последующий штатный прогон — 7/7; тайм-аут вне границ задачи не менялся.
## Ревью и текст
- Линия уместности: два прогона Fable; дополнительное ревью перепроверено и разобрано в комментарии к PR.
- Линия дефектов: Opus, все принятые находки исправлены и перепроверены; два отклонения сохранены с доводами.
- Владелец снял для этого прогона раздел `AGENTS.md` «Кому что поручать»: вся реализация выполнена Codex, и ревьюеры были предупреждены не считать это находкой.
- Документация написана через `writing-for-agents`; финальный `ai-text-lint` дал `Голос: чисто`, затем выполнена отдельная литературная вычитка русского текста.
Closes #156
Зачем:
- Один запуск должен одинаково работать из жизненного цикла, вручную после разгона и повторно после отказа.
Что:
- Добавлена последовательная сцепка 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.
- Зачем:
- верхние смещения можно получить тем же административным клиентом без одноразового Consumer и фиктивной группы.
- Что:
- чтение хвоста переведено на AdminClient.list_offsets с OffsetSpec.latest.
- назначение system.one названо рядом с запросом, а документация и запись проверок сокращены и переставлены по смыслу.
- Проверка:
- make config-test; make lint.
- живые проверки готового и отсутствующего разделов Kafka; полный etl_pipeline.
Дополнительное вкусовое ревью Fable перепроверено по коду, постановке, Context7 и установленному стенду.
1 - исправлено: Consumer удален, верхние смещения читает AdminClient.list_offsets с OffsetSpec.latest. API подтвержден Context7 и живым вызовом на confluent-kafka 2.15.0.
2 - частично исправлено: system.one сохранен, потому что постановка требует журнал по каждой ноде на каждом опросе; рядом добавлено объяснение нулевых строк.
3 - отклонено: отсутствие ё следует обязательному для задачи ai-text-lint, это авторская норма владельца скилла.
4 - исправлено: запись о TriggerDagRunOperator перенесена из готовности источника в раздел «Форма».
5 - исправлено: приемочная запись теперь называет пройденный make config-test.
6 - подтверждено вне границ #156: холодный тайм-аут Superset воспроизведен, дубликата в трекере нет; код проверки в этом PR не менялся.
7 - частично исправлено: докстринги задают вопрос барьера, пустая фраза о будущем замере удалена. Аннотация probe отклонена: она вернула бы отдельный Callable ради одного частного параметра, а файл аннотирован не целиком.
Проверка после правок: make config-test, make lint, живые готовый и отсутствующий разделы Kafka, полный etl_pipeline - зеленые.
Коммит: 61e662c.
Дополнительное вкусовое ревью Fable перепроверено по коду, постановке, Context7 и установленному стенду.
- 1 - исправлено: `Consumer` удален, верхние смещения читает `AdminClient.list_offsets` с `OffsetSpec.latest`. API подтвержден Context7 и живым вызовом на `confluent-kafka 2.15.0`.
- 2 - частично исправлено: `system.one` сохранен, потому что постановка требует журнал по каждой ноде на каждом опросе; рядом добавлено объяснение нулевых строк.
- 3 - отклонено: отсутствие `ё` следует обязательному для задачи `ai-text-lint`, это авторская норма владельца скилла.
- 4 - исправлено: запись о `TriggerDagRunOperator` перенесена из готовности источника в раздел «Форма».
- 5 - исправлено: приемочная запись теперь называет пройденный `make config-test`.
- 6 - подтверждено вне границ #156: холодный тайм-аут Superset воспроизведен, дубликата в трекере нет; код проверки в этом PR не менялся.
- 7 - частично исправлено: докстринги задают вопрос барьера, пустая фраза о будущем замере удалена. Аннотация `probe` отклонена: она вернула бы отдельный `Callable` ради одного частного параметра, а файл аннотирован не целиком.
Проверка после правок: `make config-test`, `make lint`, живые готовый и отсутствующий разделы Kafka, полный `etl_pipeline` - зеленые.
Коммит: `61e662c`.
После слияния задачи #155 обновил ветку через merge, без переписывания истории опубликованного PR.
Смысловой стык проверен: новая витрина purchase_vs_orders входит в dm_transform, поэтому запускается внутри общего etl_pipeline. Адресная пересборка завершилась за 7:45; витрина получила 1917 строк в четырех классах сверки.
Проверки после слияния:
make config-test, корневой make lint;
в generator/: make lint, make typecheck, make test — 429 тестов;
make rebuild-storage;
make smoke — 21/21;
make check-clickhouse — 10/10;
make check-services — 7/7;
ошибок импорта DAG нет.
Merge-коммит: cec11ed.
Отдельный хвост из вкусового ревью по холодному тайм-ауту Superset вынесен в #172; он не замаскирован правкой этой ветки.
После слияния задачи #155 обновил ветку через merge, без переписывания истории опубликованного PR.
Смысловой стык проверен: новая витрина `purchase_vs_orders` входит в `dm_transform`, поэтому запускается внутри общего `etl_pipeline`. Адресная пересборка завершилась за 7:45; витрина получила 1917 строк в четырех классах сверки.
Проверки после слияния:
- `make config-test`, корневой `make lint`;
- в `generator/`: `make lint`, `make typecheck`, `make test` — 429 тестов;
- `make rebuild-storage`;
- `make smoke` — 21/21;
- `make check-clickhouse` — 10/10;
- `make check-services` — 7/7;
- ошибок импорта DAG нет.
Merge-коммит: `cec11ed`.
Отдельный хвост из вкусового ревью по холодному тайм-ауту Superset вынесен в #172; он не замаскирован правкой этой ветки.
ddmitry
merged commit 4e60aafc31 into main2026-08-27 13:13:27 +03:00
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.
Зачем
Менти видит один
etl_pipeline, который одинаково верно запускается из жизненного цикла, вручную после разгона и повторно после падения: он сам ждёт готовности источника и выводит объём работы из состояния данных.Что
etl_pipeline: DDS, затем DM, с ожиданием и распространением отказа.clickstream_hits, затем пустой очереди доставкиods.event_distна обеих нодах ClickHouse. У барьеров общий предел 300 секунд и опрос раз в 3 секунды.world_initializeиworld_live_dayждут ETL последним шагом после установки позиции.world_next_dayпо-прежнему только разгоняет источники.Проверка
make config-test;make lint.make smoke: 21/21;make check-clickhouse: 10/10; финальныйmake check-services: 7/7 за 129 с.make rebuild-storage: 7 минут;world_initializeбез ручного шага довёл позицию до8и собрал DDS и DM.etl_pipelineбез параметров; полный зелёныйworld_live_dayзанял 27 м 2 с.daily_trafficпокрасила DM,etl_pipelineиworld_live_day; после возврата SQL ручной ETL восстановил слои без параметров.check-servicesдали 5/1 из-за 30-секундного ожидания импорта Superset. Диагностический прогон с 90 с прошёл 3/0, а последующий штатный прогон — 7/7; тайм-аут вне границ задачи не менялся.Ревью и текст
AGENTS.md«Кому что поручать»: вся реализация выполнена Codex, и ревьюеры были предупреждены не считать это находкой.writing-for-agents; финальныйai-text-lintдалГолос: чисто, затем выполнена отдельная литературная вычитка русского текста.Closes #156
Дополнительное вкусовое ревью Fable перепроверено по коду, постановке, Context7 и установленному стенду.
Consumerудален, верхние смещения читаетAdminClient.list_offsetsсOffsetSpec.latest. API подтвержден Context7 и живым вызовом наconfluent-kafka 2.15.0.system.oneсохранен, потому что постановка требует журнал по каждой ноде на каждом опросе; рядом добавлено объяснение нулевых строк.ёследует обязательному для задачиai-text-lint, это авторская норма владельца скилла.TriggerDagRunOperatorперенесена из готовности источника в раздел «Форма».make config-test.probeотклонена: она вернула бы отдельныйCallableради одного частного параметра, а файл аннотирован не целиком.Проверка после правок:
make config-test,make lint, живые готовый и отсутствующий разделы Kafka, полныйetl_pipeline- зеленые.Коммит:
61e662c.После слияния задачи #155 обновил ветку через merge, без переписывания истории опубликованного PR.
Смысловой стык проверен: новая витрина
purchase_vs_ordersвходит вdm_transform, поэтому запускается внутри общегоetl_pipeline. Адресная пересборка завершилась за 7:45; витрина получила 1917 строк в четырех классах сверки.Проверки после слияния:
make config-test, корневойmake lint;generator/:make lint,make typecheck,make test— 429 тестов;make rebuild-storage;make smoke— 21/21;make check-clickhouse— 10/10;make check-services— 7/7;Merge-коммит:
cec11ed.Отдельный хвост из вкусового ревью по холодному тайм-ауту Superset вынесен в #172; он не замаскирован правкой этой ветки.