diff --git a/.scratch/handoffs/20260719-2229-mentee-path-start.md b/.scratch/handoffs/20260719-2229-mentee-path-start.md deleted file mode 100644 index 95ac36f..0000000 --- a/.scratch/handoffs/20260719-2229-mentee-path-start.md +++ /dev/null @@ -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`). diff --git a/.scratch/handoffs/20260722-1913-mentee-path-and-realism-map.md b/.scratch/handoffs/20260722-1913-mentee-path-and-realism-map.md deleted file mode 100644 index 93ae8a7..0000000 --- a/.scratch/handoffs/20260722-1913-mentee-path-and-realism-map.md +++ /dev/null @@ -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. diff --git a/.scratch/handoffs/20260722-2029-finish-mentee-path.md b/.scratch/handoffs/20260722-2029-finish-mentee-path.md new file mode 100644 index 0000000..a7e8570 --- /dev/null +++ b/.scratch/handoffs/20260722-2029-finish-mentee-path.md @@ -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.