init: маркетплейс av-dev-skills + плагин backlog
Отдельный репозиторий-маркетплейс для личных плагинов и скилов разработки, чтобы подключать их к проектам через `/plugin`, а не держать в глобальном `~/.claude/skills`. Первый плагин — backlog: перенесён скилл ведения беклога из `~/.claude/skills/backlog` под именем `av-dev-backlog`. Путь к `backlog.py` переведён с фиксированного `~/.claude/...` на `$CLAUDE_PLUGIN_ROOT`, чтобы работать после установки плагина. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# Груминг беклога
|
||||
|
||||
Цель — выкинуть то, что перестало быть задачей, и вернуть остальному честное
|
||||
состояние. Не «пересмотреть всё», а «пересмотреть порцию до конца».
|
||||
|
||||
## Порция и правило остановки
|
||||
|
||||
Тридцать задач за один заход — это усталость и штамповка: последние десять
|
||||
получат «оставить» не потому, что живы, а потому, что сессия затянулась.
|
||||
|
||||
- **5–8 задач за сессию.** Больше — только если пользователь настаивает, и тогда
|
||||
разбей на явные порции с промежуточным докладом.
|
||||
- **Отбор порции** — один из:
|
||||
- `backlog.py list --stale` — самые залежавшиеся по дате последней правки в
|
||||
git; поле «дата касания» заводить не надо, git её уже хранит;
|
||||
- одна секция приоритета целиком;
|
||||
- один тег (`--tag`) — например, задачи, пришедшие из одного ревью;
|
||||
- список от пользователя.
|
||||
- **Останавливайся на границе порции**, даже если «ещё чуть-чуть осталось».
|
||||
|
||||
## Что делать с каждой задачей
|
||||
|
||||
Сперва то, что не требует ничьего решения:
|
||||
|
||||
1. **Проверь, не сделано ли уже.** Задача, реализованная попутно в соседнем
|
||||
изменении, — самая частая находка груминга. Смотри код, спеки, историю
|
||||
коммитов по ключевым словам задачи. Удаление задачи «как реализованной» —
|
||||
деструктивно и без следа (кладбище для реализованных не пишется), поэтому
|
||||
порог улики жёсткий: удаляем (`close <slug> --implemented`), только имея
|
||||
**конкретный коммит или строку спеки**, закрывающие задачу, и ссылка на них
|
||||
идёт в доклад. Есть лишь косвенные признаки — не удаляй сам, вынеси в пачку
|
||||
вопросов. Сделана частично → задача сжимается до остатка: тело правишь
|
||||
редактором, заголовок и хук — через `edit <slug> --title … --hook …`.
|
||||
2. **Проверь, не отменена ли решением.** ADR, спека или архивный change мог
|
||||
закрыть вопрос иначе. Тогда `close <slug> --reason "<ссылка на решение>"`.
|
||||
3. **Проверь пересечения внутри порции.** Две задачи об одном — содержимое в
|
||||
одну, вторую `close <slug> --reason "слита с <другой-slug>"`.
|
||||
|
||||
Затем — то, что решает пользователь:
|
||||
|
||||
4. **Жива ли она вообще.** Контекст мог измениться: ушла зависимость, отпал
|
||||
сценарий, обошли иначе. Здесь и звучит вопрос о выкидывании.
|
||||
5. **Тот ли приоритет** (тест и правила — в SKILL.md и task-format.md).
|
||||
6. **Задача ли это по-прежнему.** Не проходит тест «готова к взятию» → `edit
|
||||
<slug> --type idea`, и её дальнейшая судьба — штурм, а не приоритизация.
|
||||
Разрослась → `edit <slug> --type epic`, дальше декомпозиция.
|
||||
|
||||
## Храповик
|
||||
|
||||
Сильно залежавшаяся задача — сигнал сама по себе: её либо ни разу не собирались
|
||||
делать, либо нечем взять. Измеряй наблюдаемым — датой последней правки из git
|
||||
(`backlog.py list --stale` ставит такие первыми); счётчик «сколько грумингов
|
||||
пережила» нигде не хранится, поэтому на него не опирайся.
|
||||
|
||||
Задача из верхних строк `--stale`, которую и этот заход оставляет без изменений,
|
||||
**либо двигается (вверх или на кладбище), либо остаётся с явно записанной
|
||||
причиной**, почему её держим (`move <slug> --priority <тот же> --reason …`).
|
||||
Молчаливое «оставить как есть» на давно неподвижной задаче — это решение не
|
||||
принимать решение; запись причины превращает его в осознанное и не даёт тому же
|
||||
вопросу всплыть на следующем груминге. В примере ниже вариант «оставить» именно
|
||||
такой — с названной причиной, а не по умолчанию.
|
||||
|
||||
## Интерактив
|
||||
|
||||
- Вопросы — через `AskUserQuestion`, **не больше трёх за раз**. Порция в 5–8
|
||||
задач обычно даёт больше трёх суждений — тогда веди несколько итераций по ≤3, а
|
||||
не по одному на задачу и не одним перегруженным запросом.
|
||||
- К каждому варианту — **предварительное суждение**, рекомендация первым
|
||||
вариантом: «предлагаю выкинуть, потому что …». Пользователю дешевле возразить,
|
||||
чем судить с нуля.
|
||||
- Всё, что решается фактом (сделано / отменено / дублируется), решай сам и
|
||||
показывай списком в докладе, а не выноси в вопросы.
|
||||
|
||||
Пример одной итерации — три залежавшихся задачи, механику по ним уже разобрали:
|
||||
|
||||
> **Груминг: 3 залежавшихся (порция по `--stale`)**
|
||||
>
|
||||
> 1. `versii-kachestvo-repaki` — репаки, апгрейд 1080p→2160p
|
||||
> - Выкинуть на кладбище *(рекомендую)* — помечена «не боль», за полгода ни разу не возникла
|
||||
> - Оставить в низком
|
||||
> - Поднять в средний
|
||||
> 2. `backup-sqlite` — бэкап SQLite
|
||||
> - Оставить в среднем *(рекомендую)* — не сработала, но риск реальный
|
||||
> - Поднять в высокий — обгоняет `retention-ochistka-bd`: без бэкапа ретеншн опасен
|
||||
> - Выкинуть
|
||||
> 3. `guessit-sputnik` — guessit как сервис-спутник
|
||||
> - Понизить до `[idea]` *(рекомендую)* — не проходит тест «готова к взятию»
|
||||
> - Оставить задачей в низком
|
||||
|
||||
Каждый вариант несёт причину — ту самую, что уедет в `move --reason` или
|
||||
`close --reason`. Ответы применяй сразу и, если в порции осталось ещё, следующей
|
||||
итерацией показывай следующие ≤3.
|
||||
|
||||
## Доклад
|
||||
|
||||
- Что просмотрено: N из M, по какому признаку отобрана порция.
|
||||
- Изменения списком: удалено (реализовано), на кладбище (с причинами), понижено
|
||||
до идей, слито, переприоритизировано.
|
||||
- **Границы покрытия**: сколько задач не трогали и какие именно секции или теги
|
||||
остались — иначе доклад читается как «беклог разобран».
|
||||
- `backlog.py check` после правок; результат — строкой в докладе.
|
||||
Reference in New Issue
Block a user