Соглашение об именах: длинное имя плагина с префиксом 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>
63 lines
4.8 KiB
Markdown
63 lines
4.8 KiB
Markdown
# Декомпозиция и мозговой штурм
|
||
|
||
Обе операции превращают одну запись беклога в несколько (или в ноль). Разница в
|
||
входе: декомпозиция дробит **готовую задачу**, штурм прорабатывает **идею**,
|
||
которая ещё не задача.
|
||
|
||
## Тест декомпозиции
|
||
|
||
Задачу можно дробить, только если части удовлетворяют **обоим** условиям:
|
||
|
||
1. **Мерджатся независимо.** Часть Б не требует, чтобы часть А была уже влита.
|
||
Есть порядок «сперва А, потом Б, иначе не собрать» → это не декомпозиция, а
|
||
план реализации: шаги остаются **внутри одного файла** в разделе «Шаги».
|
||
2. **Каждая даёт видимую пользу.** Часть, полезная только в комплекте с другой, —
|
||
не самостоятельная задача. Пользу проверяй тем же тестом «готова к взятию»
|
||
(task-format): что станет наблюдаемо иначе именно от этой части.
|
||
|
||
Не проходит хотя бы одно — **не дроби**. Ложная декомпозиция плодит файлы,
|
||
которые нельзя взять поодиночке, и груминг потом их склеивает обратно.
|
||
|
||
## Что делать с родителем
|
||
|
||
После разделения родитель **не остаётся** третьей висящей строкой:
|
||
|
||
- части полностью замещают его → `close <slug> --reason "разложена на a, b"`.
|
||
Кладбище здесь — не «выкинули», а именно тот след, что переживает запись:
|
||
через квартал вопрос «куда делась задача X» отвечается строкой кладбища со
|
||
ссылками на наследников, а не археологией git;
|
||
- родитель осмыслен как зонтик → `edit <slug> --type epic`, тело — ссылки на
|
||
задачи-части, своих шагов у него нет.
|
||
|
||
Одно и то же не должно лежать и в родителе, и в части. Задвоение — то же
|
||
расхождение, что ловит `check`, только внутри тел.
|
||
|
||
## Мозговой штурм идеи
|
||
|
||
Идея (`[idea]`) не проходит тест «готова к взятию»: неясно, что именно делаем.
|
||
Штурм проясняет — и это **generative-операция, а не applicative**.
|
||
|
||
Applicative-штурм («перечисли задачи, следующие из идеи») выдаёт очевидное:
|
||
перечисляется то, что уже видно в формулировке. Ценное — на уровень выше.
|
||
|
||
1. **Сперва — формы, а не задачи.** Предложи **три разные постановки** идеи и
|
||
назови **компромисс каждой**: что она даёт, чем платит, что оставляет за
|
||
бортом. Если получилась одна постановка — штурм не состоялся, это applicative.
|
||
2. **Вынеси формы пользователю** через `AskUserQuestion` с компромиссами. Рамку
|
||
выбирает он: это продуктовое решение, не механика.
|
||
3. **Только выбранную форму** дроби по тесту декомпозиции выше.
|
||
|
||
**«Выкинуть» — полноправный исход штурма, а не его неудача.** Проработка, честно
|
||
показавшая, что пользы нет или она несоразмерна цене, — это результат: идея
|
||
уезжает на кладбище с этой самой причиной, и та причина гасит её повторное
|
||
появление.
|
||
|
||
## Доклад
|
||
|
||
- Идея/задача на входе, выбранная рамка (для штурма), задачи-наследники со
|
||
слагами и приоритетами.
|
||
- Судьба родителя: удалён / стал эпиком / выкинут.
|
||
- `backlog.py check` после правок.
|
||
- Границы покрытия: какие постановки рассмотрены и какие сознательно отброшены —
|
||
чтобы штурм не пришлось повторять с нуля.
|