Receber por email
← Voltar para o catálogo

update

Audit open GitHub issues for staleness, orphaned blockers, missing labels, codebase drift, and already-implemented features. Categorizes issues into close-candidates, update-needed, needs-triage, stale, and healthy. Supports bulk and individual remediation via interactive approval. Triggers: audit issues, clean up issues, update stale issues, issue hygiene, backlog cleanup, prune issues.

10estrelas
Atualizado há 2 meses

Ver no GitHub ↗ Licença: MIT

Como adicionar

/plugin marketplace add rube-de/cc-skills

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/update-rube-de/svg)](https://www.skillteca.com.br/skills/update-rube-de)

Skills relacionadas

Ver todas de Desenvolvimento →

Alerta por categoria

Receba novas skills de Desenvolvimento toda segunda

1 email curto, só com as skills novas de Desenvolvimento. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

Update: Issue Audit & Cleanup

Audit open GitHub issues for staleness, drift, and hygiene problems. Categorize findings and execute approved remediations.

Workflow

1. Auth Check → 2. Detect Repo → 3. Fetch Issues → 4. Pass 1: Metadata Audit
→ 5. Pass 2: Codebase-Aware Audit → 6. Categorize → 7. Present Report
→ 8. Interactive Remediation → 9. Execute Actions → 10. Summary

Step 1: Verify GitHub Auth

gh auth status

On failure: Stop and tell the user to run gh auth login.

Step 2: Detect Repository

gh repo view --json nameWithOwner -q .nameWithOwner

On failure: Ask the user for the target repository (owner/repo).

Step 3: Fetch Open Issues

gh issue list --state open --limit 100 --json number,title,body,labels,assignees,milestone,createdAt,updatedAt,author

Edge case — no open issues: Report "No open issues to audit" and stop.

Edge case — 100+ issues: Warn the user that results are capped at 100. Suggest filtering by label or milestone for larger backlogs.

Step 4: Pass 1 — Metadata Audit

Check each issue for these problems:

| Check | Condition | Severity | |-------|-----------|----------| | Stale | No updates in 30+ days | Medium | | Ancient | No updates in 90+ days | High | | Orphaned blocker | References Blocked by: #<number> where the referenced issue is closed (see batch verification note below) | Medium | | Completed sub-tasks | All - [x] checkboxes checked but issue still open | High | | Missing labels | No type label (bug, enhancement, etc.) | Low | | Missing priority | No priority label (P0-P3) | Low | | Abandoned assignment | Assigned but no updates in 14+ days | Medium |

For each issue, collect all matching problems into a findings list.

Batch verification for orphaned blockers: Step 3 already fetches all open issues. Any blocker reference (Blocked by: #<number>) where the number is absent from the open set is treated as resolved — no extra API call needed. Only use gh issue view for edge cases where you need to distinguish "closed" from "never existed".

Step 5: Pass 2 — Codebase-Aware Audit

For issues that reference specific files or features, cross-check against the codebase:

File Drift

For issues whose body contains file paths (e.g., src/auth/login.ts):

  1. Extract file paths from issue body
  2. Determine intent from surrounding context — paths under headings like "Files to Create" or prefixed with "create", "add", "new" are expected to not yet exist; skip these
  3. Use Glob to check if remaining paths still exist
  4. If files are missing/moved, flag as file-drift

Already Implemented

For feature requests and bug fixes:

  1. Extract key implementation details from the issue body (function names, component names, patterns)
  2. Use Grep to search for those patterns in the codebase
  3. If the feature appears to already exist, flag as possibly-implemented

Related Branches and PRs

gh pr list --state all --search "ISSUE_NUMBER" --limit 5 --json number,title,state,mergedAt

Check if:

  • A merged PR references this issue → flag as has-merged-pr (strong close candidate)
  • An open PR references this issue → flag as has-open-pr (in progress, not stale)

Step 6: Categorize Issues

Sort issues into five categories based on findings:

| Category | Criteria | Suggested Action | |----------|----------|------------------| | Close Candidates | Has merged PR, all checkboxes done, or flagged as possibly-implemented | Close with comment | | Update Needed | Orphaned blockers, file drift, stale assignment | Edit issue metadata | | Needs Triage | Missing labels, missing priority, no clear scope | Add labels, clarify scope | | Stale | 30-90 days inactive, no PR activity | Ping assignee or add stale label | | Healthy | Recently active, properly labeled, has assignee or clear owner | No action needed |

Step 7: Present Report

Show a structured report by category:

## Issue Audit Report

### Close Candidates (3 issues)
| Issue | Title | Reason |
|-------|-------|--------|
| #12 | Add user avatars | Merged PR #45, all acceptance criteria met |
| #18 | Fix login redirect | Feature already implemented (found in src/auth/redirect.ts) |
| #23 | Update deps | Ancient (142 days), no activity |

### Update Needed (2 issues)
| Issue | Title | Problem | Fix |
|-------|-------|---------|-----|
| #31 | Refactor API layer | Blocked by #12 (closed) | Remove stale blocker reference |
| #35 | Add caching | References src/old/cache.ts (deleted) | Update file paths |

### Needs Triage (4 issues)
| Issue | Title | Missing |
|-------|-------|---------|
| #40 | Something about auth | No type label, no priority |
| #41 | Performance issue | No priority label |
| ... | ... | ... |

### Stale (2 issues)
| Issue | Title | Last Activity | Assignee |
|-------|-------|---------------|----------|
| #28 | Add dark mode | 45 days ago | @alice |
| #33 | Improve tests | 38 days ago | unassigned |

### Healthy (8 issues)
✓ 8 issues are properly maintained — no action needed.

### Summary
- 3 close candidates
- 2 issues need metadata updates
- 4 issues need triage
- 2 stale issues
- 8 healthy issues

Step 8: Interactive Remediation

For each non-healthy category, use AskUserQuestion to get approval:

Close Candidates:

Question: "How should I handle close candidates?"
Options:
  - Close all 3 with a comment
  - Let me review each one individually
  - Skip — don't close any

Update Needed:

Question: "Should I fix the metadata issues?"
Options:
  - Fix all automatically
  - Let me review each fix
  - Skip — I'll handle these manually

Needs Triage:

Question: "Should I add missing labels?"
Options:
  - Add suggested labels to all
  - Let me review each suggestion
  - Skip

Stale Issues:

Question: "How should I handle stale issues?"
Options:
  - Add 'stale' label to all
  - Comment pinging assignees
  - Skip

For "review each" options, iterate through issues one at a time with per-issue AskUserQuestion.

Step 9: Execute Approved Actions

Run approved actions using gh CLI:

Closing issues:

gh issue close ISSUE_NUMBER --comment "Closing: [reason]. Identified by /pm:update audit."

Editing issue metadata:

gh issue edit ISSUE_NUMBER --add-label "label-name"
gh issue edit ISSUE_NUMBER --remove-assignee "username"

Removing stale blocker references:

gh issue comment ISSUE_NUMBER --body "Removed stale blocker reference to CLOSED_ISSUE_NUMBER (now closed). Issue is unblocked."

Pinging stale assignees:

gh issue comment ISSUE_NUMBER --body "@username — This issue hasn't been updated in [X] days. Are you still working on it? If not, I can unassign so someone else can pick it up."

Step 10: Print Summary

After all actions complete, print a final summary:

## Audit Complete

| Action | Count | Issues |
|--------|-------|--------|
| Closed | 3 | #12, #18, #23 |
| Labels added | 4 | #40, #41, #42, #43 |
| Blockers cleaned | 1 | #31 |
| Stale pings sent | 2 | #28, #33 |
| Skipped | 0 | — |

Total: 10 actions taken across 10 issues.

Suggest: "Run /pm:next to see what to work on now that the backlog is cleaned up."

Compartilhar X LinkedIn