andrey.epifantsev b77776849e docs(spec): /harness-retro — срез метрик, поправки владельца, хвосты закрытия, корпус по сегментам (#29)
OpenSpec change harness-retro: proposal, specs (harness-retro — новая
capability; hook-guards — MODIFIED «Регрессионный корпус хуков»: сегменты
и known), design с Decisions made without discussion. По итогам
brainstorming 24.10.2026: черновик ретро, срез одного проекта, запуск из
репозитория обвязки, разметка блокировок агентом в корпус, хвосты по
текущему состоянию, поправки владельца по процессу, подход A.

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

70 lines
6.5 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.

# Proposal: `/harness-retro` — регулярное ретро обвязки
Issue: #29. Источники:
- ретро `docs/retro/2026-10-11.md` — B12, решение владельца 3 (замер codegraph);
- находки O-10, O-11 (#21), O-17 (#28);
- brainstorming 24.10.2026.
## Why
Ретро 11.10 считали два одноразовых скрипта, `docs/retro/scripts/retro_stats.py` и `retro_blocks.py`. У них нет функций и тестов. В них зашиты имена репозиториев awp-ca, и они ничего не знают про `.claude/worktrees/`. Вывод — текст для глаз, поэтому таблицу «Цифры» собирали вручную.
Повторить такое ретро и сравнить его с прошлым нельзя, а именно сравнение показывает, помогли ли изменения обвязки: хуки 0.4.0, роли 0.3.0, allow-правила 0.5.0. Решение владельца 3 требует замерить codegraph в одном срезе, и метрика должна входить в `/harness-retro`.
Владелец хочет видеть в ретро места, где он поправлял агента по процессу. Сейчас они теряются в транскриптах.
Блокировки, размеченные при ретро, в регрессионный корпус хуков не попадают. Ложный блок, найденный на ретро, тестом не становится.
## What Changes
- **Новый проектный skill `/harness-retro`** (`.claude/skills/harness-retro/`). Запускается в сессии в репозитории обвязки: `/harness-retro <папка проекта или workspace> [--since ГГГГ-ММ-ДД]`. Работа идёт по циклу фичи: issue, `EnterWorktree`, PR. Результат — черновик `docs/retro/<дата>.md` по шаблону и `docs/retro/<дата>.metrics.json`. Утверждение — merge владельца.
- **`docs/retro/scripts/retro_metrics.py`** — stdlib, на функциях, с тестами. Даёт метрики среза по транскриптам и памяти проекта:
- сессии, промпты, инструменты, роли, сабагенты, skills, токены, компакции;
- стартовый контекст;
- блокировки хуков;
- отказы классификатора и владельца;
- codegraph против чтения кода;
- поправки владельца;
- «перечитай память»;
- размер памяти.
Выводит JSON, таблицу «Цифры» со сравнением с прошлым `*.metrics.json` и кандидатов в поправки владельца с контекстом.
- **`docs/retro/scripts/retro_leftovers.py`** ищет хвосты чеклиста закрытия по текущему состоянию репозиториев проекта:
- слитые ветки на сервере и локально, worktree на них;
- `.superpowers/sdd/*`;
- неархивные changes в `origin/main`;
- отставший или грязный основной checkout.
Только чтение; `--fetch` по запросу.
- **`hook_blocks_export.py --since`** выгружает блокировки среза в `docs/retro/fixtures/hook-blocks-<дата>.jsonl`. Агент размечает их по спеке `hook-guards` в `hook-labels-<дата>.json` (вердикт, класс, раскладка песочницы), и `hook_cases_build.py` дописывает их в корпус.
- **Корпус хуков** состоит из сегментов: у каждого своя шапка `{home, layout}`, раннер строит песочницу на сегмент. Запись с `known: "RT-n"` — известная ошибка текущих хуков, тест на ней не падает. Doctor показывает число известных ошибок.
- `retro_stats.py` и `retro_blocks.py` удаляются. Их заменяет `retro_metrics.py`. Ретро 11.10 ссылается на них как на историю.
- `docs/retro/2026-10-11.metrics.json` переносится один раз из таблицы ретро 11.10, чтобы следующему ретро было с чем сравнивать.
## Capabilities
### New Capabilities
- `harness-retro`: срез метрик обвязки по транскриптам, памяти и состоянию репозиториев проекта; кандидаты в поправки владельца; разметка блокировок в корпус; черновик ретро и сравнение с прошлым.
### Modified Capabilities
- `hook-guards`: требование «Регрессионный корпус хуков» — сегменты с собственной раскладкой и известные ошибки `known`.
## Impact
- **Код:**
- новые `docs/retro/scripts/retro_metrics.py`, `retro_leftovers.py`;
- `hook_blocks_export.py` (`--since`, id);
- `hook_cases_build.py` (разметка из `hook-labels-*.json`, сегменты);
- `skills/harness-doctor/scripts/hook_corpus.py` (сегменты, `known`);
- `doctor.sh` (строка корпуса).
- **Skill:** `.claude/skills/harness-retro/SKILL.md` и `template.md`. Он проектный, поэтому `install.sh` не меняется.
- **Тесты:**
- новые `tests/test-retro-metrics.sh`, `tests/test-retro-leftovers.sh`;
- дополнения в `test-hook-corpus.sh`, `test-hook-export.sh`, `test-doctor.sh`.
- **Документация:** `CLAUDE.md` («Команды», «Архитектура», «Тесты»), `docs/HARNESS.md` (раздел «Ретро»), `README.md`, `CHANGELOG.md` 0.6.0.
- **Вне задачи:**
- сторона Gitea в хвостах закрытия: открытые issue после слитого PR, пропущенные follow-up;
- срезы по нескольким проектам сразу;
- автоматические находки по порогам;
- workspace awp-ca как полигон — первое ретро по нему делается на той машине.