docs(generator): находки ручного HITL пути менти и handoff
- Зачем:
- долг ручной HITL-проверки пути менти переносился пятый handoff подряд;
проверка вскрыла набор находок и наметила редизайн пути менти.
- Что:
- добавлены находки HITL (F1-F9) с рамочной моделью трёх режимов менти:
import-база, ветки next-day и continue, под каждую — свой урок/лаба.
- зафиксированы решения: 3-дневный артефакт на daily-wave, сжатие xz,
один учебный профиль, беспараметрный next-day, инкрементальные счётчики.
- добавлен handoff по ADR-0003 с планом раскладки находок в постановки.
- Проверка:
- чтение .scratch/generator-model-time-startup-history/hitl-findings.md
и .scratch/handoffs/20260719-2144-hitl-mentee-path-redesign.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# Handoff: ручной HITL пути менти пройден — вырос в набросок редизайна
|
||||
|
||||
Дата: 2026-07-19 21:44.
|
||||
Жанр: handoff по ADR-0003 после сессии «ручная HITL-проверка пути менти»
|
||||
(долг переносился пятый handoff подряд — закрыт).
|
||||
|
||||
## Что сделано
|
||||
|
||||
- **HITL-проверка пути менти пройдена целиком, своими руками через UI.**
|
||||
Чистый стенд (`make clean` + `make up`) -> Airflow UI: `ddl_init` ->
|
||||
`generator_control` `backfill` (профиль `ci`) -> ETL -> `make superset-init`
|
||||
-> дашборд глазами -> `generator_control` `next-day` -> проверка стыка.
|
||||
Каждый шаг сверен по данным (ClickHouse, manifest, chain-check).
|
||||
- **Результат мира:** backfill `[00:00, 06:00)` = 16 054 события; после
|
||||
`next-day` = 110 602 события, визитов 10 228, пользователей 1 726;
|
||||
`boundaries` = три границы, `model_t_end` = `2026-01-02 06:00`.
|
||||
`generated-history-chain-check` — EXIT 0 (стык 06:00: 9 переходящих
|
||||
визитов, непарных 0, однородность подтверждена).
|
||||
- **9 находок + рамочная модель** — в
|
||||
`.scratch/generator-model-time-startup-history/hitl-findings.md`.
|
||||
Половина находок родилась из наблюдений менти. HITL из «проверить, что
|
||||
не сломалось» перерос в **набросок редизайна пути менти**.
|
||||
|
||||
## Ключевые выводы (кратко; подробно — в hitl-findings.md)
|
||||
|
||||
- **Рамочная модель менти:** основной режим — `import` артефакта (база),
|
||||
дальше две ветки от одного состояния: `next-day` (пакетно) и `continue`
|
||||
(живой поток). Это три разных лабораторных. `next-day` и `continue`
|
||||
не схлопывать. Подтверждено `launch.py:117-137`.
|
||||
- **F7 + замер:** опыт на 6h беден; нужен готовый артефакт из файла.
|
||||
Артефакт 6h = 49 МБ; `xz -9e` -> 1,1 МБ (48x, 13,5 с). На 3 дня ~13 МБ
|
||||
— кладётся в обычный git. Паттерн-образец: `airflow-greenplum-solution`
|
||||
(`bookings/seed/demo.sql.xz`).
|
||||
- **Решение менти:** целевой стартовый мир — **3 дня на `daily-wave`**
|
||||
(обсуждаемо). На `ci` три дня плоские — волну даёт `daily-wave`.
|
||||
- **F8:** два профиля путают. Свести к одному учебному (волна, ×60);
|
||||
`ci` (×1) — служебный для тестов. ×60 оправдан live-лабой (`continue`).
|
||||
- **F9:** `next-day` растёт O(N²) из-за полной перечитки Kafka для
|
||||
счётчиков (`service.py:591`). Параллелить не то (ломает детерминизм);
|
||||
правильно — инкрементальные счётчики (O(N), снимает риск OOM). Это и
|
||||
есть решение «новый формат состояния manifest», блокирующее расписание.
|
||||
- **F1, F5 (баги UI):** форма `generator_control` держит необязательные
|
||||
поля обязательными (`type="string"` без `null`); Airflow и Superset
|
||||
быстро разлогинивают (ротацию секрета исключил, корень TBD).
|
||||
|
||||
## Состояние
|
||||
|
||||
- Ветка `feature/data-generator`. После этого handoff в дереве останутся:
|
||||
`hitl-findings.md` + этот handoff (коммитятся), плюс **не коммитить**
|
||||
`data/ci_backfill.json` (49 МБ, побочный от backfill; `.gitignore` его
|
||||
не покрывает — риск, см. ниже).
|
||||
- Стенд **оставлен поднятым** по просьбе пользователя; в мире 1,25 суток
|
||||
(профиль `ci`), live-генератор не запущен. Выросший мир можно смотреть
|
||||
в Superset (dashboard id 1).
|
||||
|
||||
## Что дальше
|
||||
|
||||
1. **Разложить находки в постановки по плейбуку** (этапы 1-2, двойное
|
||||
слепое ревью). Ориентировочно ~4 задачи (номера 21+ в `issues/`):
|
||||
- **Ядро:** эталонный 3-дневный артефакт (`daily-wave`) как база
|
||||
менти через `import`; формат/сжатие (`xz`, нужен ли `raw_topics`);
|
||||
место хранения (git после отладки сида). Снимает F7.
|
||||
- **Профиль:** один учебный профиль, `ci` -> служебный тестовый.
|
||||
Перед слиянием проверить, не зависит ли live-тест от скорости ×1
|
||||
(F8).
|
||||
- **Расписание + retention:** беспараметрный DAG `next-day` (F1/F3),
|
||||
`schedule`, инкрементальные счётчики manifest (F9/F6). Это одна
|
||||
связка — их корень общий.
|
||||
- **Баг-фиксы:** F1 (форма) и F5 (разлогин); F4 (JS-баг Grid) низкий.
|
||||
2. **Три режима -> свои уроки/лабы** — вход в учебный контент
|
||||
(`docs/course/`). Под каждую ветку отдельная лаба: `next-day`
|
||||
(пакетная инкрементальная обработка) и `continue` (потоковый приём);
|
||||
общая база `import` — их совместное начало. Отдельно от
|
||||
инфраструктурных задач.
|
||||
3. **Мелочь по гигиене:** `data/*.json` не покрыт `.gitignore` —
|
||||
побочные артефакты backfill (49 МБ) рискуют попасть в коммит. Решить:
|
||||
правило в `.gitignore` или чистить артефакты после прогонов.
|
||||
|
||||
## Проверки этой сессии
|
||||
|
||||
- `ddl_init`: 4 слоя созданы (stg 12 / ods 8 / dds 2 / dm 6 таблиц).
|
||||
- Форма мира после backfill: пирамида 445 < 1516 < 16 054, интервал
|
||||
`[00:00, 06:00)` точный.
|
||||
- После `next-day`: 3 границы в manifest, мир до `2026-01-02 06:00`.
|
||||
- `generated-history-chain-check`: EXIT 0.
|
||||
- Длительность `next-day` (метаданные Airflow): задача `run_next_day`
|
||||
638 с (~10,6 мин); ETL `trigger_etl` 30 с — узкое место в генерации.
|
||||
- Замер сжатия: `xz -9e` 48x за 13,5 с; gzip -9 17x.
|
||||
|
||||
## Отклонения процесса
|
||||
|
||||
- Ревью субагентами не запускали: пользователь просил «свежий взгляд»,
|
||||
что по договорённости = без субагентов. Проверка проведена мной руками.
|
||||
- Обход бага F1: форму backfill/next-day заполняли значениями профиля
|
||||
`ci` целиком (пустые необязательные поля UI не пропускает).
|
||||
|
||||
## Suggested skills
|
||||
|
||||
- `claude-subagent-playbook` — разложить находки в постановки тем же
|
||||
конвейером (этапы 1-2 с нуля).
|
||||
- `conventional-commits` — коммиты.
|
||||
- `research` / Context7 — для задачи про профиль/форму (Airflow Param
|
||||
`type=["null","string"]`) и про формат артефакта.
|
||||
Reference in New Issue
Block a user