From 132504520b80a42cb9da6e10f0729237bb356e03 Mon Sep 17 00:00:00 2001 From: "andrey.epifantsev" Date: Sat, 24 Oct 2026 10:07:26 +0400 Subject: [PATCH] =?UTF-8?q?feat(retro):=20=C2=AB=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=B9=20=D1=81=D0=B0=D0=BC=C2=BB=20=E2=80=94=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B7=D0=BD=D0=B0=D0=BA=20=D0=BF=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B2=D0=BB=D0=B0=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D1=86=D0=B0=20(H-1,=20PR=20#30)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .claude/skills/harness-retro/SKILL.md | 2 +- docs/retro/scripts/retro_metrics.py | 4 ++-- openspec/changes/harness-retro/specs/harness-retro/spec.md | 2 +- tests/test-retro-metrics.sh | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.claude/skills/harness-retro/SKILL.md b/.claude/skills/harness-retro/SKILL.md index 105d420..bedcc17 100644 --- a/.claude/skills/harness-retro/SKILL.md +++ b/.claude/skills/harness-retro/SKILL.md @@ -24,7 +24,7 @@ description: Ретро обвязки claude-harness по транскрипт - Пересчитать срез с `--labels docs/retro/fixtures/hook-labels-.json --out docs/retro/.metrics.json`. 4. **Хвосты закрытия.** `python3 docs/retro/scripts/retro_leftovers.py <папка> --fetch --markdown`. Ничего не удалять: таблица идёт в черновик, уборка — по решению владельца. 5. **Поправки владельца.** `python3 docs/retro/scripts/retro_metrics.py <папка> --since --corrections`. - - Отобрать только поправки по процессу: пропущенный шаг, лишний вопрос, неверный совет, обход правила, расширение задачи. Вопросы и просьбы по содержанию выбросить. + - Отобрать только поправки по процессу: пропущенный шаг, лишний вопрос, неверный совет, обход правила, расширение задачи, работа переложена на владельца («сделай сам»). Вопросы и просьбы по содержанию выбросить. - Сгруппировать по видам. - Вид, который повторяется (2 раза и больше) или стоил владельцу заметного времени, — находка `RT-n` и пункт бэклога. 6. **Качественная часть.** Прочитать память проекта целиком (`~/.claude/projects//memory/`) и примеры из выгрузок. Находки `RT-n` — сквозная нумерация: максимум в прошлых `docs/retro/*.md` плюс 1. Приоритет: P1 — теряет время каждую неделю или ломает процесс; P2 — трение; P3 — наблюдение. diff --git a/docs/retro/scripts/retro_metrics.py b/docs/retro/scripts/retro_metrics.py index 07c99c8..c3972e2 100644 --- a/docs/retro/scripts/retro_metrics.py +++ b/docs/retro/scripts/retro_metrics.py @@ -27,8 +27,8 @@ OWNER_DENY = "The user doesn't want to proceed with this tool use" CLASSIFIER = re.compile(r"denied by the Claude Code auto mode classifier\. Reason: \[([^\]]+)\]") RECALL = re.compile(r"(перечитай|прочитай|сверься|вспомни|освежи)[^.?!\n]{0,40}?(памят|контекст|claude\.md|\.md\b)", re.I) -MARKERS = re.compile(r"(?&1 >/dev/null); rc=$? assert_eq "нет сессий: exit 1" "$rc" "1" assert_grep "сообщение со slug" 'proj' <(printf '%s' "$err") +# H-1 (владелец, PR #30): «сделай сам» — агент переложил работу на владельца — признак поправки +assert_eq "«сделай сам» — признак поправки, «сделай X» — нет" "$(python3 -c "import sys; sys.path.insert(0, '$ROOT/docs/retro/scripts'); import retro_metrics as r; print([bool(r.MARKERS.search(t)) for t in ('сделай сам', 'Сделай сам, пожалуйста', 'сделай X', 'сделайсам')])")" "[True, True, False, False]"