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"