docs(scratch): handoff обновлён — фокус на добивание mentee-path (#4, #5)

- Зачем:
  - следующая сессия после compaction продолжает конвейерное
    исполнение фичи; нужен свежий вход без потери уроков приёмки #3.
- Что:
  - новый handoff 20260722-2029: порядок #4#5, уроки приёмки,
    сводная карта работ (карта #10 и бэклог ждут решения #18).
  - удалены два отработанных handoff'а (одноразовые по ADR-0003).
- Проверка:
  - cat .scratch/handoffs/20260722-2029-finish-mentee-path.md
This commit is contained in:
2026-07-22 20:29:48 +03:00
parent 65cb88fa4f
commit 76ff669cf7
3 changed files with 65 additions and 166 deletions
@@ -1,104 +0,0 @@
# Handoff: старт редизайна пути менти — спека и пилот GitHub Issues
Дата: 2026-07-19 22:29.
Жанр: handoff по ADR-0003 — точка входа в новую фичу на чистой ветке.
## Контекст
- `feature/data-generator` (146 коммитов) влита в main (`0e312b3`) и
запушена. Перед слиянием закрыта задача 21: баг F1 (необязательные поля
формы `generator_control` требовались как обязательные) починен через
`Param(None, type=["null", "string"])`, `.gitignore` покрыл артефакты
`data/*.json`, доки (`ARCHITECTURE.md`, `REPO_MAP.md`) догнали код.
`make test` (205 + 31) и `make lint` зелёные.
- `.scratch` очищен целиком (решение пользователя 2026-07-19): задачи
01–21, PRD, журналы и старые handoff'ы — одноразовые материалы, всё
долговечное перенесено в `docs/` (ADR 00040006, спеки, runbook
`startup-history`). История доступна в git: см. состояние на `0e312b3`,
ключевой файл находок —
`.scratch/generator-model-time-startup-history/hitl-findings.md@0e312b3`.
## Направление работ: редизайн пути менти
Рамочная модель (из ручного HITL 2026-07-19, подтверждена по
`launch.py`): основной режим менти — **`import` готового артефакта**
(база), от одного восстановленного состояния две ветки-лабы:
**`next-day`** (пакетно добавить сутки) и **`continue`** (живой поток,
оправдывает скорость ×60). `backfill` в целевой модели — инструмент
мейнтейнера для сборки артефакта, не первый шаг менти.
Ориентировочно 4 задачи:
1. **Ядро: эталонный 3-дневный артефакт** на профиле `daily-wave` как
база менти через `import`. Факты: артефакт 6h = 49 МБ raw; `xz -9e`
жмёт 48× (1,1 МБ за 13,5 с); 3 дня ≈ 13 МБ сжатого — кладётся в
обычный git. Паттерн-образец: `airflow-greenplum-solution`
(`bookings/seed/demo.sql.xz`). Открыто: нужен ли артефакту
`raw_topics` или хватит компактного `state`.
2. **Один учебный профиль**: `daily-wave` (волна, ×60) — учебный,
`ci` (×1, плоский) — служебный для тестов; форма не должна
подсовывать `ci` первым. Перед слиянием проверить, не зависит ли
runtime-seam-тест от скорости ×1.
3. **Расписание + инкремент**: беспараметрный DAG `next-day` (удобство
менти и пригодность к `schedule`) + инкрементальные счётчики manifest:
сейчас `next-day` перечитывает всю Kafka-историю с нуля — O(N²) по
дням и рост RAM (риск OOM); замер: день 2 = 638 с, узкое место —
генерация+пересчёт, не ETL (30 с). Параллелить нельзя (детерминизм),
правильный рычаг — накопленное состояние счётчиков в manifest/state.
4. **Баг-фиксы**: F5 — быстрый разлогин Airflow и Superset (ротация
секрета исключена; копать время жизни сессии/cookie); F4 — JS-ошибка
авто-refresh в Airflow Grid (косметика, низкий приоритет).
Отдельная линия (после инфраструктуры): три режима → свои лабы в
`docs/course/` (`import` — общая база; `next-day` — пакетная
инкрементальная обработка; `continue` — потоковый приём).
## Пилот GitHub Issues (решение пользователя 2026-07-19)
Новый процесс для этой фичи:
- Спека редизайна — файлом в репозитории (материал — hitl-findings из
истории git, см. выше).
- Тонкий корневой issue на GitHub со ссылкой на спеку и чекбоксами на
дочерние issues; дочерние — полноценные самодостаточные постановки.
- Triage-метки — пять канонических ролей из `docs/agents/triage-labels.md`
как настоящие метки GitHub.
- В том же заходе поправить контракт: AGENTS.md и
`docs/agents/issue-tracker.md` сейчас говорят «GitHub Issues не
используются» — заменить на правила пилота. Старые задачи не
мигрировать (архив в истории git).
## Что дальше (порядок; обновлено 2026-07-19 23:0x)
Сделано в тот же вечер: контракт трекера переведён на GitHub Issues
(метки созданы), спека написана и проверена свежим взглядом —
`docs/specs/2026-07-19-mentee-path-redesign.md` (источник истины: путь
менти, `world_init`, `world_next_day`, эталонный мир, 4 дочерних issue).
`hitl-findings.md` восстановлен в `.scratch/` как рабочий материал.
Термины «мир», «эталонный мир», «три режима менти» — в CONTEXT.md.
Осталось:
1. Корневой issue + 4 дочерних на GitHub по спеке (раздел «Форма работ»).
Багфиксы уже в трекере: #1 (F5, разлогин), #2 (F4, JS Grid).
Осталось завести два issue «не забыть»: редизайн лаб курса (отстали
от реальности, не заработают) и инкрементальный ETL (техдолг:
`full_refresh` пересчитывает весь мир на каждый `world_next_day`;
растёт с миром; исторический контекст — `plans/incremental-etl-v2.md`;
кандидат в материал лабы про инкрементальную обработку).
2. Работа по задачам конвейером `claude-subagent-playbook`.
3. Решить судьбу локальной ветки `feature/data-generator-kimi`
(пользователь ещё не ответил).
## Состояние стенда
Стенд поднят: мир 1,25 суток на профиле `ci`, `model_t_end` =
`2026-01-02 06:00`, live-генератор не запущен, дашборд — Superset id 1.
Для новой работы, скорее всего, понадобится чистый прогон (`make clean`).
## Suggested skills
- `claude-subagent-playbook` — конвейер задач.
- `conventional-commits` — коммиты.
- `research` / Context7 — фактура для спеки (формат артефакта, Airflow
`schedule`).
@@ -1,62 +0,0 @@
# Handoff: mentee-path (#4/#5 на фронтире) и карта «Боевой реализм»
Дата: 2026-07-22 19:13. Ветка: `feature/mentee-path` (запушена, см. ниже).
## Что сделано в этой сессии
- **Issue #6 закрыт** (коммит `b87dde7`): учебный профиль по умолчанию —
`daily-wave`, `ci` — служебный, передаётся явно.
- **Issue #3 закрыт** (коммит `10ee1a1`): эталонный мир в git —
`data/startup_history/reference-world.json.xz` (3 модельных дня
`daily-wave`, ~850 МБ JSON → 32 МБ xz), чтение/запись `.xz` потоково,
пустая форма пульта и `make startup-history-import` читают эталон.
Приёмка: импорт на чистом стенде 2м03с, manifest совпал (280437
событий / 26083 визита / 4056 пользователей), Superset видит те же
числа. Два круга правок по ревью и живой приёмке — детали в
комментарии к issue #3.
Важное побочное решение: **длительность профиля `daily-wave` = 3d**
(иначе валидация import не сходится с трёхдневным эталоном).
- **Документ о реализме** (коммит `068d96f`):
`docs/generator-realism.md` — границы применимости генератора.
- **Карта wayfinder #10 «Боевой реализм стенда»** создана и уже
отработала три тикета (#11 документ, #12 ресурсы, #13 цена кластера —
ответы в комментариях тикетов, гисты в карте).
## Состояние трекера
- **Фича mentee-path** (корень #9, спека
`docs/specs/2026-07-19-mentee-path-redesign.md`): фронтир — **#4**
(`generator_control``world_init`, дефолт операции `import`,
беспараметрный `world_next_day`) и **#5** (инкрементальные счётчики
manifest). Оба `ready-for-agent`, конвейер — `codex-subagent-playbook`.
- **Карта #10**: фронтир — **#18 «Модель данных: широкое событие и
второй источник»** (HITL, брать через `/wayfinder 18`). За ним
каскад: #14 кластер, #15 purchase, #16 identity, #17 спека.
История перекройки (формат доставки возвращён из Out of scope) — в
теле карты.
- Прочее открытое: #1, #2 (багфиксы), #7 (лабы курса), #8 (инкрементальный ETL).
## Состояние стенда
Полный стенд поднят (11 контейнеров), эталонный мир импортирован,
Superset инициализирован (дашборд id 1). Для новой работы над #4
чистить не обязательно; для приёмки #4 понадобится живой Airflow.
## Грабли сессии (для приёмки в WSL)
- Docker Desktop WSL: `docker info` может отвечать через Windows-CLI
раньше, чем появится unix-сокет — перед `make test` проверять
`[ -S /var/run/docker.sock ]`. (Кандидат в lessons скилла
codex-subagent-playbook — с пользователем ещё не согласован.)
- Хостовые `uv run` с модулями генератора требуют
`--with-requirements generator/requirements.txt` (починено в
`assert_stand_clean.sh`, коммит `10ee1a1`).
## Suggested skills
- `codex-subagent-playbook` — для #4/#5 (исполнитель Codex gpt-5.6-sol,
medium; ревью по риску).
- `wayfinder` — для тикетов карты #10 (следующий — #18, это grilling
с пользователем).
- `conventional-commits` — коммиты.
- `grilling` + `domain-modeling` — внутри #18.
@@ -0,0 +1,65 @@
# Handoff: добить mentee-path (#4, затем #5)
Дата: 2026-07-22 20:29. Ветка: `feature/mentee-path` (запушена).
Фокус следующей сессии: конвейерное исполнение оставшихся issues фичи.
## Ближайшая работа
Корень фичи — issue #9, спека —
`docs/specs/2026-07-19-mentee-path-redesign.md` (источник истины).
Осталось два дочерних issue, оба `ready-for-agent`:
1. **#4 «Поверхность DAG'ов»** — брать первым (виден менти сразу):
`generator_control``world_init`, дефолт операции `import`,
беспараметрный `world_next_day` с paused-расписанием, синхронная
правка доков и контрактных тестов.
2. **#5 «Инкрементальные счётчики manifest»** — `next-day` без
перечитки всей Kafka; предусловие включения расписания.
Конвейер — скилл `codex-subagent-playbook`: координатор здесь, Codex
(gpt-5.6-sol, medium) исполняет, независимое ревью по риску, живая
приёмка на стенде. После закрытия обоих — закрыть корень #9 и обсудить
с пользователем слияние ветки.
## Уроки прошлой приёмки (issue #3) — применить в #4/#5
- Перед живой приёмкой — предполётный чек: `[ -S /var/run/docker.sock ]`
(Docker Desktop WSL отвечает через Windows-CLI раньше сокета) и что
подняты все сервисы шага, включая Superset. В #3 один круг приёмки
ушёл впустую именно из-за неподнятого Superset.
- При постановке исполнителю сверять границы («что не трогать»)
с критериями приёмки issue — в #3 они противоречили друг другу.
- Хостовые `uv run` с модулями генератора требуют
`--with-requirements generator/requirements.txt`.
- Автотесты не ловят дефекты интеграции (bind-mount путей, стыковку
профиля с эталоном) — живую приёмку на чистом стенде не пропускать.
## Внимание в #4
Переименование dag_id теряет историю прогонов старого — принято спекой
(решение 2). Эталонный мир уже в git
(`data/startup_history/reference-world.json.xz`, 3 дня `daily-wave`);
пустая форма пульта уже читает его по умолчанию (сделано в #3) —
в #4 меняется имя DAG и дефолт операции, не пути.
## Остальной трекер (не трогать в этой сессии)
- **Карта #10 «Боевой реализм стенда»**: фронтир — #18 «Модель данных»
(HITL-гриллинг, вход `/wayfinder 10`, лучше отдельной свежей сессией).
За ним каскад #14 кластер → #15 purchase → #16 identity → #17 спека.
- **#7 (лабы курса) и #8 (инкрементальный ETL) сознательно ждут решения
#18**: смена модели данных обесценила бы работу по ним.
- #1, #2 — независимые багфиксы UI, фоном.
## Состояние стенда
Полный стенд поднят (11 контейнеров), эталонный мир импортирован,
Superset инициализирован (дашборд id 1). Для приёмки #4 нужен живой
Airflow; чистка стенда перед работой не обязательна, но приёмку #4
делать на чистом стенде (путь менти с пустыми формами).
## Suggested skills
- `codex-subagent-playbook` — конвейер для #4/#5.
- `conventional-commits` — коммиты (русский, Зачем/Что/Проверка).
- `wayfinder` — только если пользователь сам переключится на карту #10.