kind: WavePipeline metadata: name: impl-issue description: "Implement an issue end-to-end: fetch, assess, plan, implement, create PR" release: true chat_context: artifact_summaries: - assessment - impl-plan - pr-result suggested_questions: - "Would you like to review the changes in the pull request?" - "Are there any failing tests to investigate?" - "Should we refine the implementation or add more test coverage?" focus_areas: - "Code changes and implementation quality" - "Test results and coverage" - "PR status and review readiness" skills: - "{{ project.skill }}" - gh-cli - software-design requires: tools: - gh input: source: cli schema: type: string description: "GitHub repository and issue number" example: "re-cinq/wave 42" steps: - id: fetch-assess persona: implementer model: claude-haiku workspace: type: worktree branch: "{{ pipeline_id }}" exec: type: prompt source_path: .wave/prompts/implement/fetch-assess.md output_artifacts: - name: assessment path: .wave/output/issue-assessment.json type: json retry: policy: patient max_attempts: 2 handover: contract: type: json_schema source: .wave/output/issue-assessment.json schema_path: .wave/contracts/issue-assessment.schema.json must_pass: true on_failure: retry - id: plan persona: implementer dependencies: [fetch-assess] memory: inject_artifacts: - step: fetch-assess artifact: assessment as: issue_assessment workspace: type: worktree branch: "{{ pipeline_id }}" base: main exec: type: prompt source_path: .wave/prompts/implement/plan.md output_artifacts: - name: impl-plan path: .wave/output/impl-plan.json type: json retry: policy: standard max_attempts: 2 handover: contract: type: json_schema source: .wave/output/impl-plan.json schema_path: .wave/contracts/issue-impl-plan.schema.json must_pass: true on_failure: retry - id: implement persona: craftsman thread: impl dependencies: [plan] memory: inject_artifacts: - step: fetch-assess artifact: assessment as: issue_assessment - step: plan artifact: impl-plan as: impl_plan workspace: type: worktree branch: "{{ pipeline_id }}" exec: type: prompt source_path: .wave/prompts/implement/implement.md retry: policy: aggressive max_attempts: 3 handover: contract: type: test_suite command: "{{ project.test_command }}" must_pass: true on_failure: retry compaction: trigger: "token_limit_80%" persona: summarizer - id: create-pr persona: "gitea-commenter" dependencies: [implement] memory: inject_artifacts: - step: fetch-assess artifact: assessment as: issue_assessment workspace: type: worktree branch: "{{ pipeline_id }}" exec: type: prompt source_path: .wave/prompts/implement/create-pr.md output_artifacts: - name: pr-result path: .wave/output/pr-result.json type: json retry: policy: standard max_attempts: 2 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 outcomes: - type: pr extract_from: .wave/output/pr-result.json json_path: .pr_url label: "Pull Request"