- Зачем:
- долг ручной 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>
7.7 KiB
7.7 KiB
Handoff: ручной HITL пути менти пройден — вырос в набросок редизайна
Дата: 2026-07-19 21:44. Жанр: handoff по ADR-0003 после сессии «ручная HITL-проверка пути менти» (долг переносился пятый handoff подряд — закрыт).
Что сделано
- HITL-проверка пути менти пройдена целиком, своими руками через UI.
Чистый стенд (
make clean+make up) -> Airflow UI:ddl_init->generator_controlbackfill(профильci) -> ETL ->make superset-init-> дашборд глазами ->generator_controlnext-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-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) низкий.
- Ядро: эталонный 3-дневный артефакт (
- Три режима -> свои уроки/лабы — вход в учебный контент
(
docs/course/). Под каждую ветку отдельная лаба:next-day(пакетная инкрементальная обработка) иcontinue(потоковый приём); общая базаimport— их совместное начало. Отдельно от инфраструктурных задач. - Мелочь по гигиене:
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_day638 с (~10,6 мин); ETLtrigger_etl30 с — узкое место в генерации. - Замер сжатия:
xz -9e48x за 13,5 с; gzip -9 17x.
Отклонения процесса
- Ревью субагентами не запускали: пользователь просил «свежий взгляд», что по договорённости = без субагентов. Проверка проведена мной руками.
- Обход бага F1: форму backfill/next-day заполняли значениями профиля
ciцеликом (пустые необязательные поля UI не пропускает).
Suggested skills
claude-subagent-playbook— разложить находки в постановки тем же конвейером (этапы 1-2 с нуля).conventional-commits— коммиты.research/ Context7 — для задачи про профиль/форму (Airflow Paramtype=["null","string"]) и про формат артефакта.