workflow-ai 1.2.1 → 1.3.1
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/CHANGELOG.md +61 -49
- package/README.md +64 -475
- package/configs/pipeline.yaml +90 -2
- package/package.json +11 -1
- package/src/lib/marker.mjs +108 -0
- package/src/lib/process-alive.mjs +11 -0
- package/src/lib/stop-command.mjs +82 -0
- package/src/runner.mjs +40 -6
- package/src/scripts/check-relevance.js +3 -1
- package/src/scripts/get-next-id.js +1 -1
- package/src/scripts/mark-blocked.js +160 -0
- package/src/scripts/move-ticket.js +100 -35
- package/src/scripts/pick-next-task.js +64 -35
- package/src/skills/__test-cal-001-1777553217513/SKILL.md +2 -0
- package/src/skills/__test-runner-1777553217483/SKILL.md +5 -0
- package/src/skills/coach/SKILL.md +2 -1
- package/src/skills/execute-task/SKILL.md +29 -2
- package/src/skills/review-result/SKILL.md +23 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,49 +1,61 @@
|
|
|
1
|
-
## [1.
|
|
2
|
-
|
|
3
|
-
###
|
|
4
|
-
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
1
|
+
## [1.3.0] — 2026-04-30
|
|
2
|
+
|
|
3
|
+
### Добавлено
|
|
4
|
+
- **Новый тип стейджа: `mark-blocked` и расширение frontmatter** — Добавлены поля `auto_blocked_reason`, `auto_blocked_attempts`, `auto_blocked_at` для автоматического отслеживания причин и попыток блокировки тикетов. Стейдж `mark-blocked` позволяет устанавливать эти поля в зависимости от условий бизнес-логики.
|
|
5
|
+
- **Новый тип стейджа: `manual-gate-human`** — Добавлен статус `human_ready` в `pick-next-task.js`. При достижении этого статуса задача ожидает ручного решения оператора перед продолжением выполнения.
|
|
6
|
+
- **Хук одобрения в `move-ticket.js`** — Добавлен approval-hook, проверяющий наличие ожидающих решения одобрений перед перемещением тикета в терминальные состояния.
|
|
7
|
+
- **Расширение START-лога полем `ticket="X"`** — Добавлено поле с идентификатором тикета в стартовый лог для улучшенной трассировки и связывания логов с конкретными задачами.
|
|
8
|
+
- **Исправление `approval-pending.mjs` (поле `created_at`)** — Исправлено некорректное заполнение поля `created_at` при создании файлов ожидающих решения.
|
|
9
|
+
|
|
10
|
+
> **Примечание:** версия 1.2.0 не была опубликована в npm. При выполнении `npm publish`
|
|
11
|
+
> сработал prepublishOnly/postversion скрипт, автоматически поднявший версию до 1.2.1.
|
|
12
|
+
> Git-тег `v1.2.0` (коммит 179d52b) соответствует состоянию до publish; `v1.2.1` (коммит 83d1b70) —
|
|
13
|
+
> фактически опубликованной версии.
|
|
14
|
+
|
|
15
|
+
### New Features
|
|
16
|
+
- **New built-in stage type: `manual-gate`** — Adds support for manual approval steps in pipelines. When a stage with `type: manual-gate` is encountered, the runner creates a pending approval file in `.workflow/approvals/{step_id}.json` and enters a polling loop, waiting for an external decision (`approved`/`rejected`).
|
|
17
|
+
|
|
18
|
+
**Key capabilities:**
|
|
19
|
+
- Deterministic `step_id` generation: `{ticket_id}_{stageId}_{attempt}` (e.g., `QA-12_manual-approve_0`)
|
|
20
|
+
- Idempotent file creation — pending file is not overwritten on retry/restart
|
|
21
|
+
- Configurable polling interval (`poll_interval_ms`, default 2000ms) and optional timeout (`timeout_seconds`)
|
|
22
|
+
- Graceful handling of SIGTERM/runner stop (returns `aborted`)
|
|
23
|
+
- Immediate return if file already has `approved`/`rejected` status (crash recovery)
|
|
24
|
+
- JSON approval file format with full audit trail (`created_at`, `updated_at`, `decided_by`, `comment`, `context_snapshot`)
|
|
25
|
+
|
|
26
|
+
**Pipeline configuration example:**
|
|
27
|
+
```yaml
|
|
28
|
+
stages:
|
|
29
|
+
manual-approve-deploy:
|
|
30
|
+
type: manual-gate
|
|
31
|
+
poll_interval_ms: 2000
|
|
32
|
+
timeout_seconds: 86400
|
|
33
|
+
goto:
|
|
34
|
+
approved: continue-deploy
|
|
35
|
+
rejected: rollback
|
|
36
|
+
timeout: notify-stuck
|
|
37
|
+
aborted: end
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Two approval methods (both opt-in):**
|
|
41
|
+
1. **External MCP/client**: tools like `workflow-mcp` can write to approval files programmatically
|
|
42
|
+
2. **Direct file edit**: users can simply edit `.workflow/approvals/{step_id}.json` and change `status` to `approved` or `rejected`
|
|
43
|
+
|
|
44
|
+
**Important:** `manual-gate` is **opt-in** — pipelines without such stages work identically to previous versions. No breaking changes.
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
- No breaking changes. All existing pipelines without `manual-gate` stages are fully backward compatible.
|
|
48
|
+
|
|
49
|
+
### Fixes
|
|
50
|
+
- Исправлено сохранение временной метки `created_at` в файлах одобрений (approval-pending.mjs)
|
|
51
|
+
|
|
52
|
+
### Technical Notes
|
|
53
|
+
- Approval files are stored in `<project_root>/.workflow/approvals/`
|
|
54
|
+
- Runner validates `manual-gate` stages on startup — requires `goto.approved` and `goto.rejected`, validates numeric parameters
|
|
55
|
+
- New methods added to `PipelineRunner`: `computeStepId()`, `writeApprovalPending()`, `readApprovalFile()`, `executeManualGate()`
|
|
56
|
+
|
|
57
|
+
### References
|
|
58
|
+
- PLAN-009: workflow-ai 1.2 — manual-gate stage and approval files for workflow-mcp Sprint 2 integration
|
|
59
|
+
- IMPL-55, IMPL-56, IMPL-57, IMPL-58: Implementation tickets
|
|
60
|
+
- QA-35, QA-36, QA-37: Test coverage
|
|
61
|
+
- IMPL-51, QA-55 in workflow-mcp: Dependent consumer work
|