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,84 @@
|
||||
# Задачи из аудита и ревью
|
||||
|
||||
Ревью и аудиты — код-ревью, архитектурный проход, аудит безопасности, любой
|
||||
разбор другим агентом — порождают находки, часть которых становится задачами
|
||||
беклога. Это отдельный интейк со своей опасностью, **зеркальной** интейку из
|
||||
диалога.
|
||||
|
||||
- Интейк из диалога грешит переполнением: из одной мысли рождается пять файлов.
|
||||
- Интейк из ревью грешит сваливанием: сорок сырых находок превращаются в сорок
|
||||
файлов. Беклог раздувается, а следующий груминг склеивает их обратно.
|
||||
|
||||
Защита от сваливания — та же, что в самом ревью: **кластеризация по причине, а не
|
||||
файл-на-находку.** Если у ревью был триаж — половина работы уже сделана, бери его
|
||||
выход. Если нет — триажируй сам, прежде чем заводить.
|
||||
|
||||
## Находка агента — не задача
|
||||
|
||||
Мнение агента — **гипотеза, пока у неё нет свидетельства** (падающий тест,
|
||||
воспроизводимый шаг, положение гайда). Согласие нескольких находок само по себе
|
||||
достоверность не повышает: это один источник, высказавшийся несколько раз.
|
||||
|
||||
Отсюда фильтр входа, поверх обычного «не делаем сейчас + пожалеем о потере»:
|
||||
|
||||
- **Находка со свидетельством**, отложенная к исполнению → **задача**.
|
||||
Свидетельство и последствие переносим в тело — это её «почему», то самое, что
|
||||
переживает запись.
|
||||
- **Находка без свидетельства / низкой уверенности** → **идея** (`[idea]`), а не
|
||||
задача. Она не заработала приоритизацию: сравнивать неподтверждённое не с чем.
|
||||
Её судьба — штурм, где либо найдётся подтверждение, либо она уедет на кладбище.
|
||||
- **Уже починено по ходу ревью** → **ничего**. Починенное не заводим.
|
||||
- **Развилка, решённая при ревью** → ничего; решённая «потом» → задача с
|
||||
зафиксированным вопросом.
|
||||
|
||||
## Порядок
|
||||
|
||||
1. **Возьми выход триажа, а не сырые находки.** Сырой отчёт — это симптомы до
|
||||
дедупликации; в нём одна причина размазана по нескольким строкам.
|
||||
2. **Кластеризуй по причине.** Пять находок об одном отсутствующем инварианте —
|
||||
одна задача, а не пять. Класс мелочи (nits, косметика) — **один пакетный файл**
|
||||
со списком пунктов, а не файл на каждую запятую.
|
||||
3. **Дедуп против беклога и кладбища.** Аудит переоткрывает уже заведённое и уже
|
||||
выкинутое. Нашлось в беклоге — дописываем находку в существующий файл. Нашлось
|
||||
на кладбище — это сигнал: причина отказа могла устареть, выноси пользователю, а
|
||||
не заводи молча заново.
|
||||
4. **Покажи карту до создания файлов.** Кластер → задача / идея / строка в
|
||||
пакетный файл / уже в беклоге / отброшено — пачкой через `AskUserQuestion`.
|
||||
Это тот же барьер, что и «три кандидата» в интейке из диалога: массовое
|
||||
заведение файлов без подтверждения — ровно тот отказ, ради которого интейк из
|
||||
ревью и выделен. Дешёвая мелочь по явному согласию может заводиться и без
|
||||
поштучного вопроса — но карта пользователю всё равно предъявляется.
|
||||
5. **Заводи утверждённое** через `backlog.py add`, с двумя добавками:
|
||||
- **тег партии** — `add … --tag review-ГГГГ-ММ-ДД` (или `audit-<тема>`), чтобы
|
||||
весь заход груминга поднимался одной командой `backlog.py list --tag …`;
|
||||
- **провенанс в теле** — кто нашёл, каким проходом, с каким свидетельством. Без
|
||||
него через месяц не отличить проверенную находку от догадки.
|
||||
6. `backlog.py check`.
|
||||
|
||||
## Отображение серьёзности на приоритет
|
||||
|
||||
Правило концептуальное, от полей конкретного отчёта не зависит:
|
||||
|
||||
- **выше серьёзность → выше приоритет.** Самый тяжёлый класс находок → верхняя
|
||||
секция индекса, следующий → следующая. Отображать словарь серьёзности отчёта на
|
||||
словарь приоритетов проекта точно нечем — при сомнении спрашивай пользователя.
|
||||
- **низкая уверенность или нет свидетельства → идея**, не задача.
|
||||
- **мелочь → строка в пакетный файл**, не отдельный.
|
||||
- **уже починено / развилка решена сейчас → ничего.**
|
||||
|
||||
Если у ревью структурированный отчёт с полями серьёзности, уверенности,
|
||||
свидетельства и предписанного действия (например, конвейер ревью jellybit даёт
|
||||
`Severity`/`Confidence`/`Оракул`/`Действие: инлайн|развилка`) — правило выше
|
||||
ложится на эти поля механически. Но это пример одного формата, а не требование к
|
||||
источнику: тот же фильтр применяется к находкам в свободной форме.
|
||||
|
||||
Границы покрытия отчёта — то, что ревью проверить **не смогло**, — не находки и в
|
||||
задачи не идут: у них нет предмета. Их место — в докладе, не в беклоге.
|
||||
|
||||
## Доклад
|
||||
|
||||
- Источник (какое ревью/аудит, сколько находок на входе).
|
||||
- Свёрнуто в задачи: N кластеров из M находок, со слагами и тегом партии.
|
||||
- Что не заведено и почему: починено инлайн, уже в беклоге, ушло в идеи, на
|
||||
кладбище.
|
||||
- `backlog.py check`.
|
||||
Reference in New Issue
Block a user