Files
code-crispies/.wave/pipelines/gt-scope.yaml

168 lines
5.3 KiB
YAML

kind: WavePipeline
metadata:
name: gt-scope
description: "Decompose a Gitea epic into well-scoped child issues"
release: true
input:
source: cli
example: "re-cinq/wave 42"
schema:
type: string
description: "Gitea repository with epic issue number (e.g. 'owner/repo 42')"
steps:
- id: fetch-epic
persona: gitea-analyst
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source: |
MANDATORY: You MUST call the Bash tool. NEVER say "tea CLI not installed" without trying.
Input: {{ input }}
Parse the input: extract the repo (first token) and the epic issue number (second token).
Execute these commands using the Bash tool:
1. tea --version
2. Fetch the epic issue with full details:
tea issues view <NUMBER> --output json
3. List existing open issues to check for duplicates:
tea issues list --limit 50 --output json
After getting REAL results from Bash, analyze the epic:
- Determine if this is truly an epic/umbrella issue (contains multiple work items)
- Identify the key themes and work areas
- Estimate overall complexity
- Count how many sub-issues should be created (3-10)
- List existing issues to avoid creating duplicates
output_artifacts:
- name: epic_assessment
path: .wave/artifact.json
type: json
required: true
handover:
max_retries: 1
contract:
type: json_schema
schema_path: .wave/contracts/epic-assessment.schema.json
validate: true
must_pass: true
allow_recovery: true
recovery_level: progressive
progressive_validation: false
- id: scope-and-create
persona: gitea-scoper
dependencies: [fetch-epic]
memory:
inject_artifacts:
- step: fetch-epic
artifact: epic_assessment
as: assessment
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source: |
CRITICAL: You MUST use the Bash tool for all commands. Do NOT generate fake output.
The assessment artifact contains the epic analysis. Use it to create well-scoped child issues.
Step 1: Verify tea works:
tea --version
Step 2: For each planned sub-issue, create it using:
tea issues create --title "<title>" --body "<body>" --labels "<labels>"
Each sub-issue body MUST include:
- A "Parent: #<epic_number>" reference line
- A clear Summary section
- Acceptance Criteria as a checkbox list
- Dependencies on other sub-issues if applicable
- Scope Notes for what is explicitly excluded
Step 3: After creating all issues, capture each issue's number and URL from the creation output.
Step 4: Record the results with fields: parent_issue (number, url, repository),
created_issues (array of number, title, url, labels, success, complexity, dependencies),
total_created, total_failed.
output_artifacts:
- name: scope_plan
path: .wave/artifact.json
type: json
required: true
outcomes:
- type: issue
extract_from: .wave/artifact.json
json_path: .created_issues[0].url
label: "First Sub-Issue"
handover:
max_retries: 1
contract:
type: json_schema
schema_path: .wave/contracts/scope-plan.schema.json
validate: true
must_pass: true
allow_recovery: true
recovery_level: progressive
progressive_validation: false
- id: verify-report
persona: gitea-analyst
dependencies: [scope-and-create]
memory:
inject_artifacts:
- step: scope-and-create
artifact: scope_plan
as: results
- step: fetch-epic
artifact: epic_assessment
as: assessment
workspace:
type: worktree
branch: "{{ pipeline_id }}"
exec:
type: prompt
source: |
Verify the created sub-issues and post a summary comment on the epic.
Step 1: For each created issue in the results, verify it exists:
tea issues view <N> --output json
Check that each issue:
- Exists and is open
- Has acceptance criteria in the body
- References the parent epic
Step 2: Post a summary comment on the epic issue listing all created sub-issues:
Create a markdown summary with a checklist of all sub-issues (- [ ] #<number> <title>)
and post it using: tea issues comment <EPIC_NUMBER> --body "<summary>"
Step 3: Compile the verification report with fields:
parent_issue (number, url), verified_issues (array of number, title, url, exists,
has_acceptance_criteria, references_parent), summary (total_verified, total_valid,
total_issues_created, comment_posted, comment_url).
output_artifacts:
- name: scope_report
path: .wave/artifact.json
type: json
required: true
handover:
max_retries: 1
contract:
type: json_schema
schema_path: .wave/contracts/scope-report.schema.json
validate: true
must_pass: true
allow_recovery: true
recovery_level: progressive
progressive_validation: false