docs(generator): решена развилка задачи 13, handoff сессии

- Зачем:
  - диагноз задачи 20 снял страх швов (генератор на стыке не ломает),
    и пользователь выбрал вариант реализации next-day;
  - сессия завершается - нужен handoff для продолжения.
- Что:
  - задача 13: выбран вариант 2 (генерация следующего дня от слепка),
    вариант нарезки артефакта отклонён с обоснованием; статус
    ready-for-agent, blocked by задача 20;
  - handoff сессии в .scratch/handoffs/ - итоги проверки пути менти,
    состояние трекера, план (фикс 20 -> задача 13 -> HITL).
- Проверка:
  - чтение задачи 13 и handoff; git status чистый после коммита.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 22:40:29 +03:00
co-authored by Claude Fable 5
parent 98be722808
commit 515d5ef73b
2 changed files with 85 additions and 15 deletions
@@ -1,4 +1,4 @@
Status: ready-for-human
Status: ready-for-agent
# Глагол next-day: собрать следующий модельный день
@@ -28,22 +28,21 @@ Status: ready-for-human
где ручки генератора; pause-check `etl_pipeline` и guard чистого стенда
переиспользуются. Ручной триггер — для урока, расписание — для «жизни».
## Развилка реализации (решить до реализации)
## Развилка реализации решена (пользователь, 2026-07-07)
Интерфейс `next-day` одинаков для двух начинок, начинку можно менять, не
трогая то, чему учим:
**Выбран вариант 2: генерация следующего дня от слепка `T_end`.**
1. **Резать готовый артефакт на дневные порции.** История сгенерирована одним
прогоном (задача 07), швов нет вообще — границы дней внутри одного мира
естественные. Дёшево, если механизм импорта умеет подавать историю частями
(см. «Открытые вопросы»). Ограничение: горизонт равен длине артефакта.
2. **Доливка от слепка `T_end`.** Настоящая генерация продолжения. Нужна,
когда жизнь стенда должна быть неограниченной. Каждый батч добавляет шов;
restore-механизм общий с рестартом и закалён задачей 09, но открыт хвост
про запасную ветку рождения визита (см. критерии).
Обоснование. Диагноз задачи 20 показал, что генератор на стыке ничего не
ломает — красный гейт был гонкой в самой проверке. Страх «швов» был страхом
перед артефактом верификатора. При этом оба варианта одинаково требуют
цепочку манифестов и расширение проверок, а вариант 1 сверх того требует
новый режим среза в импорте («всё или ничего» сейчас). То есть вариант 2 не
дороже, честнее (жизнь стенда не ограничена длиной артефакта) и переиспользует
уже закалённый restore-механизм (задача 09: донор в state, громкие ошибки,
детерминированная запасная ветка).
Разумный путь: вариант 1 как MVP, вариант 2 — когда упрёмся в конец артефакта
(возможно, отдельной задачей).
Отклонено: вариант 1 (резать готовый артефакт на дневные порции) — не даёт
неограниченной жизни и требует своей новой механики импорта.
## Открытые вопросы (блокируют ready-for-agent)
@@ -82,7 +81,8 @@ Status: ready-for-human
## Blocked by
- Открытые вопросы выше (статус needs-info до их закрытия).
- `20-flaky-runtime-seam-check.md` — доверенный стабильный гейт стыка нужен
до навешивания на него цепочки границ; фикс 20 идёт первым.
- Исторические блокеры закрыты: `15-world-boundary-after-cross-review.md`
(граница миров) и `17-trusted-checks-startup-history-superset.md`
(доверенные проверки) — done.
@@ -0,0 +1,70 @@
# Handoff: проверка пути менти, диагноз флаки-гейта, задача next-day
Дата: 2026-07-07 22:34.
Жанр: handoff по ADR-0003 после сессии «проверка пути менти + триаж 13/20».
## Что закрыто
- Проверка пути менти двумя субагентами (читатель документации на Opus,
прогонщик стенда на Sonnet):
- Документация: workable-with-friction, четыре мелких находки — все
исправлены. Коммит `900e949`.
- Стенд с нуля: clean -> generated-history-analytics -> up -> проверки ->
Superset (чарты с данными) -> Kafka (4 data-топика + служебные) ->
ClickHouse (ODS/DM непустые) — всё прошло, дубликатов ноль.
- Единственное падение: `make generated-history-runtime-check` красный
через раз — заведена задача 20.
- Диагноз задачи 20 (Codex, ключевой факт перепроверен по коду): генератор
фактуру на стыке НЕ ломает; корень — гонка остановки live-генератора в
самой проверке + seam-SQL, маскирующий непарные строки под «смену фактуры».
Детали и направление фикса — в задаче. Коммит `98be722`.
- Задача 13 переписана под глагол `next-day` в `generator_control`;
оба открытых вопроса закрыты; развилка реализации решена пользователем:
**вариант 2 — генерация следующего дня от слепка** (обоснование в задаче).
Коммиты `a3ac4b4`, `98be722`; решение развилки — в коммите с этим handoff.
- Созданы репо-локальные субагенты `.claude/agents/deep-reasoner.md` (Opus)
и `fast-worker.md` (Sonnet); `.gitignore` скрывает локальное в `.claude/`.
Коммит `984d6fc`.
## Состояние трекера
- `20-flaky-runtime-seam-check.md`**ready-for-agent**: диагноз есть,
направление фикса выбрано (управляемая остановка live после полного flush
всех топиков + precheck непарных строк в seam-check). Идти первым.
- `13-backfill-top-up-from-snapshot.md`**ready-for-agent**, blocked by 20.
Вариант реализации решён, критерии в задаче.
## Что дальше
1. Фикс задачи 20 по конвейеру `/claude-subagent-playbook`: постановка в
задаче самодостаточна, свежий адверсарный взгляд на неё до реализации,
реализация Кодексом (прямой `codex exec`, не плагин — см. handoff в
скилле), два слепых ревью.
2. После зелёного стабильного гейта (3+ прогона) — задача 13.
3. Ручная HITL-проверка пути менти пользователем всё ещё не сделана
(Airflow UI, Superset глазами, Kafka UI) — стенд остался в рабочем
состоянии после зелёного runtime-check.
## Проверки этой сессии
- `make generated-history-runtime-check`: красный (8/19), затем зелёный —
эмпирика флаки в задаче 20; полные логи в session-scratchpad (одноразовые,
сводка перенесена в задачу).
- Утверждение диагноза про запасную ветку перепроверено по
`generation.py:194-209`.
- Дерево чистое после каждого коммита; `.claude/settings.local.json`
в git не попал.
## Отклонения процесса
- Прогонщик стенда дважды засыпал без отслеживаемого фонового процесса и
в финале умер, не собрав отчёт, — вердикт собран координатором из логов.
- Диагност через плагин codex-rescue: форвардер отчитался «finished» при
живом фоновом вызове; результат забран напрямую из output-файла задания.
Уроки процесса — в handoff рядом со скиллом claude-subagent-playbook.
## Suggested skills
- `claude-subagent-playbook` — для фикса задачи 20 (одна нетривиальная
задача: постановка готова, нужен конвейер).
- `conventional-commits` — коммиты.