yds-report-to-issues · git:20260820.725a136 · 2026-08-20 · sha256 b98955fd91444330
yds-report-to-issues git:20260820.725a136A
Immutable. This exact content is served forever at /api/v1/blob/b98955fd91444330.
---
name: yds-report-to-issues
description: |
Parses reports generated by the yds-software-evaluation or yds-vulnerability-scan skills and
interactively registers selected tasks as GitHub Issues using the `gh` CLI.
Use when the user wants to convert an evaluation report (docs/evaluation/*.md) or
security audit report (docs/security-audit/*.md) into GitHub Issues.
Triggers on requests like "create issues from report", "register tasks to GitHub",
"convert report to issues", or when pointing at a specific report file.
---
## Workflow
### Phase 1: Locate Report
1. If the user specifies a file path, use it directly.
2. Otherwise, list available reports:
- `docs/evaluation/` — yds-software-evaluation reports
- `docs/security-audit/` — yds-vulnerability-scan reports
- If multiple exist, ask the user to select one.
3. Detect report type by content:
- Contains `## Improvement Roadmap` → **evaluation report**
- Contains `## Remediation Priority` → **security-audit report**
---
### Phase 2: Extract Tasks
**Evaluation report** — extract rows from `## Improvement Roadmap` tables (P0–P3):
Each row yields:
- `priority`: P0 / P1 / P2 / P3
- `title`: Problem column (first sentence or file:line prefix)
- `problem`: full Problem cell
- `solution`: Solution cell
- `expected_outcome`: Expected Outcome cell
**Security-audit report** — extract from `## Remediation Priority` table AND individual `## Findings` sections:
Each row yields:
- `priority`: P0 / P1 from Priority column
- `title`: Finding column
- `action`: Action column
- `body`: full finding detail from the matching `### V-XX` section (Vulnerable Code, Attack Path, Risk Assessment, Recommended Fix)
---
### Phase 3: Present Tasks for Selection
Display all extracted tasks **before creating any issue**:
```
Extracted tasks from <report file>:
1. [P0] <title> (<file:line if present>)
2. [P1] <title>
3. [P1] <title>
...
Which tasks would you like to register as GitHub Issues?
Enter numbers (e.g. 1 3 5), a range (e.g. 1-3), "all", or "none":
```
Wait for the user's response before proceeding.
---
### Phase 4: Duplicate Detection
Before creating issues, check for existing issues that may overlap with the selected tasks.
**4.1 Fetch existing open issues:**
```bash
gh issue list --state open --json number,title,labels --limit 200
```
**4.2 For each selected task, check for duplicates:**
Compare the task title/problem against existing issue titles using keyword overlap. Flag a potential duplicate when:
- 3+ significant keywords match between the task and an existing issue title/body
- The same `file:line` location is referenced
- The same label combination exists (e.g., both `P0` + `security-audit`)
**4.3 Present duplicates to the user:**
```
⚠ Potential duplicates detected:
Task 2: [P1] No timeouts on external HTTP calls
→ May overlap with #34: "[P1] Add timeout to fetch calls in src/lib/http.ts"
Task 5: [P0] SQL Injection in user search
→ May overlap with #12: "[P0] Parameterize DB queries in src/api/"
Create anyway? Enter task numbers to skip (e.g. 2 5), or "proceed" to create all:
```
Wait for the user's response. Remove confirmed duplicates from the creation list.
---
### Phase 5: Ensure Labels Exist
Before creating issues, verify required labels exist. Required labels:
| Label | Color | When used |
|-------|-------|-----------|
| `yds-software-evaluation` | `#0075ca` | Evaluation reports |
| `security-audit` | `#e4e669` | Security-audit reports |
| `P0` | `#d93f0b` | Priority 0 |
| `P1` | `#e99695` | Priority 1 |
| `P2` | `#f9d0c4` | Priority 2 |
| `P3` | `#fef2c0` | Priority 3 |
| `critical` | `#b60205` | Critical severity findings |
| `high` | `#d93f0b` | High severity findings |
| `medium` | `#e4e669` | Medium severity findings |
| `low` | `#0e8a16` | Low severity findings |
Check and create missing labels:
```
gh label list --json name | jq -r '.[].name'
gh label create "<label>" --color "<hex>" --description "<desc>"
```
---
### Phase 6: Create Issues
For each selected task (after duplicate filtering), create the issue using the `gh` CLI `--body` flag with the formatted content:
```
gh issue create --title "<title>" --body "<body>" --label "<label1>" --label "<label2>"
```
**Title format**:
- Evaluation: `[<Priority>] <problem summary>`
- Security: `[<Priority>] <finding title>`
**Body format — evaluation task**:
```markdown
## Problem
<problem>
## Solution
<solution>
## Expected Outcome
<expected_outcome>
---
*Source: <report file path>*
```
**Body format — security finding**:
```markdown
## Finding
<full finding detail: Vulnerable Code, Attack Path, Risk Assessment>
## Recommended Fix
<recommended fix>
## Action
<action from Remediation Priority table>
---
*Source: <report file path>*
```
**Labels per issue**:
- Always add report-type label: `yds-software-evaluation` or `security-audit`
- Always add priority label: `P0`, `P1`, `P2`, or `P3`
- Security findings: also add severity label (`critical`, `high`, `medium`, `low`)
Check exit code after each `gh issue create`. If non-zero, report the error and continue with remaining tasks.
---
### Phase 7: Summary
After all issues are created, output:
```
Registered N / M issues:
#<number> <title> <URL>
#<number> <title> <URL>
...
Skipped: <any that failed with reason>
```
---
## Quality Gate
- [ ] Report file exists and type is correctly detected
- [ ] All extracted tasks shown to user before any issue is created
- [ ] User selection confirmed
- [ ] Duplicate detection run against existing open issues
- [ ] Duplicate conflicts resolved by user before creation
- [ ] Labels verified / created before issue creation
- [ ] Each `gh issue create` exit code checked
- [ ] Final summary lists all created issue URLs