workflow-ai 1.0.40 → 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.
- package/agent-templates/CLAUDE.md.tpl +10 -1
- package/agent-templates/QWEN.md.tpl +18 -1
- package/package.json +3 -1
- package/src/cli.mjs +79 -1
- package/src/global-dir.mjs +90 -0
- package/src/init.mjs +15 -30
- package/src/junction-manager.mjs +184 -0
- package/src/runner.mjs +26 -7
- package/src/scripts/move-to-review.js +5 -1
- package/src/skills/coach/SKILL.md +12 -2
- package/src/skills/coach/workflows/analyze.md +12 -0
- package/src/skills/create-plan/SKILL.md +9 -0
- package/src/skills/decompose-gaps/SKILL.md +6 -0
- package/src/skills/decompose-plan/SKILL.md +52 -1
- package/src/skills/deep-research/README.md +50 -0
- package/src/skills/deep-research/SKILL.md +148 -0
- package/src/skills/deep-research/algorithms/source-scoring.md +63 -0
- package/src/skills/deep-research/algorithms/synthesis.md +67 -0
- package/src/skills/deep-research/knowledge/data-validation.md +44 -0
- package/src/skills/deep-research/knowledge/research-methodology.md +54 -0
- package/src/skills/deep-research/knowledge/source-evaluation.md +33 -0
- package/src/skills/deep-research/scripts/perplexity-research.js +315 -0
- package/src/skills/deep-research/templates/brief-summary.md +25 -0
- package/src/skills/deep-research/templates/research-report.md +76 -0
- package/src/skills/deep-research/workflows/benchmark.md +56 -0
- package/src/skills/deep-research/workflows/competitor.md +63 -0
- package/src/skills/deep-research/workflows/custom.md +45 -0
- package/src/skills/deep-research/workflows/market.md +64 -0
- package/src/skills/deep-research/workflows/technology.md +52 -0
- package/src/skills/deep-research/workflows/trend.md +51 -0
- package/src/skills/execute-task/SKILL.md +48 -2
- 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
|
-
###
|
|
85
|
-
|
|
86
|
-
>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
Проверка
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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` — проверка условий для зависимых задач
|