kind: WavePipeline metadata: name: gt-issue-impl description: "Implement a Gitea issue end-to-end: fetch, assess, plan, implement, create PR" input: source: cli schema: type: string description: "Gitea repository and issue number" example: "public/librenotes 42" steps: - id: fetch-assess persona: implementer workspace: type: worktree branch: "{{ pipeline_id }}" exec: type: prompt source_path: .wave/prompts/gitea-issue-impl/fetch-assess.md output_artifacts: - name: assessment path: .wave/output/issue-assessment.json type: json 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 max_retries: 2 - 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/gitea-issue-impl/plan.md output_artifacts: - name: impl-plan path: .wave/output/impl-plan.json type: json 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 max_retries: 2 - id: implement persona: craftsman dependencies: [plan] memory: inject_artifacts: - step: fetch-assess artifact: assessment as: issue_assessment - step: plan artifact: impl-plan as: plan workspace: type: worktree branch: "{{ pipeline_id }}" exec: type: prompt source_path: .wave/prompts/gitea-issue-impl/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: fetch-assess artifact: assessment as: issue_assessment workspace: type: worktree branch: "{{ pipeline_id }}" exec: type: prompt source_path: .wave/prompts/gitea-issue-impl/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"