From 1252f4a2c0b52ca45d572985476538b79e29e80a Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Wed, 22 Jul 2026 22:23:07 +0300 Subject: [PATCH] =?UTF-8?q?docs(scratch):=20handoff=20=E2=80=94=20#5=20?= =?UTF-8?q?=D0=B2=20=D1=81=D0=B5=D1=80=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D0=B9=D0=B5=D1=80=D0=B0,=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B2=D0=B5=D1=81=D1=82=D0=BD=D1=8B=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=85=D0=BE=D0=B4=D0=BA=D0=B8=20=D1=80=D0=B5=D0=B2=D1=8C?= =?UTF-8?q?=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - подстраховать продолжение работы в новой сессии: #5 реализован, но не закоммичен, два ревью в полёте. - Что: - новый handoff с состоянием конвейера #5 (CODE-1 High про лимит Kafka, порядок триажа) и уроками приёмки этой сессии; - отработанный handoff от 20:29 удалён по ADR-0003; - обменные файлы прогона #5 скопированы в .scratch/issue5-run/ (без коммита — локальная копия на случай потери /tmp). - Проверка: - git show --stat HEAD; чтение handoff свежим взглядом. Co-Authored-By: Claude Fable 5 --- .../20260722-2029-finish-mentee-path.md | 65 --------------- ...60722-2222-mentee-path-issue5-midflight.md | 81 +++++++++++++++++++ 2 files changed, 81 insertions(+), 65 deletions(-) delete mode 100644 .scratch/handoffs/20260722-2029-finish-mentee-path.md create mode 100644 .scratch/handoffs/20260722-2222-mentee-path-issue5-midflight.md diff --git a/.scratch/handoffs/20260722-2029-finish-mentee-path.md b/.scratch/handoffs/20260722-2029-finish-mentee-path.md deleted file mode 100644 index a7e8570..0000000 --- a/.scratch/handoffs/20260722-2029-finish-mentee-path.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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. diff --git a/.scratch/handoffs/20260722-2222-mentee-path-issue5-midflight.md b/.scratch/handoffs/20260722-2222-mentee-path-issue5-midflight.md new file mode 100644 index 0000000..bebcbb8 --- /dev/null +++ b/.scratch/handoffs/20260722-2222-mentee-path-issue5-midflight.md @@ -0,0 +1,81 @@ +# Handoff: mentee-path, issue #5 в середине конвейера + +Дата: 2026-07-22 22:22. Ветка: `feature/mentee-path` (запушена, ac7a973). +Фокус: дожать #5 «Инкрементальные счётчики manifest», затем корень #9. + +## Уже сделано (не переделывать) + +- **#4 закрыт** коммитом `ac7a973`: пульт → `world_init` (дефолт `import`), + беспараметрный `world_next_day` (`*/30 * * * *`, paused, catchup=False), + доки и контрактные тесты. Живая приёмка пройдена, детали — в + комментарии к issue #4. +- **#5 реализован исполнителем** (Codex, gpt-5.6-sol high), НЕ закоммичен — + лежит в рабочем дереве. Дизайн: счётчики засеваются при `import` из уже + прочитанного артефакта и при `backfill` из потока; `next-day` без + перечитки Kafka; катящаяся сумма = SHA-256 по модулю 2^256 + (коммутативна, инкремент == полный пересчёт); артефакт в git не тронут. + `make test` (214+31) и `make lint` зелёные. + +## Где мы сейчас: два адверсариальных ревью #5 + +Обменные файлы прогона скопированы в `.scratch/issue5-run/` +(оригиналы — в scratchpad сессии 0836e970 в /tmp/claude-1000): +мандат, отчёт исполнителя, отчёт линии B, фокус линии A. + +- **Линия B (Opus, качество кода) — готова: CHANGES_REQUESTED.** + - CODE-1 (High): manifest хранит точные множества click_id/uid — + уже ~0,81 МБ на эталонном мире; лимит сообщения Kafka 1 МБ нигде + не переопределён → запись manifest упадёт примерно через один + next-day. Болезнь перенесена из чтения в потолок записи. + - CODE-2 (Low): в next-day state пишется раньше manifest (import — + наоборот); окно полупродвинутого стенда шире нужного. + - Математика суммы и legacy-валидация старого артефакта подтверждены. +- **Линия A (Codex, соответствие задаче) — ещё работала** на момент + handoff. Статус задач Codex смотреть в JSON: + `~/.claude/plugins/data/codex-openai-codex/state/clickstream-ch-kafka-superset-demo-*/jobs/*.json` + (поле status/phase). Отчёт линия A пишет в scratchpad сессии: + `review-issue5-task.md` (если появился — скопировать в + `.scratch/issue5-run/`). + +## Дальше по конвейеру (договор ревью из скилла codex-subagent-playbook) + +1. Дождаться линию A. Оба полных отчёта БЕЗ изменений → исполнителю + (Codex, тот же тред/задача) на пофиндинговый триаж + короткая шапка + координатора (совпадения/противоречия). CODE-1 почти наверняка — смена + представления множеств; НЕ проектировать решение за исполнителя. +2. Фикс-раунд → узкая перепроверка тем же ревьюером (линия B по CODE-1/2). +3. Живая приёмка на чистом стенде: `import`, 2–3 прогона `world_next_day` + с замером «день N ≈ день 1», `make generated-history-chain-check`. +4. Коммит (conventional, русский, Зачем/Что/Проверка), закрыть #5, + затем корень #9; слияние ветки обсудить с пользователем. + +## Уроки приёмки этой сессии (сэкономят круги) + +- REST API Airflow на стенде — только session-auth: живую приёмку водить + через `docker compose exec -T airflow-scheduler airflow dags ...` + (unpause/trigger/list-runs — эквивалент кликов UI и пустой формы). +- Webserver поднимается позже парсинга DAG'ов — проверять `/login/` + циклом с ретраями, не одним запросом. +- В `dm.v_events_enriched` колонка даты — `event_date` (не event_time). +- `make superset-init` сам поднимает Superset и создаёт дашборд + (ecommerce-analytics) — отдельный make-шаг не нужен. +- Субагент `codex:codex-rescue` — только пускатель: задачу Codex он не + ждёт; мониторить JSON статуса задачи самому (фоновый bash-цикл). +- Приёмку #4 трижды ронял сам сценарий приёмки, не реализация — + проверять команды сценария на живом стенде до полного прогона. + +## Состояние стенда + +После приёмки #4: мир 5 дней (эталонные 3 + два плановых прогона), +`world_next_day` возвращён на паузу. Для приёмки #5 стенд всё равно +чистить (`make clean`). + +## Остальной трекер (не трогать) + +- Карта #10: фронтир #18 «Модель данных» — `/wayfinder 10` свежей сессией. +- #7, #8 ждут решения #18. #1, #2 — фоновые багфиксы UI. + +## Suggested skills + +- `codex-subagent-playbook` — конвейер #5 (ревью/триаж — по его договору). +- `conventional-commits` — коммиты.