Files
dotfiles/agents/.agents/skills/claude-subagent-playbook/references/lessons.md
T
Dmitry DementievandClaude Fable 5 ba587293c9 docs(skill): claude-subagent-playbook — уроки боевого прогона 2026-07-07
- Зачем:
  - первый полный боевой прогон конвейера (наглядность витрины t2-ml-forecast)
    дал систематические уроки по ожиданию фоновых job и resume Codex-тредов.
- Что:
  - в references/lessons.md добавлен разбор прогона: idle-уведомление ≠ отчёт,
    bash-поллер умирает на смене хода (нужен persistent Monitor), зомби-job
    со статусом «running» у мёртвого воркера и его диагностика.
  - урок про resume уточнён по опыту пользователя из /adversarial-review:
    resume — только по явному id треда; безадресный resumeLast подхватывает
    чужой тред; запасной путь — свежий write-тред с контекстом из файла задачи.
  - зафиксировано: ранжировать правила постановки (что главнее) и требовать
    вписывать доводы отклонений в файл задачи; цифры прогона (18 мин
    реализация, тесты 147 → 154, ноль пересечений находок двух ревью).
- Проверка:
  - вычитка references/lessons.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 19:03:41 +03:00

8.4 KiB
Raw Blame History

Эмпирика прогонов

Датированные факты: что поймал каждый этап конвейера, казусы, цифры. Дописывай после каждого прогона — это и есть «выжимка опыта», ради которой скилл существует.

2026-07-06 — t2-ml-forecast, задача 05 «полировка витрины под демо»

Первый прогон конвейера. Задача: ~200 строк правок в ядре отчёта + ноутбук.

Свежий взгляд на постановку (Клод, adversarial-reviewer) — окупился:

  • блокер: постановка требовала «русские названия из report.name_ru», а в данных name_ru — английские имена из Excel-книги; исполнитель молча сделал бы английские заголовки. Решение внесено в задачу: словарь «статья → русское имя» как явная поставка;
  • две «одностроки», прятавшие проектные решения: поворот отрицательного ряда (правило, пересчёт коридора, единый хелпер) и согласованность «график по модулю vs таблица со знаком»;
  • процессная дыра: без явных двух шагов регенерации .ipynb остался бы без выводов, и тест ноутбука его бы завернул.

Казус форвардера: субагент codex:codex-rescue, получив постановку вместо команды, реализовал задачу сам (+1227 строк). Настоящий Codex стартовал на уже изменённом дереве — столкновения избежали везением (форвардер успел закончить). Урок в SKILL.md и codex-companion.md.

Слепое двойное ревью — родословные поймали разное:

  • Клод (Опус): APPROVE; подтвердил математику поворота/коридора (алгебраическое тождество), краевые случаи (ряд через ноль, нули), неизменность метрик и таблиц; посмотрел картинки из .ipynb; один nit.
  • Codex (свежий тред): needs-attention; две дыры в тестах — раздел ноутбука не закреплён в required_snippets, нет регрессионного теста «таблица отрицательного ряда остаётся со знаком». Оба — про то, что зелёный прогон не докажет готовность; Клод этих дыр не нашёл.
  • Пересечения находок — ноль. Слепота и разность родословных работают.

Точечная починка: Codex --fresh с промптом «добавь только два теста, продуктовый код не трогай» — чисто, 148 → 150 passed.

Цифры для калибровки: ревью Клода на Фабуле (этап постановки) — ~60k токенов; конвейер целиком — ~3 часа настенного времени, из них реализация ~20 минут; остальное — ревью и оркестрация. На мелочь такое не разворачивать.

Смерть ревьюера (тот же день, ревью самого скилла по /claude-team-review): Опус-ревьюер дважды ушёл в idle без доставленного отчёта (одно напоминание по idle-гарду — снова тишина), пользователь подтвердил: субагент исчез из интерфейса. Спасти отчёт из транскрипта не удалось — jsonl тиммейтов не нашлись в каталоге проекта. Урок: отчёт фонового ревьюера — скоропортящийся; если он критичен, проси ревьюера сначала писать результат в файл (двухканальный протокол раннера из /adversarial-review), а сообщение слать как указатель. Ревью скилла не состоялось — отложено до боевого прогона.

Прогон 2026-07-07: наглядность витрины (боевой, полный конвейер)

Задача: витрина понятна финансисту без голоса (5 блоков, 5 файлов). Конвейер отработал целиком: исследование двумя головами → постановка → свежий взгляд (1 блокер + 9 находок, в т.ч. повторно поймана ловушка name_ru) → Codex 18 мин → два слепых ревью → триаж у исполнителя → две точечные правки → приёмка. Пересечение находок ревьюеров — снова ~ноль (Клод смотрел артефакты глазами и принял; Codex дал 4 «поправить» по букве задачи). Их прямое противоречие (ослаблен ли тест) рассудил исполнитель по контракту — механизм работает.

Ожидание фоновых job:

  • Idle-уведомление субагента ≠ отчёт: почти каждый субагент уходил в idle ДО доставки отчёта. Лечится немедленным явным «пришли отчёт на main».
  • Фоновый bash-поллер (until…sleep) у раннера умирает при смене хода. Надёжно: persistent Monitor без таймаута.
  • Статус job — не истина: воркер финальной правки умер после успешных проверок, статус завис «running» навсегда (зомби). Диагностика оркестратором: mtime артефакта (showcase-check.ipynb дописан) + лог job (все проверки зелёные) + pgrep (воркера нет) → забрать финал себе, раннера распустить.

Codex companion:

  • Безадресный --resume/resumeLast резолвится в «последний тред сессии» — при параллельных тредах подхватывает чужой read-only ревью-тред. С ЯВНЫМ id тред подхватывается свой (сэндбокс привязан к треду: у write-треда останется write) — это же проходили в /adversarial-review. Правило: resume — только по id; если id не сохранился, свежий write-тред дочитает контекст из файла задачи (решения вписаны туда).

Постановка:

  • Правила задачи стоит ранжировать явно («правило A главнее буквы E»): внутреннее противоречие (де-жаргон vs «заголовки не трогать») всплыло только после починки по ревью и потребовало отдельной правки решением оркестратора.
  • Требовать от исполнителя вписывать доводы отклонений в файл задачи — окупилось: свежий write-тред продолжил работу без контекста предшественника.

Цифры: реализация 18 мин; триаж-починка ~8 мин; финальная правка ~3 мин работы + ~20 мин зомби-ожидания. Тесты 147 → 154. Панель конвенций дала демо аргумент: 10 из 13 против 6 из 13 в зависимости от прочтения порога.