Соглашение об именах: длинное имя плагина с префиксом av-dev- (уникально в маркетплейсе), короткие имена скилов внутри. Вызов — /av-dev-backlog:backlog, единообразно для будущих плагинов. Путь к backlog.py в SKILL.md обновлён под новую раскладку ($CLAUDE_PLUGIN_ROOT/skills/backlog/scripts/backlog.py). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
85 lines
7.6 KiB
Markdown
85 lines
7.6 KiB
Markdown
# Задачи из аудита и ревью
|
||
|
||
Ревью и аудиты — код-ревью, архитектурный проход, аудит безопасности, любой
|
||
разбор другим агентом — порождают находки, часть которых становится задачами
|
||
беклога. Это отдельный интейк со своей опасностью, **зеркальной** интейку из
|
||
диалога.
|
||
|
||
- Интейк из диалога грешит переполнением: из одной мысли рождается пять файлов.
|
||
- Интейк из ревью грешит сваливанием: сорок сырых находок превращаются в сорок
|
||
файлов. Беклог раздувается, а следующий груминг склеивает их обратно.
|
||
|
||
Защита от сваливания — та же, что в самом ревью: **кластеризация по причине, а не
|
||
файл-на-находку.** Если у ревью был триаж — половина работы уже сделана, бери его
|
||
выход. Если нет — триажируй сам, прежде чем заводить.
|
||
|
||
## Находка агента — не задача
|
||
|
||
Мнение агента — **гипотеза, пока у неё нет свидетельства** (падающий тест,
|
||
воспроизводимый шаг, положение гайда). Согласие нескольких находок само по себе
|
||
достоверность не повышает: это один источник, высказавшийся несколько раз.
|
||
|
||
Отсюда фильтр входа, поверх обычного «не делаем сейчас + пожалеем о потере»:
|
||
|
||
- **Находка со свидетельством**, отложенная к исполнению → **задача**.
|
||
Свидетельство и последствие переносим в тело — это её «почему», то самое, что
|
||
переживает запись.
|
||
- **Находка без свидетельства / низкой уверенности** → **идея** (`[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`.
|