Files
dotfiles/agents/.agents/skills/claude-subagent-playbook/references/lessons.md
T
ddadmin 7110a075ea docs(skill): принцип «мастер решает», готовые boilerplate-промпты, ревизия
- Зачем:
  - ретро прогона 2026-07-12 (задача 20, clickstream-demo): контекст
    оркестратора съедали инлайн-диагнозы, переписывание boilerplate и
    кириллица в обменных файлах.
- Что:
  - SKILL.md: принцип «мастер решает — субагенты выясняют» со стоп-краном
    «сам — максимум один заход», обменные файлы на английском, сквозная
    проверка до ревьюеров, будильник одной строкой.
  - references/prompts/: готовые английские boilerplate-файлы (мандат
    ревью, триаж, перепроверка) — подшиваются cat'ом, контекст мастера
    не проходят; prompt-templates перестроен под сборку.
  - codex-exec: модель gpt-5.6-sol, лестница эффорта, ловушка «&»;
    sandbox-справочник переименован в codex-sandbox-apparmor.md;
    lessons дистиллирован, добавлена запись прогона 2026-07-12.
  - закрыты 14 находок слепого Fable-ревью скилла (согласованность,
    единый источник $SCRATCH, скелет ревью постановки).
- Проверка:
  - все внутренние ссылки резолвятся; слепое ревью: APPROVED_WITH_MINORS,
    восстановление структуры подтверждено без потерь.
2026-07-12 22:17:59 +03:00

