Files
librenotes/.wave/pipelines/speckit-flow.yaml
Michael Czechowski fc24f9a8ab Add Wave general-purpose pipelines
ADR, changelog, code-review, debug, doc-sync, explain, feature,
hotfix, improve, onboard, plan, prototype, refactor, security-scan,
smoke-test, speckit-flow, supervise, test-gen, and more.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:02:36 +01:00

235 lines
5.8 KiB
YAML

kind: WavePipeline
metadata:
name: speckit-flow
description: "Specification-driven feature development using the full speckit workflow"
release: true
requires:
skills:
- speckit
tools:
- git
- gh
input:
source: cli
example: "add user authentication with JWT tokens"
schema:
type: string
description: "Natural language feature description to specify and implement"
steps:
- id: specify
persona: implementer
workspace:
type: worktree
branch: "{{ pipeline_id }}"
base: main
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/specify.md
output_artifacts:
- name: spec-status
path: .wave/output/specify-status.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/specify-status.json
schema_path: .wave/contracts/specify-status.schema.json
must_pass: true
on_failure: retry
max_retries: 2
- id: clarify
persona: implementer
dependencies: [specify]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/clarify.md
output_artifacts:
- name: clarify-status
path: .wave/output/clarify-status.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/clarify-status.json
schema_path: .wave/contracts/clarify-status.schema.json
must_pass: true
on_failure: retry
max_retries: 2
- id: plan
persona: implementer
dependencies: [clarify]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/plan.md
output_artifacts:
- name: plan-status
path: .wave/output/plan-status.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/plan-status.json
schema_path: .wave/contracts/plan-status.schema.json
must_pass: true
on_failure: retry
max_retries: 2
- id: tasks
persona: implementer
dependencies: [plan]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/tasks.md
output_artifacts:
- name: tasks-status
path: .wave/output/tasks-status.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/tasks-status.json
schema_path: .wave/contracts/tasks-status.schema.json
must_pass: true
on_failure: retry
max_retries: 2
- id: checklist
persona: implementer
dependencies: [tasks]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/checklist.md
output_artifacts:
- name: checklist-status
path: .wave/output/checklist-status.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/checklist-status.json
schema_path: .wave/contracts/checklist-status.schema.json
must_pass: true
on_failure: retry
max_retries: 2
- id: analyze
persona: implementer
dependencies: [checklist]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/analyze.md
output_artifacts:
- name: analysis-report
path: .wave/output/analysis-report.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/analysis-report.json
schema_path: .wave/contracts/analysis-report.schema.json
must_pass: true
on_failure: retry
max_retries: 2
- id: implement
persona: craftsman
dependencies: [analyze]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/implement.md
handover:
contract:
type: test_suite
command: "{{ project.test_command }}"
must_pass: true
on_failure: retry
max_retries: 3
compaction:
trigger: "token_limit_80%"
persona: summarizer
- id: create-pr
persona: craftsman
dependencies: [implement]
memory:
inject_artifacts:
- step: specify
artifact: spec-status
as: spec_info
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source_path: .wave/prompts/speckit-flow/create-pr.md
output_artifacts:
- name: pr-result
path: .wave/output/pr-result.json
type: json
handover:
contract:
type: json_schema
source: .wave/output/pr-result.json
schema_path: .wave/contracts/pr-result.schema.json
must_pass: true
on_failure: retry
max_retries: 2
outcomes:
- type: pr
extract_from: .wave/output/pr-result.json
json_path: .pr_url
label: "Pull Request"