workflow-ai 1.0.32 → 1.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,103 +1,175 @@
1
- ---
2
- name: decompose-plan
3
- description: Декомпозировать план на исполняемые тикеты. Используй после создания плана для разбиения высокоуровневых задач на конкретные тикеты с зависимостями и условиями. Создаёт тикеты в .workflow/tickets/backlog/.
4
- ---
5
-
6
- # Декомпозиция плана на тикеты
7
-
8
- Этот skill разбивает высокоуровневый план на исполняемые тикеты для канбан-доски.
9
-
10
- ## Когда использовать
11
-
12
- - Создан новый план
13
- - Нужно разбить крупную задачу на подзадачи
14
- - Требуется детальная декомпозиция
15
-
16
- ## Шаги выполнения
17
-
18
- ### 1. Прочитать план
19
-
20
- ```
21
- Путь: .workflow/plans/current/PLAN-{NNN}.md
22
- ```
23
-
24
- Извлечь:
25
- - Список высокоуровневых задач
26
- - Зависимости между ними
27
- - Приоритеты
28
- - Контекст проекта
29
-
30
- ### 2. Для каждой задачи определить тикеты
31
-
32
- Каждая задача из плана может превратиться в 1+ тикетов.
33
-
34
- Критерии хорошего тикета:
35
- - Атомарный (одна конкретная работа)
36
- - Выполнимый за 1-4 часа
37
- - Имеет чёткие критерии готовности
38
- - Понятно что делать без дополнительных вопросов
39
-
40
- ### 3. Определить тип каждого тикета
41
-
42
- Прочитай актуальные типы задач из `.workflow/config/config.yaml` (секция `task_types`). Используй **только** префиксы, определённые в конфиге. Не используй типы, которых нет в конфиге.
43
-
44
- ### 4. Определить зависимости
45
-
46
- Для каждого тикета:
47
- - От каких тикетов зависит (`dependencies`)
48
- - Какие условия должны быть выполнены (`conditions`)
49
-
50
- Типы условий:
51
- - `tasks_completed: [IMPL-001, IMPL-002]` — задачи должны быть выполнены
52
- - `date_after: "2024-01-15"` не раньше даты
53
- - `file_exists: "src/config.py"` — файл должен существовать
54
- - `manual_approval: true` требуется одобрение человека
55
-
56
- ### 5. Назначить приоритеты
57
-
58
- | Приоритет | Значение |
59
- |-----------|----------|
60
- | 1 | Critical блокирует всё |
61
- | 2 | High важно для прогресса |
62
- | 3 | Mediumстандартная работа |
63
- | 4 | Low — можно отложить |
64
- | 5 | Someday — когда-нибудь |
65
-
66
- ### 6. Создать тикеты
67
-
68
- 1. Прочитай шаблон: `.workflow/templates/ticket-template.md`
69
- 2. Для каждого тикета:
70
- - Определи следующий ID: найди все файлы `{TYPE}-*.md` во всех папках `.workflow/tickets/`, возьми максимальный номер для этого префикса и прибавь 1. Если файлов нет — начни с `{TYPE}-001`.
71
- - Заполни шаблон
72
- - **Обязательно** заполни `parent_plan: "plans/current/PLAN-{NNN}.md"` — путь к плану, из которого создан тикет
73
- - Сохрани в `.workflow/tickets/backlog/{TYPE}-{NNN}.md`
74
-
75
- ### 7. Обновить план
76
-
77
- Добавь в план ссылки на созданные тикеты.
78
-
79
- ### 8. Вывести структурированный результат
80
-
81
- После создания тикетов **обязательно** выведи блок результата:
82
-
83
- ```
84
- ---RESULT---
85
- status: default
86
- ---RESULT---
87
- ```
88
-
89
- ## Пример использования
90
-
91
- ```
92
- Декомпозируй план .workflow/plans/current/PLAN-001.md на тикеты.
93
- ```
94
-
95
- ## Результат
96
-
97
- - Тикеты в `.workflow/tickets/backlog/`
98
- - Обновлённый план с ссылками на тикеты
99
-
100
- ## Связанные skills
101
-
102
- - `create-plan` создание плана для декомпозиции
103
- - `check-conditions` проверка готовности тикетов
1
+ ---
2
+ name: decompose-plan
3
+ description: Декомпозировать план на исполняемые тикеты. Используй после создания плана для разбиения высокоуровневых задач на конкретные тикеты с зависимостями и условиями. Создаёт тикеты в .workflow/tickets/backlog/.
4
+ ---
5
+
6
+ # Декомпозиция плана на тикеты
7
+
8
+ Этот skill разбивает высокоуровневый план на исполняемые тикеты для канбан-доски.
9
+
10
+ ## Когда использовать
11
+
12
+ - Создан новый план
13
+ - Нужно разбить крупную задачу на подзадачи
14
+ - Требуется детальная декомпозиция
15
+
16
+ ## ПРЕДУСЛОВИЕ: проверка статуса плана
17
+
18
+ **ПЕРЕД любой работой** прочитай frontmatter плана и проверь поле `status`.
19
+
20
+ | Статус плана | Действие |
21
+ |-------------|----------|
22
+ | `approved` | Декомпозировать. Продолжай к шагу 1. |
23
+ | `draft` | **СТОП.** Не декомпозировать. Выведи `status: decomposed` и завершись. Draft-план ещё не одобрен человеком. |
24
+ | `active` | **СТОП.** Не декомпозировать. План уже в работе. Выведи `status: decomposed`. |
25
+ | `completed` | **СТОП.** Не декомпозировать. План завершён. Выведи `status: decomposed`. |
26
+ | Другой/пустой | **СТОП.** Не декомпозировать. Выведи `status: decomposed`. |
27
+
28
+ **Почему:** Без этой проверки pipeline автоматически декомпозирует любой план, обнаруженный в `plans/current/`, включая черновики, созданные другими тикетами. Это приводит к неконтролируемому разрастанию backlog (scope creep). Уже дважды происходило.
29
+
30
+ ## Шаги выполнения
31
+
32
+ ### 1. Прочитать план
33
+
34
+ ```
35
+ Путь: .workflow/plans/current/PLAN-{NNN}.md
36
+ ```
37
+
38
+ Извлечь:
39
+ - Список высокоуровневых задач
40
+ - Зависимости между ними
41
+ - Приоритеты
42
+ - Контекст проекта
43
+
44
+ ### 2. Для каждой задачи определить тикеты
45
+
46
+ Каждая задача из плана может превратиться в 1+ тикетов.
47
+
48
+ Критерии хорошего тикета:
49
+ - Атомарный (одна конкретная работа)
50
+ - Выполнимый за 1-4 часа
51
+ - Имеет чёткие критерии готовности
52
+ - Понятно что делать без дополнительных вопросов
53
+
54
+ ### 2.5. Оценить автономность каждой задачи
55
+
56
+ Для каждой задачи из плана определи: **может ли агент выполнить её полностью автономно?**
57
+
58
+ | Категория | Критерий | Действие |
59
+ |-----------|----------|----------|
60
+ | **Полностью автономная** | Агент может выполнить все шаги без участия человека (написание кода, документации, анализ данных через WebSearch/WebFetch) | Создать 1 тикет с `executor_type: agent` |
61
+ | **Полностью ручная** | Требует действий, недоступных агенту (доступ к приватным аккаунтам, физические действия, аутентифицированные сервисы) | Создать 1 тикет `type: human` с `executor_type: human` и явными инструкциями для человека |
62
+ | **Гибридная** | Часть работы может сделать агент, часть только человек | Разбить на 2 тикета: (a) агентский тикет с `executor_type: agent` и (b) HUMAN-тикет с `executor_type: human`, с зависимостью между ними |
63
+
64
+ **Для HUMAN-тикетов обязательно:**
65
+ - Явные пошаговые инструкции что именно должен сделать человек
66
+ - DoD-критерий: «Результаты внесены непосредственно в файл тикета»
67
+ - Указание в каком формате ожидается результат
68
+
69
+ **Пример разбиения гибридной задачи:**
70
+
71
+ Задача из плана: «Провести конкурентный анализ и настроить трекинг конкурентов в аналитике»
72
+
73
+ → Тикет 1 (agent): `PMA-005` Провести конкурентный анализ через публичные источники (WebSearch: цены, позиционирование, отзывы, ASO). `executor_type: agent`
74
+
75
+ Тикет 2 (human): `HUMAN-010` — Настроить трекинг конкурентов в SimilarWeb Pro (требует auth). `executor_type: human`, `dependencies: [PMA-005]`. Инструкции: «1. Войти в SimilarWeb Pro. 2. Добавить домены конкурентов из PMA-005. 3. Настроить еженедельный отчёт. 4. Вставить ссылку на дашборд в результат тикета.»
76
+
77
+ ### 3. Определить тип каждого тикета
78
+
79
+ Прочитай актуальные типы задач из `.workflow/config/config.yaml` (секция `task_types`). Используй **только** префиксы, определённые в конфиге. Не используй типы, которых нет в конфиге.
80
+
81
+ ### 4. Определить зависимости
82
+
83
+ Для каждого тикета:
84
+ - От каких тикетов зависит (`dependencies`)
85
+ - Какие условия должны быть выполнены (`conditions`)
86
+
87
+ Типы условий:
88
+ - `tasks_completed: [IMPL-001, IMPL-002]` — задачи должны быть выполнены
89
+ - `date_after: "2024-01-15"` — не раньше даты
90
+ - `file_exists: "src/config.py"` — файл должен существовать
91
+ - `manual_approval: true` — требуется одобрение человека
92
+
93
+ ### 4.5. Scope-guard: проверка принадлежности к плану
94
+
95
+ **ОБЯЗАТЕЛЬНО** перед созданием каждого тикета выполнить проверку scope.
96
+
97
+ #### Правило: тикеты создаются ТОЛЬКО на работу внутри scope плана
98
+
99
+ Прочитай секции плана «Scope (Границы)» → «Включено в scope» и «Исключено из scope». Каждый создаваемый тикет **должен** относиться к работе из «Включено в scope».
100
+
101
+ **Тикет в scope (создавать):**
102
+ - Задача явно описана в высокоуровневых задачах плана
103
+ - Задача является декомпозицией конкретного пункта плана
104
+ - Задача необходима для достижения критериев успеха плана
105
+
106
+ **Тикет вне scope (НЕ создавать):**
107
+ - Задача относится к работе из «Исключено из scope»
108
+ - Задача является follow-up после завершения плана (стратегия, запуск кампаний и т.д.)
109
+ - Задача появляется из DoD другого тикета как «создать тикеты для команды» — это рекомендация для следующего плана, а не тикет текущего
110
+ - Задача с условием `date_after` за пределами горизонта текущего плана
111
+
112
+ **Для работы вне scope:** НЕ создавать тикет. Вместо этого записать в секцию «Рекомендации для следующего плана» в результате выполнения:
113
+
114
+ ```markdown
115
+ ### Рекомендации для следующего плана (вне scope)
116
+ - [описание задачи] — причина: [почему это следующий этап]
117
+ ```
118
+
119
+ Эти рекомендации будут учтены при создании следующего плана.
120
+
121
+ #### Чеклист самопроверки перед созданием тикета
122
+
123
+ - [ ] Задача входит в «Включено в scope» плана?
124
+ - [ ] Задача НЕ входит в «Исключено из scope»?
125
+ - [ ] `parent_plan` заполнен и указывает на текущий план?
126
+ - [ ] Задача необходима для критериев успеха текущего плана?
127
+
128
+ ### 5. Назначить приоритеты
129
+
130
+ | Приоритет | Значение |
131
+ |-----------|----------|
132
+ | 1 | Critical — блокирует всё |
133
+ | 2 | High — важно для прогресса |
134
+ | 3 | Medium — стандартная работа |
135
+ | 4 | Low — можно отложить |
136
+ | 5 | Someday — когда-нибудь |
137
+
138
+ ### 6. Создать тикеты
139
+
140
+ 1. Прочитай шаблон: `.workflow/templates/ticket-template.md`
141
+ 2. Для каждого тикета:
142
+ - Определи следующий ID: найди все файлы `{TYPE}-*.md` во всех папках `.workflow/tickets/`, возьми максимальный номер для этого префикса и прибавь 1. Если файлов нет — начни с `{TYPE}-001`.
143
+ - Заполни шаблон
144
+ - **Обязательно** заполни `parent_plan: "plans/current/PLAN-{NNN}.md"` — путь к плану, из которого создан тикет
145
+ - Сохрани в `.workflow/tickets/backlog/{TYPE}-{NNN}.md`
146
+
147
+ ### 7. Обновить план
148
+
149
+ Добавь в план ссылки на созданные тикеты.
150
+
151
+ ### 8. Вывести структурированный результат
152
+
153
+ После создания тикетов **обязательно** выведи блок результата:
154
+
155
+ ```
156
+ ---RESULT---
157
+ status: default
158
+ ---RESULT---
159
+ ```
160
+
161
+ ## Пример использования
162
+
163
+ ```
164
+ Декомпозируй план .workflow/plans/current/PLAN-001.md на тикеты.
165
+ ```
166
+
167
+ ## Результат
168
+
169
+ - Тикеты в `.workflow/tickets/backlog/`
170
+ - Обновлённый план с ссылками на тикеты
171
+
172
+ ## Связанные skills
173
+
174
+ - `create-plan` — создание плана для декомпозиции
175
+ - `check-conditions` — проверка готовности тикетов
@@ -1,119 +1,161 @@
1
- ---
2
- name: execute-task
3
- description: Выполнить задачу из тикета. Используй когда нужно выполнить конкретный тикет из in-progress. Читает описание задачи, выполняет работу, записывает результат. Перемещение в done/blocked выполняется отдельным stage.
4
- ---
5
-
6
- # Выполнение задачи
7
-
8
- Этот skill выполняет задачу из тикета и записывает результат.
9
-
10
- ## Когда использовать
11
-
12
- - Есть тикет в `in-progress/`
13
- - Нужно выполнить конкретную задачу
14
- - Перемещение в done/blocked будет выполнено отдельным stage пайплайна
15
-
16
- ## Шаги выполнения
17
-
18
- ### 1. Прочитать тикет
19
-
20
- **ОБЯЗАТЕЛЬНО:** Используй ТОЛЬКО `ticket_id` из секции Context промпта. Запрещено выбирать другой тикет.
21
-
22
- ```
23
- Путь: .workflow/tickets/in-progress/{TICKET-ID}.md
24
- ```
25
-
26
- Если тикет не найден в `in-progress/`, проверь `review/` (при повторном выполнении тикет может быть там).
27
-
28
- **Важно:** НЕ перемещай тикет. Перемещение выполняется отдельным stage пайплайна.
29
-
30
- Извлечь:
31
- - Описание задачи
32
- - Критерии готовности (Definition of Done)
33
- - Контекст (файлы, ссылки, заметки)
34
-
35
- ### 2. Понять задачу
36
-
37
- Убедиться что понятно:
38
- - Что нужно сделать
39
- - Какой результат ожидается
40
- - Какие есть ограничения
41
-
42
- Если не хватает информации:
43
- - Создать подзадачу на уточнение
44
- - Или вывести `status: blocked` в блоке результата (перемещение выполнит pipeline)
45
-
46
- ### 3. Выполнить работу
47
-
48
- В зависимости от типа задачи:
49
-
50
- | Тип | Действия |
51
- |-----|----------|
52
- | IMPL | Написать код |
53
- | FIX | Исправить баг |
54
- | DOCS | Написать документацию |
55
- | REVIEW | Проверить код/документы |
56
- | PLAN | Создать план |
57
- | ADMIN | Выполнить настройку |
58
-
59
- ### 4. Проверить критерии готовности
60
-
61
- Для каждого критерия из Definition of Done:
62
- - Выполнен ли он?
63
- - Если нет что нужно доделать?
64
-
65
- ### 5. Записать результат
66
-
67
- Добавить в тикет секцию Result:
68
-
69
- ```markdown
70
- ## Result
71
-
72
- ### Что сделано
73
- - ...
74
-
75
- ### Изменённые файлы
76
- - ...
77
-
78
- ### Заметки
79
- - ...
80
- ```
81
-
82
- ### 6. Перемещение выполняется отдельным stage
83
-
84
- **Важно:** Этот skill НЕ перемещает тикет. НЕ выполняй никаких операций с файлами тикетов кроме записи результата.
85
-
86
- Запрещено:
87
- - Перемещать файл тикета в другую папку
88
- - Обновлять `status` в frontmatter
89
- - Добавлять `completed_at`
90
- - Вызывать `move-ticket.js` вручную
91
-
92
- Всё это выполняется автоматически скриптом перемещения на следующем stage пайплайна.
93
-
94
- ### 7. Вывести структурированный результат
95
-
96
- После выполнения **обязательно** выведи блок результата:
97
-
98
- ```
99
- ---RESULT---
100
- status: default
101
- ---RESULT---
102
- ```
103
-
104
- ## Пример использования
105
-
106
- ```
107
- Выполни задачу .workflow/tickets/in-progress/IMPL-001.md
108
- ```
109
-
110
- ## Результат
111
-
112
- - Выполненная работа (код, документация и т.д.)
113
- - Обновлённый тикет с секцией Result
114
- - Тикет остаётся на месте (перемещение выполняется отдельным stage)
115
-
116
- ## Связанные skills
117
-
118
- - `check-conditions` — после выполнения проверить зависимые задачи
119
- - `create-report` — включить результат в отчёт
1
+ ---
2
+ name: execute-task
3
+ description: Выполнить задачу из тикета. Используй когда нужно выполнить конкретный тикет из in-progress. Читает описание задачи, выполняет работу, записывает результат. Перемещение в done/blocked выполняется отдельным stage.
4
+ ---
5
+
6
+ # Выполнение задачи
7
+
8
+ Этот skill выполняет задачу из тикета и записывает результат.
9
+
10
+ ## КРИТИЧЕСКИЕ ОГРАНИЧЕНИЯ (прочитай ПЕРЕД выполнением)
11
+
12
+ **Execute-task скил ИСПОЛНЕНИЯ. Он НЕ создаёт артефакты workflow.**
13
+
14
+ При выполнении задачи **КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО:**
15
+
16
+ 1. **Создавать файлы тикетов** в `.workflow/tickets/` (любая папка: backlog, ready, in-progress)
17
+ 2. **Создавать файлы планов** в `.workflow/plans/`
18
+ 3. **Вызывать скилы** `decompose-plan`, `decompose-gaps`, `create-plan`
19
+ 4. **Интерпретировать DoD буквально**, если DoD содержит «создать тикеты» или «декомпозировать в тикеты» — это рекомендация для следующего плана, а НЕ инструкция к действию
20
+
21
+ **Если задача требует создания тикетов/планов как deliverable:**
22
+ → Зафиксируй рекомендации в секции `### Рекомендации для следующего плана` результата тикета
23
+ Человек решит, создавать ли следующий план
24
+
25
+ **Почему:** Без этого ограничения возникает каскад: execute-task создаёт план → decompose-plan создаёт тикеты → backlog разрастается без контроля человека. Это уже происходило дважды.
26
+
27
+ ---
28
+
29
+ ## Когда использовать
30
+
31
+ - Есть тикет в `in-progress/`
32
+ - Нужно выполнить конкретную задачу
33
+ - Перемещение в done/blocked будет выполнено отдельным stage пайплайна
34
+
35
+ ## Шаги выполнения
36
+
37
+ ### 1. Прочитать тикет
38
+
39
+ **ОБЯЗАТЕЛЬНО:** Используй ТОЛЬКО `ticket_id` из секции Context промпта. Запрещено выбирать другой тикет.
40
+
41
+ ```
42
+ Путь: .workflow/tickets/in-progress/{TICKET-ID}.md
43
+ ```
44
+
45
+ Если тикет не найден в `in-progress/`, проверь `review/` (при повторном выполнении тикет может быть там).
46
+
47
+ **Важно:** НЕ перемещай тикет. Перемещение выполняется отдельным stage пайплайна.
48
+
49
+ Извлечь:
50
+ - Описание задачи
51
+ - Критерии готовности (Definition of Done)
52
+ - Контекст (файлы, ссылки, заметки)
53
+
54
+ ### 2. Понять задачу
55
+
56
+ Убедиться что понятно:
57
+ - Что нужно сделать
58
+ - Какой результат ожидается
59
+ - Какие есть ограничения
60
+
61
+ Если не хватает информации:
62
+ - Создать подзадачу на уточнение
63
+ - Или вывести `status: blocked` в блоке результата (перемещение выполнит pipeline)
64
+
65
+ ### 3. Выполнить работу
66
+
67
+ В зависимости от типа задачи:
68
+
69
+ | Тип | Действия |
70
+ |-----|----------|
71
+ | IMPL | Написать код |
72
+ | FIX | Исправить баг |
73
+ | DOCS | Написать документацию |
74
+ | REVIEW | Проверить код/документы |
75
+ | PLAN | Создать план |
76
+ | ADMIN | Выполнить настройку (см. 3.1) |
77
+
78
+ #### 3.1. Специальные правила для `type: admin`
79
+
80
+ Admin-задачи требуют **реального изменения файлов**. Цикл выполнения:
81
+
82
+ 1. **Read** прочитать все файлы из `context.files` инструментом Read
83
+ 2. **Edit/Write** — внести требуемые изменения инструментом Edit или Write
84
+ 3. **Verify** перечитать изменённые файлы для верификации результата
85
+
86
+ **Запрещено для admin-задач:**
87
+ - Завершать задачу без реального изменения файлов
88
+ - Оставлять секцию «Результат выполнения» пустой или с заглушкой
89
+ - Описывать изменения только в Summary без внесения их в целевые файлы
90
+
91
+ **Чеклист самопроверки перед завершением admin-задачи:**
92
+ - [ ] Все файлы из `context.files` прочитаны?
93
+ - [ ] Изменения внесены инструментом Edit/Write (не просто описаны)?
94
+ - [ ] Изменённые файлы перечитаны и верифицированы?
95
+ - [ ] Секция «Результат выполнения» содержит конкретный результат (не заглушку)?
96
+
97
+ ### 4. Проверить критерии готовности
98
+
99
+ Для каждого критерия из Definition of Done:
100
+ - Выполнен ли он?
101
+ - Если нет — что нужно доделать?
102
+
103
+ ### 5. Записать результат
104
+
105
+ Добавить в тикет секцию Result:
106
+
107
+ ```markdown
108
+ ## Result
109
+
110
+ ### Что сделано
111
+ - ...
112
+
113
+ ### Изменённые файлы
114
+ - ...
115
+
116
+ ### Заметки
117
+ - ...
118
+ ```
119
+
120
+ ### 6. Перемещение выполняется отдельным stage
121
+
122
+ **Важно:** Этот skill НЕ перемещает тикет. НЕ выполняй никаких операций с файлами тикетов кроме записи результата.
123
+
124
+ Запрещено:
125
+ - Перемещать файл тикета в другую папку
126
+ - Обновлять `status` в frontmatter
127
+ - Добавлять `completed_at`
128
+ - Вызывать `move-ticket.js` вручную
129
+
130
+ Всё это выполняется автоматически скриптом перемещения на следующем stage пайплайна.
131
+
132
+ ### 7. Закрыть внешние ресурсы
133
+
134
+ Если задача использовала **MCP-browser (Playwright)** — **обязательно** вызови `browser_close` перед выводом результата. Незакрытый браузер блокирует профиль и мешает следующему запуску.
135
+
136
+ ### 8. Вывести структурированный результат
137
+
138
+ После выполнения **обязательно** выведи блок результата:
139
+
140
+ ```
141
+ ---RESULT---
142
+ status: default
143
+ ---RESULT---
144
+ ```
145
+
146
+ ## Пример использования
147
+
148
+ ```
149
+ Выполни задачу .workflow/tickets/in-progress/IMPL-001.md
150
+ ```
151
+
152
+ ## Результат
153
+
154
+ - Выполненная работа (код, документация и т.д.)
155
+ - Обновлённый тикет с секцией Result
156
+ - Тикет остаётся на месте (перемещение выполняется отдельным stage)
157
+
158
+ ## Связанные skills
159
+
160
+ - `check-conditions` — после выполнения проверить зависимые задачи
161
+ - `create-report` — включить результат в отчёт