From 549ce0c00d6dd03c8b1a8f08ebc40f885c83bdf4 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sat, 4 Jul 2026 23:58:09 +0300 Subject: [PATCH] =?UTF-8?q?docs(handoff):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BD=D0=B5=D0=B7=D0=B0=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D1=8B=D0=B9=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E-?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=85=D0=BE=D0=B4=20=D0=B2=20handoff=20?= =?UTF-8?q?=D1=86=D0=B5=D0=BF=D0=BE=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - следующий шаг handoff — независимый ревью диапазона c672ed0..HEAD; результат нужно зафиксировать для продолжения в новой сессии. - Что: - добавлен раздел «Независимый ревью-проход» (свежий взгляд, без субагентов): вердикт, прогнанные тесты 172+5, находки по задачам, косметические мелочи. - обновлены «Открытые риски» и «Следующий шаг»: остаётся HITL-приёмка и решение по задаче 13. - Проверка: - git show --stat HEAD; ревью-раздел читается в handoff. --- .../2026-07-04-generator-chain-review.md | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/.scratch/handoffs/2026-07-04-generator-chain-review.md b/.scratch/handoffs/2026-07-04-generator-chain-review.md index e0ee75c..687fc98 100644 --- a/.scratch/handoffs/2026-07-04-generator-chain-review.md +++ b/.scratch/handoffs/2026-07-04-generator-chain-review.md @@ -119,7 +119,67 @@ - Финальные `rg`-проверки по PRD, чекбоксам, Superset-маркерам и startup-history-дрифту — PASS перед `f8b419d`. +## Независимый ревью-проход (2026-07-04, свежий взгляд) + +Кто и как: Claude, свежим взглядом по диапазону `c672ed0..HEAD`, без субагентов +(правило проекта: «свежим взглядом» = без субагентов). Читались реальные диффы +всех пяти задач и сверялись с текстами issue; тесты прогонялись заново, а не со +слов handoff. + +Вердикт: цепочка выполнена на уровне кода и тестов; правок для приёмки не нужно. + +Доказательства (прогонял сам): + +- `generator/tests` — 172 passed (в том числе контрактный тест DAG и тесты пульта). +- `tests/test_superset_dashboard_config.py` — 5 passed. +- Грепы: старых маркеров `world_map`/`Geography Map` в коде и доках нет (остались + только законный историч. след в спеке, `previous_slice_names` и тест + переименования); во всех done-issue 0 пустых чекбоксов; `state v2` в отгруженном + коде не осталось. +- `etl_pipeline` действительно принимает `conf` `full_refresh` (`Param(True, + type="boolean")`) — имя параметра из `TriggerDagRunOperator` пульта совпадает. + +По задачам: + +- Issue 09 (гейт): донор `base_click_id` хранится в state; восстановление громко + падает на неизвестном доноре (тихие `.get`-fallback'и убраны); запасная ветка + рождения сделана восстановимой и провалидирована. Отдельная реальная находка — + µs-фикс `_timestamp_to_state_offset` (целочисленная арифметика вместо + `total_seconds()*1e6`). Тесты бьют прямо в критерии приёмки. +- Issue 12 (пульт): `retries=0`, `is_paused_upon_creation`, join после ветвления + через `NONE_FAILED_MIN_ONE_SUCCESS`, `wait_for_completion=True`, env до + `Config()`, предпроверка пустоты Kafka и STG. Compose-профиль `live-generator` + оставляет `make up` чистым; явные пути включают профиль по имени сервиса. +- Issue 14: `daily-wave` speed 1→60, tick 60→1; `ci` не тронут; пер-тиковые INFO + приглушены до DEBUG. +- Issue 10: `echarts_timeseries_bar` с tooltip, легендой и единицами; дедуп дублей + при переименовании; экспорт-JSON защищён тестами и от рассинхрона с конфигом, и + от дрейфа раскладки. +- Issue 08: доки, старый путь `make data`/`kafka_load` убран как основной, грепы + чисты. + +Мелочи (косметика, не блокеры): + +- `test_default_version` (`test_state.py`): docstring говорит «версии 2», а ассерт + уже `"3.0"`. +- `build_control_env` для `import` тоже зовёт `build_launch_env("backfill", …)` — + безвредно (важен только «мир»-env), но может смутить читателя. +- `tooltipTimeFormat: "smart_date"` на категориальной оси — рудиментарный + параметр, безвреден. + +## Открытые риски (обновление 2026-07-04) + +- Кросс-линейный проход *другой родословной* (иная модель/агент) не выполнялся: + этот ревью сделан Claude свежим взглядом без субагентов. Для кода и тестов + этого достаточно; если нужна ещё одна родословная — отдельный шаг. +- Ручная приёмка (HITL) остаётся, код к ней честен (пропуски печатаются): + - Airflow UI: `generator_control` backfill/import/check на чистом стенде. + - Superset: кадр `Top Countries by Events` целиком и кадр с tooltip. + - Курс 00-06: проход по новому startup-history-пути. +- Задача 13 (`backfill-top-up-from-snapshot`) — `needs-triage`; предпосылка + (исправный restore из issue 09) выполнена, можно дооформлять. + ## Следующий шаг -Запустить независимый кросс-линейный ревью-проход по диапазону `c672ed0..HEAD` и -handoff-коммиту, затем отдельно решить, дооформлять ли issue 13. +Независимый ревью кода и тестов пройден. Осталось: ручная HITL-приёмка (Airflow +UI, Superset-кадры, проход курса) и отдельное решение по задаче 13.