workflow-ai 1.0.39 → 1.0.41

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.
Files changed (35) hide show
  1. package/agent-templates/CLAUDE.md.tpl +10 -1
  2. package/agent-templates/QWEN.md.tpl +18 -1
  3. package/package.json +3 -1
  4. package/src/cli.mjs +79 -1
  5. package/src/global-dir.mjs +90 -0
  6. package/src/init.mjs +15 -30
  7. package/src/junction-manager.mjs +184 -0
  8. package/src/runner.mjs +26 -7
  9. package/src/scripts/check-conditions.js +7 -0
  10. package/src/scripts/move-to-ready.js +6 -0
  11. package/src/scripts/move-to-review.js +5 -1
  12. package/src/scripts/pick-next-task.js +67 -0
  13. package/src/skills/coach/SKILL.md +12 -2
  14. package/src/skills/coach/workflows/analyze.md +12 -0
  15. package/src/skills/create-plan/SKILL.md +9 -0
  16. package/src/skills/decompose-gaps/SKILL.md +6 -0
  17. package/src/skills/decompose-plan/SKILL.md +52 -1
  18. package/src/skills/deep-research/README.md +50 -0
  19. package/src/skills/deep-research/SKILL.md +148 -0
  20. package/src/skills/deep-research/algorithms/source-scoring.md +63 -0
  21. package/src/skills/deep-research/algorithms/synthesis.md +67 -0
  22. package/src/skills/deep-research/knowledge/data-validation.md +44 -0
  23. package/src/skills/deep-research/knowledge/research-methodology.md +54 -0
  24. package/src/skills/deep-research/knowledge/source-evaluation.md +33 -0
  25. package/src/skills/deep-research/scripts/perplexity-research.js +315 -0
  26. package/src/skills/deep-research/templates/brief-summary.md +25 -0
  27. package/src/skills/deep-research/templates/research-report.md +76 -0
  28. package/src/skills/deep-research/workflows/benchmark.md +56 -0
  29. package/src/skills/deep-research/workflows/competitor.md +63 -0
  30. package/src/skills/deep-research/workflows/custom.md +45 -0
  31. package/src/skills/deep-research/workflows/market.md +64 -0
  32. package/src/skills/deep-research/workflows/technology.md +52 -0
  33. package/src/skills/deep-research/workflows/trend.md +51 -0
  34. package/src/skills/execute-task/SKILL.md +48 -2
  35. package/src/skills/review-result/SKILL.md +329 -285
