docs(handoff): добавлен независимый ревью-проход в handoff цепочки
- Зачем:
- следующий шаг handoff — независимый ревью диапазона c672ed0..HEAD;
результат нужно зафиксировать для продолжения в новой сессии.
- Что:
- добавлен раздел «Независимый ревью-проход» (свежий взгляд, без субагентов):
вердикт, прогнанные тесты 172+5, находки по задачам, косметические мелочи.
- обновлены «Открытые риски» и «Следующий шаг»: остаётся HITL-приёмка и
решение по задаче 13.
- Проверка:
- git show --stat HEAD; ревью-раздел читается в handoff.
This commit is contained in:
@@ -119,7 +119,67 @@
|
|||||||
- Финальные `rg`-проверки по PRD, чекбоксам, Superset-маркерам и
|
- Финальные `rg`-проверки по PRD, чекбоксам, Superset-маркерам и
|
||||||
startup-history-дрифту — PASS перед `f8b419d`.
|
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` и
|
Независимый ревью кода и тестов пройден. Осталось: ручная HITL-приёмка (Airflow
|
||||||
handoff-коммиту, затем отдельно решить, дооформлять ли issue 13.
|
UI, Superset-кадры, проход курса) и отдельное решение по задаче 13.
|
||||||
|
|||||||
Reference in New Issue
Block a user