andrey.epifantsev 3d2ce3f41d fix(retro): финальное ревью — сабагенты, период по записям, разбор Bash, redact до обрезки, --from (#29)
- C-1: транскрипты сабагентов (<сессия>/subagents/*.jsonl) вливаются в
  сессию-родителя — ходы, токены, инструменты, codegraph, блокировки,
  отказы; промпты, роль, стартовый контекст — только из основного.
  hook_blocks_export.py выгружает их блокировки с сессией-родителем.
- I-7: период режется по меткам времени записей; сессия на стыке
  делится между ретро, стартовый контекст — если первый ход в периоде.
- I-1: простые команды Bash — shlex с punctuation_chars, «|» в кавычках
  команду не делит. I-2: правило src/ ловит и сам каталог src.
- I-3: clip() — redact до обрезки (кандидаты, выгрузка), роль — redact.
- I-4: без --since период берётся из существующего --out; --from рисует
  «Цифры» из сохранённого среза. SKILL.md передаёт период явно.
- I-5: выгрузка ретро без разметки — сборка корпуса падает.
- I-6: сводка компакции — не промпт; «перечитай» — побуждение перечитать.
- 2026-10-11.metrics.json: несравнимое помечено (без сабагентов, широкий
  «перечитай»). Спека и design.md (Decisions) обновлены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:59:41 +04:00

5.9 KiB
Raw Blame History

name, description
name description
harness-retro Ретро обвязки claude-harness по транскриптам, памяти и репозиториям одного проекта или workspace — срез метрик, разметка блокировок хуков в корпус, хвосты закрытия, поправки владельца, черновик docs/retro/<дата>.md и PR. Запускать в сессии в репозитории обвязки по команде «/harness-retro <папка> [--since ГГГГ-ММ-ДД]» после среза.

/harness-retro

Аргумент — папка проекта или workspace, который изучаем. Сессия — в репозитории обвязки, роль dev. Дата ретро <D> — сегодня, ГГГГ-ММ-ДД. Скрипты — docs/retro/scripts/, все команды — из корня worktree ретро. Спека — openspec/specs/harness-retro/spec.md.

Шаги

  1. Задача и worktree. Issue «Ретро : <проект>» (tea issues create). Затем EnterWorktree с именем retro-<D>, ветка git branch -m retro/<D>, codegraph init в worktree.
  2. Срез. Выполнить python3 docs/retro/scripts/retro_metrics.py <папка> [--since …] --out docs/retro/<D>.metrics.json.
    • Период <since> — period.since из docs/retro/<D>.metrics.json. На шагах 3 и 5 передавать его явно (--since <since>). Повторный запуск с тем же --out берёт период из него, поэтому черновик <D>.md период не сдвигает.
    • В срез входят записи периода, в том числе из длинных сессий, начатых раньше. Транскрипты сабагентов (<сессия>/subagents/) входят в сессию-родителя.
    • Exit 1 — сессий нет. Сообщить владельцу slug и период и остановиться.
    • Битых строк больше 1 % — отметить в «Что не измерялось».
  3. Блокировки. Сначала выгрузить: python3 docs/retro/scripts/hook_blocks_export.py --since <since> --id-prefix <D> <каталоги из sources.dirs> > docs/retro/fixtures/hook-blocks-<D>.jsonl. Каталоги — ~/.claude/projects/<имя>.
    • Разметить каждую запись в docs/retro/fixtures/hook-labels-<D>.json:
      • expected (allow|block) и why по спеке hook-guards;
      • раскладку песочницы — по gitBranch сессий и выводу git worktree list и git branch в транскриптах;
      • если не восстановить — skip с причиной.
    • Собрать корпус: python3 docs/retro/scripts/hook_cases_build.py > skills/harness-doctor/fixtures/hook-cases.jsonl и прогнать bash tests/run.sh hook-corpus. Если текущий хук даёт не тот вердикт — проставить записи "known": "RT-n" и завести находку.
    • Пересчитать срез с --labels docs/retro/fixtures/hook-labels-<D>.json --out docs/retro/<D>.metrics.json.
  4. Хвосты закрытия. python3 docs/retro/scripts/retro_leftovers.py <папка> --fetch --markdown. Ничего не удалять: таблица идёт в черновик, уборка — по решению владельца.
  5. Поправки владельца. python3 docs/retro/scripts/retro_metrics.py <папка> --since <since> --corrections.
    • Отобрать только поправки по процессу: пропущенный шаг, лишний вопрос, неверный совет, обход правила, расширение задачи. Вопросы и просьбы по содержанию выбросить.
    • Сгруппировать по видам.
    • Вид, который повторяется (2 раза и больше) или стоил владельцу заметного времени, — находка RT-n и пункт бэклога.
  6. Качественная часть. Прочитать память проекта целиком (~/.claude/projects/<slug>/memory/) и примеры из выгрузок. Находки RT-n — сквозная нумерация: максимум в прошлых docs/retro/*.md плюс 1. Приоритет: P1 — теряет время каждую неделю или ломает процесс; P2 — трение; P3 — наблюдение.
  7. Черновик. Скопировать .claude/skills/harness-retro/template.md в docs/retro/<D>.md и заполнить.
    • «Цифры»: python3 docs/retro/scripts/retro_metrics.py <папка> --from docs/retro/<D>.metrics.json --markdown --prev docs/retro/<прошлое>.metrics.json — таблица из сохранённого среза, без пересчёта.
    • Секретов в черновике быть не должно. Цитаты брать только из вывода скриптов: он уже прошёл redact.
  8. PR. bash tests/run.sh должен быть зелёным. Коммит: черновик, metrics.json, выгрузка, разметка, корпус. Затем git push -u origin retro/<D> и tea pulls create со ссылкой на issue. Merge — только владелец.

Не делать

  • Не удалять хвосты и не чинить хуки в PR ретро — это находки и бэклог.
  • Не заполнять раздел «Решения владельца»: он пишется на ревью PR.
  • Не вставлять в черновик сырые куски транскриптов мимо скриптов.