@@ -1,285 +1,329 @@
1
- ---
2
- name: review-result
3
- description: Проверить результат выполнения задачи на соответствие Definition of Done. Используется после execute-task для валидации качества работы.
4
- ---
5
-
6
- # Проверка результата (Review Result)
7
-
8
- > **ОБЯЗАТЕЛЬНО:** Последние строки твоего ответа ВСЕГДА должны быть блоком `---RESULT---`.
9
- > Без этого блока пайплайн не распознает статус и тикет попадёт в `blocked`.
10
- > Даже если ревью очевидно — всё равно заверши ответ блоком результата.
11
-
12
- Этот skill проверяет результат выполнения задачи на соответствие критериям готовности (Definition of Done) из тикета.
13
-
14
- ## Когда использовать
15
-
16
- - Задача выполнена и тикет перемещён в `review/`
17
- - Требуется валидация качества перед перемещением в `done/`
18
- - Retry-логика пайплайна: определить status для goto-перехода
19
-
20
- ## Шаги проверки
21
-
22
- ### 0. Проверить последний статус ревью
23
-
24
- **До любых проверок** найди в тикете секцию `## Ревью`.
25
-
26
- Если секция существует и содержит записи — посмотри на **последнюю запись** (последняя строка таблицы или последний элемент списка):
27
-
28
- - Если последняя запись имеет статус `passed` — ревью уже пройдено. Немедленно верни результат:
29
-
30
- ```
31
- ---RESULT---
32
- status: passed
33
- issues: []
34
- ---RESULT---
35
- ```
36
-
37
- - Если последняя запись имеет статус `⏭ skipped` — тикет пропущен check-relevance. Ревью проводить **НЕ НАДО**. Немедленно верни результат:
38
-
39
- ```
40
- ---RESULT---
41
- status: passed
42
- issues: []
43
- ---RESULT---
44
- ```
45
-
46
- - Если последняя запись имеет статус `failed` — **необходима повторная проверка**. Переходи к шагу 1.
47
-
48
- > **ВАЖНО:** Проверяй именно ПОСЛЕДНЮЮ запись, а не любую. Если после `passed`/`skipped` появилась `failed` — задача требует повторной проверки. Только если последний статус `passed` или `skipped` — можно пропустить.
49
-
50
- ### 1. Прочитать тикет
51
-
52
- ID тикета передаётся в промпте как `ticket_id` в секции Context.
53
-
54
- ```
55
- Путь: .workflow/tickets/review/{TICKET-ID}.md
56
- ```
57
-
58
- **Важно:** НЕ перемещай тикет — перемещение выполняется отдельным stage пайплайна по результату этого skill.
59
-
60
- Извлечь:
61
- - Definition of Done (DoD) — чеклист критериев готовности
62
- - Детали задачи — требования к реализации
63
- - Результат выполнения (секция Result) — что сделано
64
-
65
- ### 2. Проверить каждый пункт DoD
66
-
67
- Для каждого критерия из Definition of Done:
68
-
69
- | Тип проверки | Описание |
70
- |--------------|----------|
71
- | `file_exists` | Файл существует по указанному пути |
72
- | `compilation` | Код компилируется / линтер проходит |
73
- | `tests` | Тесты проходят |
74
- | `text` | Текстовый критерий выполнен (содержимое, структура) |
75
- | `structure` | Структура соответствует шаблону |
76
-
77
- ### 3. Сверить результат с требованиями
78
-
79
- Сравнить секцию «Результат выполнения» с «Деталями задачи»:
80
- - Все ли требования учтены
81
- - Соответствует ли реализация описанию
82
- - Нет ли расхождений
83
-
84
- ### 4. Сформировать вердикт
85
-
86
- > **ВАЖНО:** Review-result НИКОГДА не пишет статус `skipped`. Допустимы только `passed` или `failed`. Статус `skipped` прерогатива check-relevance.
87
-
88
- Возвращать структурированный результат строго в одном из двух форматов:
89
-
90
- > **КРИТИЧНО**: `status` принимает ТОЛЬКО два значения: `passed` или `failed`.
91
- > Любой другой вывод (`default`, `ok`, `done`, `complete`, `yes`, и т.д.) — **ОШИБКА**.
92
- > Пайплайн не продолжится корректно, если статус не распознан.
93
-
94
- Если **все** пункты DoD выполнены:
95
-
96
- ```
97
- ---RESULT---
98
- status: passed
99
- issues: []
100
- ---RESULT---
101
- ```
102
-
103
- Если **хотя бы один** пункт DoD не выполнен:
104
-
105
- ```
106
- ---RESULT---
107
- status: failed
108
- issues:
109
- - "Пункт DoD X не выполнен: ожидалось Y, получено Z"
110
- - "Файл X не создан"
111
- - "Тест Y не прошёл"
112
- ---RESULT---
113
- ```
114
-
115
- > Блок `---RESULT---` должен быть в выводе **ровно один раз**, в самом конце ответа.
116
-
117
- ### 5. При `failed`: детализировать замечания
118
-
119
- Для каждого невыполненного пункта:
120
- - Описать что ожидалось
121
- - Описать что получено
122
- - Указать файл/строку если применимо
123
-
124
- ## Алгоритм проверки
125
-
126
- ```
127
- 0. Быстрый выход:
128
- - Прочитать тикет
129
- - Найти секцию "## Ревью"
130
- - Если последняя запись "passed" или "skipped" → вернуть status: passed, остановиться
131
- - Если последняя запись "failed" → перейти к шагу 1 (повторная проверка)
132
-
133
- 1. Парсинг тикета:
134
- - Извлечь DoD (список критериев)
135
- - Извлечь Result (что сделано)
136
- - Извлечь Детали задачи (требования)
137
-
138
- 2. Для каждого пункта DoD:
139
- - Определить тип проверки (file/compilation/tests/text)
140
- - Выполнить проверку
141
- - Записать результат (pass/fail + комментарий)
142
-
143
- 3. Сверка Result ↔ Детали задачи:
144
- - Все ли файлы созданы
145
- - Соответствует ли структура
146
- - Нет ли расхождений
147
-
148
- 4. Формирование вердикта:
149
- - Если все пункты pass → status: passed
150
- - Если есть fail → status: failed + список issues
151
-
152
- 5. Вывод результата в формате ---RESULT---
153
-
154
- 6. Пометка тикета о результате ревью:
155
- - Добавить секцию `## Ревью` в тикете (если её нет — создать с заголовком таблицы)
156
- - **ВАЖНО: новую запись добавлять В КОНЕЦ таблицы** (последней строкой). Не вставлять перед существующими записями!
157
- - Указать:
158
- - Дата ревью
159
- - Статус: passed/failed
160
- - Краткий самари (если failed что не так)
161
- - Сохранить тикет в той же директории
162
- ```
163
-
164
- ## Типы проверок
165
-
166
- ### file_exists
167
-
168
- Проверка существования файла:
169
-
170
- ```
171
- Критерий: "[ ] Файл `src/logger.py` создан"
172
- Проверка: os.path.exists("src/logger.py")
173
- Результат: pass/fail
174
- ```
175
-
176
- ### compilation
177
-
178
- Проверка компиляции / линта:
179
-
180
- ```
181
- Критерий: "[ ] Код проходит линтер"
182
- Проверка: npm run lint / ruff check / etc.
183
- Результат: pass/fail + вывод
184
- ```
185
-
186
- ### tests
187
-
188
- Проверка тестов:
189
-
190
- ```
191
- Критерий: "[ ] Тесты проходят"
192
- Проверка: npm test / pytest / etc.
193
- Результат: pass/fail + вывод
194
- ```
195
-
196
- ### text
197
-
198
- Текстовая проверка:
199
-
200
- ```
201
- Критерий: "[ ] Описан алгоритм проверки DoD"
202
- Проверка: Поиск раздела "Алгоритм" в файле
203
- Результат: pass/fail
204
- ```
205
-
206
- ### structure
207
-
208
- Проверка структуры:
209
-
210
- ```
211
- Критерий: "[ ] Структура аналогична существующим skills"
212
- Проверка: Сравнение с шаблоном
213
- Результат: pass/fail + замечания
214
- ```
215
-
216
- ## Пример использования
217
-
218
- ```
219
- Проверь результат IMPL-006 на соответствие DoD.
220
- ```
221
-
222
- ```
223
- review-result .workflow/tickets/in-progress/IMPL-006.md
224
- ```
225
-
226
- ## Пример вывода
227
-
228
- ### Успешная проверка
229
-
230
- ```markdown
231
- ---RESULT---
232
- status: passed
233
- issues: []
234
- ---RESULT---
235
- ```
236
-
237
- ### Неуспешная проверка
238
-
239
- ```markdown
240
- ---RESULT---
241
- status: failed
242
- issues:
243
- - "Пункт DoD 'Файл .workflow/src/skills/review-result/SKILL.md создан' не выполнен: файл не найден"
244
- - "Пункт DoD 'Описан алгоритм проверки DoD' не выполнен: раздел 'Алгоритм' отсутствует"
245
- - "Тесты не прошли: 2 failed, 5 passed"
246
- ---RESULT---
247
- ```
248
-
249
- ## Формат секции ревью в тикете
250
-
251
- После проверки skill добавляет в тикет секцию. **Новые записи всегда добавляются В КОНЕЦ таблицы** (хронологический порядок: старые сверху, новые снизу):
252
-
253
- ```markdown
254
- ## Ревью
255
-
256
- | Дата | Статус | Самари |
257
- |------|--------|--------|
258
- | 2026-03-03 14:30 | ❌ failed | Не пройдены тесты, отсутствует файл logger.py |
259
- | 2026-03-03 15:45 | ✅ passed | Все критерии DoD выполнены после исправления |
260
- ```
261
-
262
- > **Порядок записей:** хронологический сверху вниз. Последняя строка = последнее ревью. Код `getLastReviewStatus()` определяет статус по последней строке.
263
-
264
- ## Интеграция с пайплайном
265
-
266
- В retry-логике пайплайна:
267
-
268
- 1. `execute-task` выполняет задачу
269
- 2. `review-result` проверяет результат
270
- 3. По `status` определяется goto-переход:
271
- - `passed` → следующий stage
272
- - `failed` → retry или blocked
273
-
274
- ## Результат
275
-
276
- - Структурированный вердикт (passed/failed)
277
- - Список замечаний (если есть)
278
- - **Тикет помечен секцией `## Ревью`** с датой, статусом и кратким самари
279
- - Готово для использования в goto-логике
280
-
281
- ## Связанные skills
282
-
283
- - `execute-task` — выполнение задачи перед проверкой
284
- - `move-ticket` — перемещение по результатам проверки
285
- - `check-conditions` — проверка условий для зависимых задач
1
+ ---
2
+ name: review-result
3
+ description: Проверить результат выполнения задачи на соответствие Definition of Done. Используется после execute-task для валидации качества работы.
4
+ ---
5
+
6
+ # Проверка результата (Review Result)
7
+
8
+ > **ОБЯЗАТЕЛЬНО:** Последние строки твоего ответа ВСЕГДА должны быть блоком `---RESULT---`.
9
+ > Без этого блока пайплайн не распознает статус и тикет попадёт в `blocked`.
10
+ > Даже если ревью очевидно — всё равно заверши ответ блоком результата.
11
+
12
+ Этот skill проверяет результат выполнения задачи на соответствие критериям готовности (Definition of Done) из тикета.
13
+
14
+ ## Когда использовать
15
+
16
+ - Задача выполнена и тикет перемещён в `review/`
17
+ - Требуется валидация качества перед перемещением в `done/`
18
+ - Retry-логика пайплайна: определить status для goto-перехода
19
+
20
+ ## Шаги проверки
21
+
22
+ ### 0. Проверить последний статус ревью
23
+
24
+ **До любых проверок** найди в тикете секцию `## Ревью`.
25
+
26
+ Если секция существует и содержит записи — посмотри на **последнюю запись** (последняя строка таблицы или последний элемент списка):
27
+
28
+ - Если последняя запись имеет статус `passed` — ревью уже пройдено. Немедленно верни результат:
29
+
30
+ ```
31
+ ---RESULT---
32
+ status: passed
33
+ issues: []
34
+ ---RESULT---
35
+ ```
36
+
37
+ - Если последняя запись имеет статус `⏭ skipped` — тикет пропущен check-relevance. Ревью проводить **НЕ НАДО**. Немедленно верни результат:
38
+
39
+ ```
40
+ ---RESULT---
41
+ status: passed
42
+ issues: []
43
+ ---RESULT---
44
+ ```
45
+
46
+ - Если последняя запись имеет статус `failed` — **необходима повторная проверка**. Переходи к шагу 1.
47
+
48
+ > **ВАЖНО:** Проверяй именно ПОСЛЕДНЮЮ запись, а не любую. Если после `passed`/`skipped` появилась `failed` — задача требует повторной проверки. Только если последний статус `passed` или `skipped` — можно пропустить.
49
+
50
+ ### 1. Прочитать тикет
51
+
52
+ ID тикета передаётся в промпте как `ticket_id` в секции Context.
53
+
54
+ ```
55
+ Путь: .workflow/tickets/review/{TICKET-ID}.md
56
+ ```
57
+
58
+ **Важно:** НЕ перемещай тикет — перемещение выполняется отдельным stage пайплайна по результату этого skill.
59
+
60
+ Извлечь:
61
+ - Definition of Done (DoD) — чеклист критериев готовности
62
+ - Детали задачи — требования к реализации
63
+ - Результат выполнения (секция Result) — что сделано
64
+
65
+ ### 2. Проверить каждый пункт DoD
66
+
67
+ Для каждого критерия из Definition of Done:
68
+
69
+ | Тип проверки | Описание |
70
+ |--------------|----------|
71
+ | `file_exists` | Файл существует по указанному пути |
72
+ | `compilation` | Код компилируется / линтер проходит |
73
+ | `tests` | Тесты проходят |
74
+ | `text` | Текстовый критерий выполнен (содержимое, структура) |
75
+ | `structure` | Структура соответствует шаблону |
76
+
77
+ ### 3. Сверить результат с требованиями
78
+
79
+ Сравнить секцию «Результат выполнения» с «Деталями задачи»:
80
+ - Все ли требования учтены
81
+ - Соответствует ли реализация описанию
82
+ - Нет ли расхождений
83
+
84
+ ### 3.5. Проверка с позиции целевой аудитории
85
+
86
+ > **Применяется** когда результат тикета документ/ТЗ/спецификация, предназначенные для конкретного исполнителя (разработчик, дизайнер, внешний подрядчик и т.д.).
87
+
88
+ Если в DoD есть критерий типа *"файл самодостаточен"* или *"исполнитель не должен смотреть другие документы"*:
89
+
90
+ | Проверка | Как проверить | Провал |
91
+ |----------|---------------|----------|
92
+ | Credentials указаны или описано где взять | Искать плейсхолдеры `XXX`, `TODO`, `заменить на реальный` — для каждого должна быть инструкция | failed |
93
+ | Все системные зависимости перечислены | Для каждого API/библиотеки в сниппетах — проверить наличие в секции permissions/dependencies | failed |
94
+ | Параметры вычислимы | Для условных параметров (`isFirst`, `count`) — описан способ получения значения | failed |
95
+ | Environment-переключение описано | Если есть debug/dev/prod режимы — описан механизм переключения | failed |
96
+
97
+ **Правило:** Прочитай документ глазами целевого исполнителя. Если он не может начать работу без дополнительных вопросов — это `failed`, даже если формальные DoD выполнены.
98
+
99
+ ### 3.6. Верификация реальных изменений
100
+
101
+ > **Применяется только** для тикетов с `executor_type != human`.
102
+
103
+ Даже если все DoD отмечены как `[x]`, необходимо убедиться что изменения реально существуют, а не являются галлюцинацией агента.
104
+
105
+ | Проверка | Как проверить | Провал → |
106
+ |----------|---------------|----------|
107
+ | Файлы-артефакты существуют | Проверить все файлы из секции «Изменённые файлы» через Read/Glob | failed |
108
+ | Файлы содержат реальный контент | Открыть файл, убедиться что содержимое — не шаблон/placeholder | failed |
109
+ | Секция Result не пуста | Проверить что Summary заполнен содержательно (не заглушка) | failed |
110
+ | DoD соответствует реальности | Для каждого `[x]` — открыть артефакт и убедиться что критерий действительно выполнен | failed |
111
+
112
+ **Правило:** Если хотя бы одна проверка провалена → статус `failed`, даже если все DoD отмечены `[x]`.
113
+
114
+ ### 4. Сформировать вердикт
115
+
116
+ > **ВАЖНО:** Review-result НИКОГДА не пишет статус `skipped`. Допустимы только `passed` или `failed`. Статус `skipped` — прерогатива check-relevance.
117
+
118
+ Возвращать структурированный результат строго в одном из двух форматов:
119
+
120
+ > **КРИТИЧНО**: `status` принимает ТОЛЬКО два значения: `passed` или `failed`.
121
+ > Любой другой вывод (`default`, `ok`, `done`, `complete`, `yes`, и т.д.) — **ОШИБКА**.
122
+ > Пайплайн не продолжится корректно, если статус не распознан.
123
+
124
+ Если **все** пункты DoD выполнены:
125
+
126
+ ```
127
+ ---RESULT---
128
+ status: passed
129
+ issues: []
130
+ ---RESULT---
131
+ ```
132
+
133
+ Если **хотя бы один** пункт DoD не выполнен:
134
+
135
+ ```
136
+ ---RESULT---
137
+ status: failed
138
+ issues:
139
+ - "Пункт DoD X не выполнен: ожидалось Y, получено Z"
140
+ - "Файл X не создан"
141
+ - "Тест Y не прошёл"
142
+ ---RESULT---
143
+ ```
144
+
145
+ > Блок `---RESULT---` должен быть в выводе **ровно один раз**, в самом конце ответа.
146
+
147
+ ### 5. При `failed`: детализировать замечания
148
+
149
+ Для каждого невыполненного пункта:
150
+ - Описать что ожидалось
151
+ - Описать что получено
152
+ - Указать файл/строку если применимо
153
+
154
+ ## Алгоритм проверки
155
+
156
+ ```
157
+ 0. Быстрый выход:
158
+ - Прочитать тикет
159
+ - Найти секцию "## Ревью"
160
+ - Если последняя запись "passed" или "skipped" вернуть status: passed, остановиться
161
+ - Если последняя запись "failed" перейти к шагу 1 (повторная проверка)
162
+
163
+ 1. Парсинг тикета:
164
+ - Извлечь DoD (список критериев)
165
+ - Извлечь Result (что сделано)
166
+ - Извлечь Детали задачи (требования)
167
+
168
+ 2. Для каждого пункта DoD:
169
+ - Определить тип проверки (file/compilation/tests/text)
170
+ - Выполнить проверку
171
+ - Записать результат (pass/fail + комментарий)
172
+
173
+ 3. Сверка Result ↔ Детали задачи:
174
+ - Все ли файлы созданы
175
+ - Соответствует ли структура
176
+ - Нет ли расхождений
177
+
178
+ 3.5. Проверка с позиции целевой аудитории (для документов/ТЗ/спецификаций):
179
+ - Credentials указаны или описано где взять (нет голых плейсхолдеров)
180
+ - Все системные зависимости перечислены
181
+ - Условные параметры вычислимы
182
+ - Environment-переключение описано
183
+ - Любой провал → status: failed
184
+
185
+ 3.6. Верификация реальных изменений (только executor_type != human):
186
+ - Файлы из «Изменённые файлы» существуют
187
+ - Файлы содержат реальный контент (не placeholder)
188
+ - Summary заполнен содержательно
189
+ - Каждый [x] в DoD подтверждён реальным артефактом
190
+ - Любой провал → status: failed
191
+
192
+ 4. Формирование вердикта:
193
+ - Если все пункты pass status: passed
194
+ - Если есть fail → status: failed + список issues
195
+
196
+ 5. Вывод результата в формате ---RESULT---
197
+
198
+ 6. Пометка тикета о результате ревью:
199
+ - Добавить секцию `## Ревью` в тикете (если её нет — создать с заголовком таблицы)
200
+ - **ВАЖНО: новую запись добавлять В КОНЕЦ таблицы** (последней строкой). Не вставлять перед существующими записями!
201
+ - Указать:
202
+ - Дата ревью
203
+ - Статус: passed/failed
204
+ - Краткий самари (если failed — что не так)
205
+ - Сохранить тикет в той же директории
206
+ ```
207
+
208
+ ## Типы проверок
209
+
210
+ ### file_exists
211
+
212
+ Проверка существования файла:
213
+
214
+ ```
215
+ Критерий: "[ ] Файл `src/logger.py` создан"
216
+ Проверка: os.path.exists("src/logger.py")
217
+ Результат: pass/fail
218
+ ```
219
+
220
+ ### compilation
221
+
222
+ Проверка компиляции / линта:
223
+
224
+ ```
225
+ Критерий: "[ ] Код проходит линтер"
226
+ Проверка: npm run lint / ruff check / etc.
227
+ Результат: pass/fail + вывод
228
+ ```
229
+
230
+ ### tests
231
+
232
+ Проверка тестов:
233
+
234
+ ```
235
+ Критерий: "[ ] Тесты проходят"
236
+ Проверка: npm test / pytest / etc.
237
+ Результат: pass/fail + вывод
238
+ ```
239
+
240
+ ### text
241
+
242
+ Текстовая проверка:
243
+
244
+ ```
245
+ Критерий: "[ ] Описан алгоритм проверки DoD"
246
+ Проверка: Поиск раздела "Алгоритм" в файле
247
+ Результат: pass/fail
248
+ ```
249
+
250
+ ### structure
251
+
252
+ Проверка структуры:
253
+
254
+ ```
255
+ Критерий: "[ ] Структура аналогична существующим skills"
256
+ Проверка: Сравнение с шаблоном
257
+ Результат: pass/fail + замечания
258
+ ```
259
+
260
+ ## Пример использования
261
+
262
+ ```
263
+ Проверь результат IMPL-006 на соответствие DoD.
264
+ ```
265
+
266
+ ```
267
+ review-result .workflow/tickets/in-progress/IMPL-006.md
268
+ ```
269
+
270
+ ## Пример вывода
271
+
272
+ ### Успешная проверка
273
+
274
+ ```markdown
275
+ ---RESULT---
276
+ status: passed
277
+ issues: []
278
+ ---RESULT---
279
+ ```
280
+
281
+ ### Неуспешная проверка
282
+
283
+ ```markdown
284
+ ---RESULT---
285
+ status: failed
286
+ issues:
287
+ - "Пункт DoD 'Файл .workflow/src/skills/review-result/SKILL.md создан' не выполнен: файл не найден"
288
+ - "Пункт DoD 'Описан алгоритм проверки DoD' не выполнен: раздел 'Алгоритм' отсутствует"
289
+ - "Тесты не прошли: 2 failed, 5 passed"
290
+ ---RESULT---
291
+ ```
292
+
293
+ ## Формат секции ревью в тикете
294
+
295
+ После проверки skill добавляет в тикет секцию. **Новые записи всегда добавляются В КОНЕЦ таблицы** (хронологический порядок: старые сверху, новые снизу):
296
+
297
+ ```markdown
298
+ ## Ревью
299
+
300
+ | Дата | Статус | Самари |
301
+ |------|--------|--------|
302
+ | 2026-03-03 14:30 | ❌ failed | Не пройдены тесты, отсутствует файл logger.py |
303
+ | 2026-03-03 15:45 | ✅ passed | Все критерии DoD выполнены после исправления |
304
+ ```
305
+
306
+ > **Порядок записей:** хронологический сверху вниз. Последняя строка = последнее ревью. Код `getLastReviewStatus()` определяет статус по последней строке.
307
+
308
+ ## Интеграция с пайплайном
309
+
310
+ В retry-логике пайплайна:
311
+
312
+ 1. `execute-task` выполняет задачу
313
+ 2. `review-result` проверяет результат
314
+ 3. По `status` определяется goto-переход:
315
+ - `passed` → следующий stage
316
+ - `failed` → retry или blocked
317
+
318
+ ## Результат
319
+
320
+ - Структурированный вердикт (passed/failed)
321
+ - Список замечаний (если есть)
322
+ - **Тикет помечен секцией `## Ревью`** с датой, статусом и кратким самари
323
+ - Готово для использования в goto-логике
324
+
325
+ ## Связанные skills
326
+
327
+ - `execute-task` — выполнение задачи перед проверкой
328
+ - `move-ticket` — перемещение по результатам проверки
329
+ - `check-conditions` — проверка условий для зависимых задач