114 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Эмпирика прогонов
Датированные факты: что поймал каждый этап конвейера, казусы, цифры.
Дописывай после каждого прогона — это и есть «выжимка опыта», ради которой
скилл существует. Журнал накопительный, поэтому дистиллируй: когда урок
поглощён SKILL.md или references, сжимай его запись здесь до строки-факта
(дата, что случилось, куда поглощено) — иначе файл растёт бесконечно.
## 2026-07-06 — t2-ml-forecast, задача 05 (первый прогон; дистиллировано 2026-07-12)
- Свежий взгляд на постановку окупился: блокер name_ru (в данных — английский),
две «одностроки» с проектными решениями, дыра регенерации `.ipynb`.
Поглощено: SKILL.md этап 2.
- Казус форвардера: субагент, получив постановку вместо команды, реализовал
задачу сам (+1227 строк). Поглощено: SKILL.md этап 3, codex-exec (раннер).
- Слепое двойное ревью: пересечение находок — ноль; Клод подтвердил математику
и артефакты, Codex нашёл две дыры в тестах. Поглощено: SKILL.md (роли).
- Смерть фонового ревьюера без доставленного отчёта; транскрипт не спас.
Поглощено: SKILL.md этап 4 (вердикт — файлом, сообщение — указателем).
- Цифры: ревью постановки ~60k токенов; конвейер ~3 часа, реализация ~20 мин.
## 2026-07-07 — наглядность витрины (полный конвейер; дистиллировано 2026-07-12)
- Idle-уведомление ≠ отчёт; голый поллер вне run_in_background умирает при
смене хода; статус job — не истина (зомби «running» после смерти воркера:
истина — mtime артефакта + лог + pgrep). Поглощено: SKILL.md
(«Пользователь в петле»), codex-exec (фоновый запуск, раннер).
- Безадресный resume подхватывает чужой тред. Поглощено: codex-exec.
- Доводы отклонений — в файл задачи (свежий тред продолжает без контекста
предшественника). Поглощено: prompts/triage-header.md.
- Не поглощено (держать в уме при постановке): правила задачи ранжировать
явно («правило A главнее буквы E») — внутренние противоречия всплывают
после починки.
- Цифры: реализация 18 мин; триаж ~8 мин; тесты 147 -> 154.
## 2026-07-09 — local-transcriber, SendTo (первый под Windows; дистиллировано 2026-07-12)
- Git Bash-стек работает целиком; классификатор режет companion `--write`,
прямой `codex exec` проходит. Поглощено: codex-exec.
- Свежий взгляд: 2 major (OEM-кодировка `.cmd` на кириллическом профиле,
протухание пути venv) + load-bearing порядок проверок. Поглощено: этап 2.
- Отписка: вердикт одной строкой, проверка по JSONL подтвердила работу.
Поглощено: SKILL.md этап 4, codex-exec.
- Эмпирический ревьюер (воспроизведение краевых случаев вне репо) — вердикт
твёрже. Поглощено: SKILL.md этап 4, boilerplate шаблонов.
- Цифры: ревью постановки ~57k, кода ~48k, перепроверка ~45k токенов.
## 2026-07-10 — четыре записи (дистиллировано 2026-07-12)
- Ревьюер Codex без read-only: мандат промптом надёжен, песочница не режется.
Поглощено: codex-exec (ветка ревьюера).
- Sandbox-инцидент CLI 0.144.1 (bwrap+userns vs AppArmor) и ловушка memfd
(профиль на путь bwrap не цепляется — вешать на бинарь codex). Поглощено:
codex-exec + codex-sandbox-apparmor.md.
- Постановка через `/to-tickets` ложится в конвейер без трения; двойное
слепое ревью постановки окупилось (Клод — механика кода, Codex — уровень
требований; пересечение 2 из ~15). Поглощено: SKILL.md этапы 1–2.
- Ретро расхода контекста (3 цикла): находки проходили через оркестратора
до шести раз; review-промпт дублировался; ~7 пустых ходов на idle-пингах.
Поглощено: SKILL.md (роль оркестратора: индекс, cat, файлы), шаблоны.
## Прогон 2026-07-12: clickstream-demo, задача 20 — флаки runtime-гейта
Полный конвейер + три захода стендовой приёмки. Главный урок прогона:
**ревью по чтению кода не заменяет сквозный прогон** — два класса дефектов
вскрылись только на стенде.
**Что поймал каждый этап:**
- Ревью постановки (Opus): настоящий корень — отсутствие SIGTERM-хендлера
(python PID 1, SIGKILL после grace); один из двух вариантов фикса в
постановке гонку не закрывал. Плюс критерий «красный сценарий всё ещё
ловится» и запрет вероятностных смягчений.
- Слепые ревью: Codex — grace-период 10с и обходимость precheck (пара из
старой backfill-строки); Клод — подтвердил структурный довод, на узкой
перепроверке принёс НОВУЮ находку (тест биндил порт 9109 — флаки 1/13).
Пересечение — 2 темы из ~8 (grace, слабый контракт-тест): не «стабильно
ноль», но малое; обе родословные оправдались.
- Стендовая приёмка (3 захода): (1) гейт годами жил на побочном эффекте
бага — пересекающие визиты давала «нелегальная переработка» генератора
после игнорируемого SIGTERM; честный фикс оставил проверку без сырья;
(2) таймзона: наивные метки STG (UTC) против границы с `+00:00` на
сервере Europe/Moscow — precheck был зелёным вакуумно; та же ошибка — в
приёмочном скрипте координатора (наивная конвенция DDS). Урок: сравнение
времени в SQL — только с явным поясом с обеих сторон.
**Ретро контекста оркестратора** (главный пожиратель — внеплановые циклы):
диагнозы падений приёмки велись мастером инлайн (~15 вызовов); boilerplate
промптов переписывался трижды; обменные файлы шли кириллицей (×1,5–2);
правки задачи-файла — тремя крупными Edit (old+new = двойной текст);
промпты будильников пересказывали план. Поглощено 2026-07-12: SKILL.md
(принцип «мастер решает — субагенты выясняют», стоп-кран «сам — максимум
один заход», механика — fast-worker'у, обменные файлы на английском,
будильник одной строкой, сквозная проверка до ревью, фолбэк ревьюера
deep-reasoner — обкатан этим прогоном), prompt-templates + prompts/
(готовые boilerplate-файлы, английские скелеты), codex-exec (модель
gpt-5.6-sol, medium для узких починок, ловушка `&`). Слепое Fable-ревью
самого скилла (по глоссарию writing-great-skills): восстановление после
rm -rf подтверждено без потерь, 9 MINOR + 5 NIT согласованности — все
закрыты тем же днём.
**Прочее:** казус двойного фона (`&` при run_in_background) — спасён
ожидателем `kill -0`; принятие остаточного риска (публикация не ограничена
по времени) зафиксировано доводом в задаче — паттерн «риск принят + после
фикса такой отказ падает громко и честно» работает как аргумент приёмки.
Отдельный казус координатора: `rm -rf` «зеркала» скилла прошёл сквозь
симлинк `~/.claude/skills -> dotfiles` и снёс оригинал; восстановлено из
git (`git show HEAD:path`) + повторным наложением правок из контекста.
Урок: перед rm — `ls -la` цели и родителя, симлинк-родитель = чужая
территория.
**Цифры:** реализация ~25 мин; ревью постановки 75k токенов субагента,
ревью кода 65k, перепроверка 80k (с новой находкой); приёмка — 4 прогона
гейта по ~1,5 мин + красный сценарий; тесты 190 -> 192 + 21.