Files
clickstream-ch-kafka-supers…/.scratch/handoffs/20260719-2144-hitl-mentee-path-redesign.md
T
ddadminandClaude Opus 4.8 91d15e60a0 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>
2026-07-19 21:52:12 +03:00

104 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"]`) и про формат артефакта.