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

7.7 KiB
Raw Blame History

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"]) и про формат артефакта.