workflow-ai 1.0.35 → 1.0.36

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.35",
3
+ "version": "1.0.36",
4
4
  "description": "AI Agent Workflow Coordinator — kanban-based pipeline for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
package/src/runner.mjs CHANGED
@@ -314,7 +314,7 @@ class PromptBuilder {
314
314
  // Добавляем блок Instructions если поле instructions задано и непустое
315
315
  if (stage.instructions && typeof stage.instructions === 'string' && stage.instructions.trim() !== '') {
316
316
  parts.push('\n\nInstructions:');
317
- parts.push(stage.instructions.trim());
317
+ parts.push(this.interpolate(stage.instructions.trim()));
318
318
  }
319
319
 
320
320
  return parts.join('\n');
@@ -131,13 +131,6 @@ async function main() {
131
131
 
132
132
  console.log(`[INFO] Found plan file: ${planFile}`);
133
133
 
134
- const planStatus = getPlanStatus(planFile);
135
- if (planStatus !== 'approved') {
136
- console.log(`[INFO] Plan ${planId} has status "${planStatus}" (not "approved") — skipping decomposition`);
137
- printResult({ status: 'decomposed' });
138
- return;
139
- }
140
-
141
134
  if (hasTicketsForPlan(planId)) {
142
135
  console.log(`[INFO] Plan ${planId} already has tickets — decomposed`);
143
136
  printResult({ status: 'decomposed' });
@@ -30,6 +30,15 @@ reason: already_skipped
30
30
  ---RESULT---
31
31
  ```
32
32
 
33
+ Если последняя запись имеет статус `❌ failed` — тикет был выполнен, но ревью провалилось. Тикету нужна **доработка через execute-task**, а НЕ повторное ревью. Немедленно верни:
34
+
35
+ ```
36
+ ---RESULT---
37
+ status: relevant
38
+ reason: review_failed_needs_rework
39
+ ---RESULT---
40
+ ```
41
+
33
42
  Если последней записи нет или статус другой — переходи к шагу 1.
34
43
 
35
44
  ### 1. Прочитать тикет
@@ -69,7 +78,9 @@ reason: already_skipped
69
78
  - Все критерии уже отмечены как выполненные `[x]`
70
79
  - В секции "Результат выполнения" уже есть заполненные данные
71
80
 
72
- **Если DoD полностью выполнен:** тикет `irrelevant` (задача уже сделана)
81
+ **ВАЖНО:** Если DoD выполнен, но последнее ревью `❌ failed` — тикет **НЕ неактуален**, ему нужна доработка. Верни `relevant` (reason: review_failed_needs_rework). Это предотвращает бесконечный цикл повторного ревью без доработки.
82
+
83
+ **Если DoD полностью выполнен И ревью НЕ failed:** тикет `irrelevant` (задача уже сделана)
73
84
 
74
85
  ### 4. Проверить зависимости
75
86
 
@@ -122,8 +133,9 @@ reason: already_skipped
122
133
 
123
134
  | Проверка | Результат | Статус |
124
135
  |----------|-----------|--------|
136
+ | Последнее ревью failed | Needs rework | `relevant` |
125
137
  | План неактивен | Plan inactive | `irrelevant` |
126
- | DoD выполнен | DoD completed | `irrelevant` |
138
+ | DoD выполнен (ревью НЕ failed) | DoD completed | `irrelevant` |
127
139
  | Зависимости неактуальны | Dependencies inactive | `irrelevant` |
128
140
  | Все проверки пройдены | All checks passed | `relevant` |
129
141
 
@@ -13,19 +13,14 @@ description: Декомпозировать план на исполняемые
13
13
  - Нужно разбить крупную задачу на подзадачи
14
14
  - Требуется детальная декомпозиция
15
15
 
16
- ## ⛔ ПРЕДУСЛОВИЕ: проверка статуса плана
16
+ ## ⛔ ПЕРВЫЙ ШАГ: определи какой план декомпозировать
17
17
 
18
- **ПЕРЕД любой работой** прочитай frontmatter плана и проверь поле `status`.
18
+ Прочитай свой промпт. Если в нём указан `plan_id` или `plan_file` (например `plan_id: PLAN-005` или `plan_file: plans/current/PLAN-005.md`) — ты ОБЯЗАН декомпозировать именно этот план.
19
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). Уже дважды происходило.
20
+ **Правила:**
21
+ 1. Если указан `plan_file` — открой `.workflow/{plan_file}` и декомпозируй его. Не читай другие планы. Не проверяй статус. Сразу переходи к шагу 1.
22
+ 2. Если указан `plan_id` но нет `plan_file` найди план `plans/current/{plan_id}.md` и декомпозируй его. Не проверяй статус.
23
+ 3. Если ни `plan_id`, ни `plan_file` не указаны сканируй все планы в `plans/current/` и декомпозируй только те, у которых `status: approved`.
29
24
 
30
25
  ## Шаги выполнения
31
26