156 lines
3.7 KiB
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"
|