16 KiB
Ретроспектива обвязки claude-harness — 24.10.2026
Период: 2026-10-11 — 2026-10-24, полигон — репозиторий cc-harness на машине разработчика обвязки.
Предыдущая точка сравнения — docs/retro/2026-10-11.md (полигон awp-ca, другая машина).
Источники:
- 2 сессии Claude Code (
-Users-andrejepifancev-Projects-cc-harness,…--claude-worktrees-retro-2026-10-24), 69 МБ. Одна из них идёт с 15.10 по 24.10 — вся работа над #6, #19, #22, #24, #25, #29 — с одной компакцией; - auto-memory проекта — пусто, 0 файлов;
- состояние репозитория (
retro_leftovers.py --fetch); - блокировки среза, размеченные в корпус:
docs/retro/fixtures/hook-labels-2026-10-24.json, 6 записей.
Количественная часть посчитана docs/retro/scripts/retro_metrics.py (первый прогон /harness-retro), качественная — по кандидатам в поправки, выгрузкам и истории задач в Gitea.
Маркировка находок: RT-n, продолжение нумерации ретро 11.10. Приоритет: P1 — теряет время каждую неделю или ломает процесс; P2 — трение; P3 — наблюдение.
О сравнимости. 11.10 — workspace awp-ca, 44 сессии; сейчас — cc-harness, 2 сессии. Абсолютные числа несравнимы. Сравнимы:
- доли (ложные блокировки, explore);
- стартовый контекст на сессию;
- наличие хвостов закрытия.
Строки 11.10, которые считались иначе, помечены в таблице: по строкам транскрипта, без сабагентов, широким регэкспом.
1. Цифры
| Показатель | Сейчас | Прошлое ретро | Δ |
|---|---|---|---|
| Сессий | 2 | 44 | -42 |
| Промптов владельца | 43 | 613 | -570 |
| Прерываний | 2 | — | — |
| Ходов модели | 832 | 12 121 (по строкам транскрипта, не по сообщениям) | — |
| Вызовов инструментов | 1 200 | 6 583 (без сабагентов) | — |
| Запусков сабагентов | 6 | 61 | -55 |
| Токенов вывода | 928 148 | 18 300 000 (по строкам транскрипта) | — |
| Чтение из кэша, токенов | 287 121 430 | 3 820 000 000 (по строкам транскрипта) | — |
| Запись в кэш, токенов | 3 509 921 | 145 000 000 (по строкам транскрипта) | — |
| Компакций контекста | 1 | 4 | -3 |
| Стартовый контекст, медиана | 48 484 | 56 000 | -7 516 |
| Стартовый контекст, мин | 44 149 | 52 000 | -7 851 |
| Стартовый контекст, макс | 52 820 | 61 000 | -8 180 |
| Блокировок хуков | 6 | 76 (без сабагентов) | — |
| Ложных блокировок | 5 | 72 | -67 |
| Доля ложных блокировок | 0.83 | 0.95 | -0.12 |
| Ложных, уже исправлено | 5 | 72 | -67 |
| Ложных, ещё не исправлено | 0 | 0 | +0 |
| Отказов классификатора | 4 | 6 (без сабагентов) | — |
| Отказов владельца | 3 | 6 | -3 |
| codegraph init | 10 | 43 (без сабагентов) | — |
| Вызовов codegraph_explore | 4 | 15 (без сабагентов) | — |
| Чтений кода (Read/Grep/Glob/Bash) | 50 | — | — |
| Доля codegraph_explore | 0.07 | — | — |
| Кандидатов в поправки владельца | 4 | — | — |
| Промптов «перечитай память/контекст» | 0 | 9 (широкий регэксп, со сводками компакции) | — |
| MEMORY.md, байт | 0 | — | — |
| Файлов памяти | 0 | 47 | -47 |
| Память, байт | 0 | 183 296 | -183 296 |
| cd в основной checkout на main | — | — | не считается: хуки 0.4.0 не зависят от cwd (RT-2); считалось по именам репозиториев awp-ca, было 84 |
- Инструменты: Bash 675, Edit 245, Write 108, Read 93, Skill 17, EnterWorktree 12, AskUserQuestion 11, ExitWorktree 10, WebFetch 10, Agent 6
- Роли: dev 2
- Сабагенты по моделям: не указана 4, opus 2
- Skills: superpowers:brainstorming 5, role 2, superpowers:writing-plans 2, superpowers:executing-plans 2, superpowers:test-driven-development 2, superpowers:finishing-a-development-branch 2, harness-doctor 1, harness-retro 1
- Блокировки по хукам: guard-main(Bash) 5, guard-main(Edit/Write) 1
- Отказы классификатора: Self-Modification 4
Период 2026-10-11 — 2026-10-24; сессий 2; каталоги транскриптов: -Users-andrejepifancev-Projects-cc-harness, -Users-andrejepifancev-Projects-cc-harness--claude-worktrees-retro-2026-10-24; битых строк 0.
Как читать блокировки. Все пять ложных случились до установки хуков 0.4.0 на эту машину (23.10, 19:06): четыре — 15.10, одна — 23.10 в 19:05. После установки за срез одна блокировка, и она настоящая: ручная проверка Write в main. Все пять ложных текущие хуки пропускают, и все шесть теперь записи корпуса — 135/135. Ложных после 0.4.0: 0 из 1.
Подсчёт вне скрипта — docs/retro/scripts его пока не умеет:
- 22 отказа изоляции worktree Claude Code («This session is isolated in the worktree…»): 13 — 15.10, 2 — 16.10, 7 — 23.10;
- 2 промпта владельца, отправленных вместе с результатом инструмента; скрипт их не видит (RT-23).
Хвосты чеклиста закрытия:
Хвостов закрытия нет.
2. Находки
RT-21 (P1, fixed). Шаги цикла фичи спрашивали подтверждение у владельца.
- Что было: вход в worktree
../<repo>.wt/спрашивал разрешение при каждом входе. Шагиtea issues/pulls create/comments, push фичевой ветки и удаление веток не были покрыты allow-правилами. - Две поправки владельца подряд: «почему мне нужно это каждый раз подтверждать?» и «но опять спрашивает разрешение».
- Исправлено:
- #24 (0.5.0):
install.shставит allow-правила цикла фичи; - #25 (0.5.1): worktree живут в
<repo>/.claude/worktrees/и открываются черезEnterWorktreeбез запроса.
- #24 (0.5.0):
- После 0.5.1 входы в worktree шли без подтверждений.
- Источники: кандидаты в поправки, PR #26, #27.
RT-22 (P2). Советы по настройке Claude Code и внешних инструментов давались без проверки по документации. За срез три таких совета, и каждый стоил владельцу лишнего круга:
brew install codegraph— такой формулы нет, это ошибка вharness-doctor/SKILL.md(O-8, исправлено в #19);- пользовательские правила в
~/.claude/settings.local.json— такого пользовательского файла в иерархии настроек нет (O-13); - allow-правило
EnterWorktree— запрос при входе вне.claude/worktrees/оно не снимает (O-14).
Каждый раз ошибку нашли только после проверки агентом claude-code-guide по документации. Источники: PR #20, #26, ledger #29.
RT-23 (P2). retro_metrics.py не видит промпт владельца, отправленный вместе с результатом инструмента.
- Если владелец пишет, пока висит окно разрешения или работает инструмент, Claude Code пишет его текст в ту же запись, что и
tool_result. Определение спеки «сообщение безtool_result» такую запись отбрасывает. - В этом срезе пропущены 2 из 5 поправок по процессу — обе по RT-21, они найдены вручную. Число промптов тоже занижено на 2.
- Источник: прогон
--corrections, сверка с транскриптом.
RT-24 (P2). Изоляция worktree Claude Code отказывает командам, где слово git стоит в «сложном» тексте.
- Где: heredoc,
$VAR-аргументы,python3 -c,bashс переменной пути,git -Cв основной checkout. - 22 отказа за срез, 13 из них в первый день работы в worktree.
- Обход, найденный опытным путём: скрипты в файлах, литеральные пути, по одной команде;
tea commentsс телом из файла — через скрипт-обёртку. - Нигде в обвязке это не описано (O-5, #13). Код не наш, но рецепт — наш.
- Источник: подсчёт по транскриптам.
RT-25 (P3, наблюдение к решению владельца 3). Доля codegraph_explore — 0.07: 4 вызова против 50 чтений кода.
- В cc-harness codegraph индексирует только 9 Python-файлов. Bash — хуки-обёртки,
install.sh,doctor.sh, тесты — в индекс не попадает (O-11, #21). Поэтому низкая доля здесь ожидаема и о пользе codegraph не говорит. - Решающий замер — ретро по awp-ca.
- Источник: метрика codegraph.
3. Поправки владельца
| Вид | Сколько | Пример (цитата, что было до неё) | Что вышло | Находка |
|---|---|---|---|---|
| Лишнее подтверждение на шаге процесса | 2 | «почему мне нужно это каждый раз подтверждать?», «но опять спрашивает разрешение» — после EnterWorktree в ../cc-harness.wt/ |
allow-правила в install.sh (#24), worktree в .claude/worktrees/ (#25) |
RT-21 |
| Работа переложена на владельца | 1 | «сделай сам» — после «Что осталось вам: запустите bash install.sh» |
агент поставил сам; признак «сделай сам» добавлен в --corrections (H-1, #29) |
— (1 раз) |
| Варианты в окне вопроса без пояснения | 1 | прерывание и «повтори варианты опять» — после AskUserQuestion о месте worktree |
варианты повторены текстом с плюсами и минусами, выбран вариант 1 | — (1 раз) |
Два прерывания из --corrections к поправкам по процессу не относятся. Одно — пауза в brainstorming 15.10, после неё «продолжаю». Второе — то же событие, что «повтори варианты опять».
4. Что сработало (сохранить)
- Хуки 0.4.0. После установки ни одной ложной блокировки. Корпус ловит регрессии: каждый ложный блок среза стал записью корпуса, 135/135.
- Чеклист закрытия. Выполнялся целиком после каждого merge: архив отдельным PR, follow-up issue, удаление веток из worktree. Хвостов на конец среза нет — RT-3 из ретро 11.10 больше не воспроизводится.
- Финальное ревью всей ветки на opus. Находило то, чего не видели тесты плана:
- в #6 — 2 Important (
checkout main && … && push, префиксы с опциями); - в #29 — C-1 (сабагенты не читались, замер codegraph был бы пустым) и 7 Important.
- в #6 — 2 Important (
- Живые прогоны на реальных транскриптах до ревью. Нашли O-18 (синтетическое сообщение об ошибке API давало стартовый контекст 0) и O-19 (рабочий каталог активного плана как хвост).
- Одна длинная сессия. 10 дней работы, одна компакция. Работа продолжалась по сводке, ledger и issue без потери места.
- Стартовый контекст — 44–53 К токенов против 52–61 К на 11.10.
5. Бэклог улучшений (по приоритету)
| # | Что | Находки | Оценка |
|---|---|---|---|
| B13 | retro_metrics.py: считать текстовые блоки промпта владельца и в записях с tool_result; поправить определение в спеке harness-retro |
RT-23 | 0,5 дня |
| B14 | roles/dev.md: совет о настройке Claude Code, правах или установке внешнего CLI — сначала сверить по документации (агент claude-code-guide) или явно пометить как непроверенный |
RT-22 | 0,25 дня |
| B15 | HARNESS.md: рецепт команд в изолированной сессии — скрипты в файлах, литеральные пути, одна команда на вызов, обёртка для tea comments из файла |
RT-24 | 0,25 дня |
| B16 | Отложенные мелкие находки /harness-retro |
#31 (M-1…M-13) | 1 день |
| B17 | Ретро по awp-ca — решающий замер codegraph (решение владельца 3) | RT-25 | на машине с полигоном |
6. Решения владельца (24.10.2026)
- Бэклог B13–B17 принят в предложенном порядке (ревью PR #34).
- Где жить правилу B14 — в
roles/dev.mdили в глобальномCLAUDE.md— решается при его реализации. По умолчанию —roles/dev.md: глобальныйCLAUDE.mdуже 3058 Б при пороге 3 КБ.
7. Что не измерялось
- Сторона Gitea чеклиста закрытия: открытые issue после слитого PR, пропущенные follow-up. На конец среза по Gitea их нет, проверено вручную.
- Промпты владельца в записях с
tool_result(RT-23). Поправки по ним найдены вручную, счёт промптов занижен на 2. - Память: auto-memory проекта на этой машине пуста. Память awp-ca (47 файлов на 11.10) здесь недоступна, поэтому сравнение строк памяти — между разными проектами.
- Даты среза — по меткам транскрипта в UTC (M-5, #31).
- Время, потерянное на каждую поправку и каждый отказ изоляции: в транскрипте есть факт, но нет длительности.