- Зачем:
- следующая сессия после 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:
@@ -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 0004–0006, спеки, 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.
|
||||||
Reference in New Issue
Block a user