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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workflow-ai",
3
- "version": "1.0.19",
3
+ "version": "1.0.20",
4
4
  "description": "AI Agent Workflow Coordinator — kanban-based pipeline for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
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/