docs(scratch): handoff — #5 в середине конвейера, известные находки ревью
- Зачем: - подстраховать продолжение работы в новой сессии: #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 <noreply@anthropic.com>
This commit is contained in:
@@ -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.
|
|
||||||
@@ -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` — коммиты.
|
||||||
Reference in New Issue
Block a user