workflow-ai 1.0.19 → 1.0.20
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/package.json
CHANGED
package/src/lib/utils.mjs
CHANGED
|
@@ -139,6 +139,7 @@ export function getLastReviewStatus(content) {
|
|
|
139
139
|
const statusRaw = cells[1]?.toLowerCase() || '';
|
|
140
140
|
if (statusRaw.includes('passed')) return 'passed';
|
|
141
141
|
if (statusRaw.includes('failed')) return 'failed';
|
|
142
|
+
if (statusRaw.includes('skipped')) return 'skipped';
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
|
|
@@ -192,6 +192,11 @@ function autoCorrectTickets() {
|
|
|
192
192
|
condition: (status) => status === 'passed',
|
|
193
193
|
toDir: DONE_DIR,
|
|
194
194
|
reason: 'review passed'
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
condition: (status) => status === 'skipped',
|
|
198
|
+
toDir: DONE_DIR,
|
|
199
|
+
reason: 'review skipped'
|
|
195
200
|
}
|
|
196
201
|
]);
|
|
197
202
|
|
|
@@ -202,6 +207,11 @@ function autoCorrectTickets() {
|
|
|
202
207
|
toDir: DONE_DIR,
|
|
203
208
|
reason: 'review passed'
|
|
204
209
|
},
|
|
210
|
+
{
|
|
211
|
+
condition: (status) => status === 'skipped',
|
|
212
|
+
toDir: DONE_DIR,
|
|
213
|
+
reason: 'review skipped'
|
|
214
|
+
},
|
|
205
215
|
{
|
|
206
216
|
condition: (status) => status === 'failed',
|
|
207
217
|
toDir: BACKLOG_DIR,
|
|
@@ -222,7 +232,7 @@ function autoCorrectTickets() {
|
|
|
222
232
|
toDir: BACKLOG_DIR,
|
|
223
233
|
reason: 'no review'
|
|
224
234
|
}
|
|
225
|
-
// passed — не перемещаем
|
|
235
|
+
// passed или skipped — не перемещаем
|
|
226
236
|
]);
|
|
227
237
|
|
|
228
238
|
// Правила для review/
|
|
@@ -231,6 +241,11 @@ function autoCorrectTickets() {
|
|
|
231
241
|
condition: (status) => status === 'passed',
|
|
232
242
|
toDir: DONE_DIR,
|
|
233
243
|
reason: 'review passed'
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
condition: (status) => status === 'skipped',
|
|
247
|
+
toDir: DONE_DIR,
|
|
248
|
+
reason: 'review skipped'
|
|
234
249
|
}
|
|
235
250
|
]);
|
|
236
251
|
|
|
@@ -240,6 +255,11 @@ function autoCorrectTickets() {
|
|
|
240
255
|
condition: (status) => status === 'passed',
|
|
241
256
|
toDir: DONE_DIR,
|
|
242
257
|
reason: 'review passed'
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
condition: (status) => status === 'skipped',
|
|
261
|
+
toDir: DONE_DIR,
|
|
262
|
+
reason: 'review skipped'
|
|
243
263
|
}
|
|
244
264
|
]);
|
|
245
265
|
|
|
@@ -249,6 +269,11 @@ function autoCorrectTickets() {
|
|
|
249
269
|
condition: (status) => status === 'passed',
|
|
250
270
|
toDir: DONE_DIR,
|
|
251
271
|
reason: 'review passed'
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
condition: (status) => status === 'skipped',
|
|
275
|
+
toDir: DONE_DIR,
|
|
276
|
+
reason: 'review skipped'
|
|
252
277
|
}
|
|
253
278
|
]);
|
|
254
279
|
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: check-relevance
|
|
3
|
+
description: Проверить актуальность тикета перед выполнением. Используется для предотвращения выполнения устаревших или уже завершённых задач.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Проверка актуальности тикета
|
|
7
|
+
|
|
8
|
+
> **ЗАПРЕТ:** НЕ перемещай, НЕ удаляй, НЕ переименовывай файлы тикетов. Твоя задача — ТОЛЬКО прочитать, при irrelevant добавить запись в таблицу ревью, и вернуть вердикт. Перемещение выполняет отдельный stage пайплайна. Проверяй ТОЛЬКО тикет из `ticket_id` контекста, игнорируй остальные поля (`ready_tickets` и т.д.).
|
|
9
|
+
|
|
10
|
+
Этот skill проверяет актуальность тикета перед его выполнением. Предотвращает выполнение устаревших/неактуальных задач.
|
|
11
|
+
|
|
12
|
+
## Когда использовать
|
|
13
|
+
|
|
14
|
+
- Тикет только что перемещён в `in-progress/`
|
|
15
|
+
- Перед выполнением основной задачи (execute-task)
|
|
16
|
+
- Для фильтрации задач с неактивными планами или выполненными DoD
|
|
17
|
+
|
|
18
|
+
## Шаги проверки
|
|
19
|
+
|
|
20
|
+
### 1. Прочитать тикет
|
|
21
|
+
|
|
22
|
+
**ОБЯЗАТЕЛЬНО:** Используй `ticket_id` из секции Context промпта.
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Путь: .workflow/tickets/in-progress/{TICKET-ID}.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Извлечь:
|
|
29
|
+
- `parent_plan` — ссылка на родительский план
|
|
30
|
+
- `dependencies` — зависимости тикета
|
|
31
|
+
- `conditions` — условия выполнения
|
|
32
|
+
- Критерии готовности (Definition of Done)
|
|
33
|
+
|
|
34
|
+
### 2. Проверить родительский план
|
|
35
|
+
|
|
36
|
+
Проверить статус родительского плана:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Путь: .workflow/plans/current/{PARENT_PLAN}.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Критерии неактуальности:**
|
|
43
|
+
- План имеет `status: completed` — план уже завершён
|
|
44
|
+
- План имеет `status: archived` — план заархивирован
|
|
45
|
+
- План имеет `status: cancelled` — план отменён
|
|
46
|
+
|
|
47
|
+
**Если план неактивен:** тикет `irrelevant`
|
|
48
|
+
|
|
49
|
+
### 3. Проверить выполнение DoD
|
|
50
|
+
|
|
51
|
+
Проверить все критерии из Definition of Done тикета:
|
|
52
|
+
|
|
53
|
+
**Критерии неактуальности:**
|
|
54
|
+
- Все критерии уже отмечены как выполненные `[x]`
|
|
55
|
+
- В секции "Результат выполнения" уже есть заполненные данные
|
|
56
|
+
|
|
57
|
+
**Если DoD полностью выполнен:** тикет `irrelevant` (задача уже сделана)
|
|
58
|
+
|
|
59
|
+
### 4. Проверить зависимости
|
|
60
|
+
|
|
61
|
+
Проверить тикеты из секции `dependencies`:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Путь: .workflow/tickets/{status}/{DEP-TICKET}.md
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Критерии неактуальности:**
|
|
68
|
+
- Зависимый тикет находится в `blocked/` с причиной "неактуально"
|
|
69
|
+
- Зависимый тикет был удалён или перемещён в архив
|
|
70
|
+
|
|
71
|
+
**Если критические зависимости неактуальны:** тикет `irrelevant`
|
|
72
|
+
|
|
73
|
+
### 5. Проверить статус blocked
|
|
74
|
+
|
|
75
|
+
**Проверить секцию `## Блокировки` или frontmatter:**
|
|
76
|
+
|
|
77
|
+
Если тикет помечен как заблокированный → **неактуален**.
|
|
78
|
+
|
|
79
|
+
### 6. При irrelevant — записать в таблицу ревью тикета
|
|
80
|
+
|
|
81
|
+
Если вердикт `irrelevant`, **ОБЯЗАТЕЛЬНО** добавь запись в секцию `## Ревью` тикета:
|
|
82
|
+
|
|
83
|
+
- Если секции `## Ревью` нет — создай её в конце файла
|
|
84
|
+
- Если таблица уже есть — добавь строку в конец таблицы
|
|
85
|
+
|
|
86
|
+
Формат записи:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
| {текущая дата} | ⏭ skipped | {причина irrelevant: plan_inactive / dod_completed / dependencies_inactive} |
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Пример:
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
## Ревью
|
|
96
|
+
|
|
97
|
+
| Дата | Статус | Самари |
|
|
98
|
+
|------|--------|--------|
|
|
99
|
+
| 2026-03-10 | ⏭ skipped | DoD уже выполнен, тикет неактуален |
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Это единственная допустимая запись в файл — только добавление строки в таблицу ревью.
|
|
103
|
+
|
|
104
|
+
### 7. Принять решение
|
|
105
|
+
|
|
106
|
+
На основе проверок вывести результат:
|
|
107
|
+
|
|
108
|
+
| Проверка | Результат | Статус |
|
|
109
|
+
|----------|-----------|--------|
|
|
110
|
+
| План неактивен | Plan inactive | `irrelevant` |
|
|
111
|
+
| DoD выполнен | DoD completed | `irrelevant` |
|
|
112
|
+
| Зависимости неактуальны | Dependencies inactive | `irrelevant` |
|
|
113
|
+
| Все проверки пройдены | All checks passed | `relevant` |
|
|
114
|
+
|
|
115
|
+
## Fail-safe дизайн
|
|
116
|
+
|
|
117
|
+
**Важно:** При неизвестном статусе или ошибке проверки использовать fallback → `relevant`
|
|
118
|
+
|
|
119
|
+
Это гарантирует что тикет будет выполнен даже при проблемах с проверкой. Лучше выполнить лишний тикет, чем пропустить нужный.
|
|
120
|
+
|
|
121
|
+
## Формат результата
|
|
122
|
+
|
|
123
|
+
Обязательно выведи блок результата:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
---RESULT---
|
|
127
|
+
status: relevant
|
|
128
|
+
---RESULT---
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Или для неактуальных:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
---RESULT---
|
|
135
|
+
status: irrelevant
|
|
136
|
+
reason: <причина: plan_inactive / dod_completed / dependencies_inactive>
|
|
137
|
+
---RESULT---
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Примеры
|
|
141
|
+
|
|
142
|
+
### Пример 1: Тикет актуален
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
## Result
|
|
146
|
+
|
|
147
|
+
### Что проверено
|
|
148
|
+
- Родительский план PLAN-001: status: active ✓
|
|
149
|
+
- DoD: не все критерии выполнены ✓
|
|
150
|
+
- Зависимости: все активны ✓
|
|
151
|
+
|
|
152
|
+
### Решение
|
|
153
|
+
Тикет актуален, можно выполнять
|
|
154
|
+
|
|
155
|
+
---RESULT---
|
|
156
|
+
status: relevant
|
|
157
|
+
---RESULT---
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Пример 2: План завершён
|
|
161
|
+
|
|
162
|
+
```markdown
|
|
163
|
+
## Result
|
|
164
|
+
|
|
165
|
+
### Что проверено
|
|
166
|
+
- Родительский план PLAN-001: status: completed ✗
|
|
167
|
+
|
|
168
|
+
### Решение
|
|
169
|
+
План уже завершён, тикет неактуален
|
|
170
|
+
|
|
171
|
+
---RESULT---
|
|
172
|
+
status: irrelevant
|
|
173
|
+
reason: plan_inactive
|
|
174
|
+
---RESULT---
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Пример 3: DoD выполнен
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
## Result
|
|
181
|
+
|
|
182
|
+
### Что проверено
|
|
183
|
+
- Родительский план PLAN-001: status: active ✓
|
|
184
|
+
- DoD: все критерии отмечены [x] ✗
|
|
185
|
+
- Секция "Результат выполнения": заполнена ✗
|
|
186
|
+
|
|
187
|
+
### Решение
|
|
188
|
+
Задача уже выполнена, тикет неактуален
|
|
189
|
+
|
|
190
|
+
---RESULT---
|
|
191
|
+
status: irrelevant
|
|
192
|
+
reason: dod_completed
|
|
193
|
+
---RESULT---
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Интеграция с pipeline
|
|
197
|
+
|
|
198
|
+
Этот skill используется в stage `check-relevance` который размещается между:
|
|
199
|
+
- `move-to-in-progress` → `check-relevance` → `execute-task`
|
|
200
|
+
|
|
201
|
+
Переходы:
|
|
202
|
+
- `relevant` → перейти к `execute-task`
|
|
203
|
+
- `irrelevant` → переместить тикет в `done/` с пометкой
|
|
204
|
+
- `default` (fallback) → `execute-task` (fail-safe)
|
|
205
|
+
|
|
206
|
+
## Связанные skills
|
|
207
|
+
|
|
208
|
+
- `execute-task` — выполняет задачу после проверки актуальности
|
|
209
|
+
- `move-ticket` — перемещает неактуальные тикеты в done/
|