Files
dev-skills/av-dev-backlog/skills/backlog/SKILL.md
T
avandClaude Opus 5 84134cac1e ревью: ступень wide, цвета по модели, проверка фронтматтеров
Прыжок standard → deep стоил самого дорогого прохода конвейера, а платить
приходилось за одну архитектурную находку: изменений, которые трогают
публичный контракт, но не вводят нового правила слияния, — большинство.
Ступень wide это standard плюс architecture (вход шире диффа, отсюда имя),
семь проходов против восьми.

Заодно вычистилась давняя неровность: триггер reimpl стоял внутри deep, и
профиль означал то семь проходов, то восемь — реестр состава, который
«сверяется взглядом до коммита», проверять было нечем. Теперь условие
«новое правило идентичности, слияния или разбора» выбирает профиль, reimpl
в deep безусловен и есть единственное отличие от wide. Барьер стоимости
остался только в deep: в wide за ним стоял бы один дешёвый проход с
потолком в 3 находки, а барьер сериализует то, что могло идти разом.

Цвет charter'а теперь кодирует модель, а не роль: sonnet → green,
opus → yellow, fable → red. Роль видна из имени, стоимость прогона —
ниоткуда, а список агентов читается взглядом.

scripts/frontmatter.py ловит три класса ошибок, невидимых при чтении:
- двоеточие с пробелом в незакавыченном описании — для YAML это вложенное
  отображение, а не текст. Так было написано три описания из четырнадцати,
  и читались они правильно;
- name, разошедшееся с именем каталога скилла или файла charter'а;
- цвет, не отвечающий модели: он ставится один раз при заведении charter'а,
  а модель потом двигает калибровка.

Обе ветки проверены, коды выхода — общий словарь. Триггеры профиля в
canon.md и skeletons.md подтянуты под wide.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 16:49:02 +03:00

15 KiB

name, description
name description
backlog УСТАРЕЛ — используй скилл av-dev-pm:tasks. Старый формат беклога (один каталог задач, индекс README, приоритеты секциями, без целей и спринтов). Вызывать ТОЛЬКО в проекте, который на этот формат ещё не переведён, и только если прямо названо имя backlog. Во всех остальных случаях, включая любую просьбу завести задачу, идею или разобрать находки ревью, работает av-dev-pm:tasks.

Этот скилл устарел. Формат заменён каноном docs/tasks/ из плагина av-dev-pm (цели вместо приоритетов, спринт с заморозкой набора, REJECTED.md с причинами). Перевод проекта делает скилл av-dev-pm:canon. Скилл оставлен до перевода последнего проекта, который на нём ещё живёт, и будет удалён.

Беклог

Беклог — каталог markdown-файлов: одна задача = один файл <slug>.md, плюс строка в индексе README.md. Скилл ведёт беклог: заводит, чистит, приоритизирует, дробит, штурмует идеи. Реализацией не занимается — это дело пайплайна задачи.

Три правила, из которых всё следует

Ситуация не покрыта инструкцией — решай по ним.

  1. Беклог гниёт с той стороны, где его пополняют. Заведение — самая частая операция и с худшим отказом: из одного разговора рождается пять файлов, и груминг потом разгребает то, чего не надо было заводить. Дедупликация и фильтр на входе дешевле любой чистки. Заводим только то, что не делаем сейчас и о потере чего пожалеем.
  2. Файл — источник истины, индекс производен. Разошлись — неправ индекс. Согласованность механизируема и проверяется командой, а не вниманием: всё, что ловит backlog.py check, не должно попадать ни в чек-лист, ни в промпт.
  3. Причина переживает запись. Приоритет без причины будет переспорен на следующем груминге; выкинутая без причины задача вернётся через квартал тем же текстом. Реализованная задача оставляет след в коммите и спеке — выкинутая не оставляет ничего, поэтому у неё есть кладбище.

Инструмент (backlog.py)

Пусть bl="$CLAUDE_PLUGIN_ROOT/skills/backlog/scripts/backlog.py".

python3 $bl check                       # согласованность + метрики здоровья, exit 1 при расхождениях
python3 $bl check --fix                 # + починить безопасный дрейф (секция, заголовок, дубли)
python3 $bl list --stale                # от самой залежавшейся; ещё --priority --type --tag
python3 $bl add --slug S --title T --priority P [--type idea|epic] [--hook H] [--reason R] [--tag a,b]
python3 $bl edit S [--title T] [--hook H] [--type idea|epic|task]   # переименовать / сменить хук, тип
python3 $bl move S --priority P [--reason R]     # перенести в другую секцию
python3 $bl close S --reason R          # на кладбище + удалить (выкинута)
python3 $bl close S --implemented       # просто удалить (реализована, есть коммит)
python3 $bl init [--sections "..."]     # завести беклог в новом проекте

Тип задачи — английское ключевое слово idea / epic / task (как и прочие токены команд); task префикса не несёт, idea/epic кодируются [idea]/ [epic] в заголовке. Текст задачи при этом русский.

Мутации правят файл и индекс заодно — руками строку индекса или мета-строку не пиши, зови add/edit/move/close. Смена заголовка, хука или типа (в том числе понижение задачи до [idea]) — это edit, а не ручная правка H1 и индекса: edit держит их в синхроне. Механика (слаг в имени, секция по приоритету, формат кладбища, экранирование ввода) не может рассогласоваться, потому что её делает скрипт. Тело задачи скрипт не трогает — add кладёт заголовок, мета-строку и плейсхолдер, а контекст, шаги и ссылки ты дописываешь редактором (пока плейсхолдер на месте, check напоминает, что тело не дописано).

