kind: WavePipeline metadata: name: ops-issue-quality description: "Scan open issues for quality and post enhancement suggestions on poor-scoring ones" release: true skills: - gh-cli requires: tools: - gh input: source: cli example: "re-cinq/wave" schema: type: string description: "Repository in owner/repo format" steps: - id: scan persona: "gitea-analyst" model: claude-haiku workspace: mount: - source: ./ target: /project mode: readonly exec: type: prompt source: | Scan all open issues in the repository and produce a quality report. Repository: {{ input }} Split the input on "/" to get OWNER and REPO. ## Fetch Open Issues ```bash {{ forge.cli_tool }} issue list --repo {{ input }} --state open --limit 200 \ --json number,title,body,labels,url,assignees,milestone,createdAt,updatedAt,comments ``` ## Analyze Each Issue For every issue (skip pull requests — items where the URL contains "/pull/"), evaluate: 1. **Title quality** - Too short (< 10 chars): -20 points - All lowercase (> 5 chars): -5 points - All uppercase (> 5 chars): -10 points - Vague terms ("issue", "problem", "help", "bug?", "question") with title < 30 chars: -10 points - Fewer than 3 words: -15 points 2. **Body quality** - Empty body: -40 points - Body < 50 chars: -25 points - Body < 100 chars: -10 points - Single sentence (< 2 sentence-ending punctuation marks) with body > 20 chars: -10 points - No structured sections (missing keywords like "steps to reproduce", "expected behavior", "actual behavior", "environment", "version", "screenshot", "reproduction") with body > 100 chars: -5 points 3. **Labels** - No labels: -10 points Start every issue at score 100 and apply deductions. Floor at 0. ## Output Write a JSON file to `.wave/artifacts/quality-report.json` with this structure: ```json { "repository": { "owner": "", "name": "" }, "total_issues": , "analyzed_count": , "poor_quality_issues": [ { "number": , "title": "", "body": "", "quality_score": <0-100>, "problems": ["", ...], "recommendations": ["", ...], "labels": ["