Files
code-crispies/.wave/pipelines/impl-issue.yaml

156 lines
3.7 KiB
YAML

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"