check — единственный судья согласованности; что именно он ловит, скажет его вывод, здесь не пересказываем. Гоняй его в начале сессии и после каждой правки, даже если правил мутациями: дрейф мог накопиться раньше. Накопившийся дрейф чини check --fix — он детерминированно правит безопасное (секция по файлу, заголовок из H1, дубли строк), а неоднозначное (ссылка на исчезнувший файл, битые строки) выносит тебе. Это идёт строкой доклада.

Формат файла, мета-строки, слага, индекса и кладбища — references/task-format.md. Там же тест «готова к взятию».

Сценарии

Завести задачу или идею из диалога

  1. Фильтр. Делаем прямо сейчас — не заводим. Не пожалеем о потере — не заводим. Родилось три кандидата — покажи их и спроси, какие заводить: молча заведённая пачка и есть тот самый отказ из правила 1.
  2. Дедуп. list плюс поиск по слагам, хукам и телам (grep -ril), включая CLOSED.md. Нашлось в беклоге — дописываем в существующий файл, а не заводим соседний. Нашлось на кладбище — покажи пользователю ту строку и что изменилось с момента отказа: та же идея вернулась через диалог, а не через ревью. Две задачи об одном — самая дорогая находка груминга.
  3. Тип по тесту готовности (см. task-format): проходит — задача (--type task, без префикса), не проходит — идея (--type idea), проходит по пользе, но не делается одним заходом — эпик (--type epic, сперва декомпозиция).
  4. add --slug … --title … --priority … --hook … (тип, причину, теги — по месту). Хук отвечает «почему это в беклоге», а не пересказывает первый абзац. Затем допиши тело файла.
  5. check.

Разобрать находки аудита или ревью

Ревью и аудиты — код-ревью, архитектурный проход, аудит безопасности — тоже источник задач, но с зеркальной диалогу опасностью: не пять файлов из одной мысли, а сорок файлов из сорока сырых находок. Защита та же, что в самом ревью: кластеризация по причине, дедуп против беклога, находка без свидетельства → идея, а не задача, и карта кластеров пользователю до создания файлов. Порядок и отображение серьёзности — references/from-review.md.

Груминг

Интерактивная сессия порциями, по дате правки из git и с правилом остановки — references/grooming.md. Ключевое: перед вопросом пользователю проверь по коду и спекам, не сделано ли уже попутно, — это самая частая находка и она не требует ничьего решения.

Приоритизация

Приоритет — грубая оценка «ценность / стоимость», не обязательство к порядку. Никаких очков и часов: уровни те, что есть в секциях индекса.

  • Меняешь уровень — move <slug> --priority <новый> --reason <причина>; причина уезжает в мета-строку.
  • Повышаешь — назови, что именно эта задача обгоняет. Повышение без проигравшего это не приоритизация, а согласие с последним, кто говорил.
  • Задача, давно лежащая в нижней секции и не двигавшаяся (по дате git), — кандидат на кладбище, а не на новый круг «оставить как есть».

Декомпозиция и штурм идеи

references/split.md. Обе операции превращают одну запись в несколько, и у обеих есть проверяемый тест: части должны мерджиться порознь и каждая давать видимую пользу, а у штурма исход «выкинуть» — полноправный.

Общее для всех сценариев

  • Кладбище. Задача уходит из беклога без реализации → close <slug> --reason <причина>: скрипт пишет строку в CLOSED.md (дата, слаг, заголовок, причина, бывший приоритет) и удаляет файл со строкой индекса. Реализованные туда не идут — у них есть коммит, спека и ADR; для них close <slug> --implemented.
  • Границы покрытия в отчёте. Любая сессия груминга, приоритизации или штурма заканчивается строкой «просмотрено N из M, не трогали — …». Отчёт без неё сообщает «беклог разобран», не сообщая, какая его часть осталась нетронутой.
  • Развилки — пользователю. Через AskUserQuestion, с уже сформулированным предварительным суждением (рекомендация — первым вариантом). Что выкинуть, что повысить, какая рамка идеи верна — решение пользователя. Слаг, формулировка, порядок строк в индексе — механика, делаем сами.
  • Не больше трёх вопросов за раз. Пачка длиннее трёх тяжела для ответа; решений больше — веди несколько итераций диалога по ≤3, а не один перегруженный запрос. Между итерациями применяй уже решённое.
  • Ничего не удаляем молча. Файл задачи исчезает только через close--reason (выкинута) или --implemented (реализована). Прямого rm нет.

Переносимость

Скилл независим от языка программирования, сборки, CI и трекера: он ничего не знает ни про Go, ни про npm, ни про конкретный багтрекер — беклог для него просто каталог markdown. Текст задач — русский (язык документации проекта); зашита только латиница слага.

  • Каталог беклога: аргумент → указатель в CLAUDE.md проекта → поиск (docs/backlog, backlog, doc/backlog, docs/tasks). Не нашёлся — это новый проект: init заводит индекс и кладбище (секции по умолчанию высокий/средний/ низкий, --sections переопределяет).
  • Слаг — латиница kebab-case всегда; заголовок, тело, хук — по-русски.
  • Уровни приоритета берутся из заголовков секций индекса как есть, их количество и названия — дело проекта.
  • Имена служебных файлов (README.md — индекс, CLOSED.md — кладбище) фиксированы скиллом, не проектом.

Проектные тонкости (куда переезжает суть реализованной задачи, кто удаляет файл, как беклог связан с трекером-инбоксом) описаны в CLAUDE.md проекта — прочитай его перед работой.

Чего этот скилл не делает

Не пишет код, не заводит спеки и change, не берёт задачу в работу — этим занимается пайплайн задачи проекта, а этот скилл владеет только форматом и содержимым беклога. Не решает за пользователя, что важно. Не переоформляет существующие задачи «заодно»: правится то, чего касается операция.