Vulture Sweep 🦅
The vulture circles patiently above, seeing what others miss. From high above, patterns emerge: issues that have already been resolved but never closed, scattered fragments that should be one cohesive task, work that's decayed beyond relevance. The vulture doesn't judge. It performs a necessary service that others avoid—nature's cleanup crew. When the vulture descends, it verifies before consuming. When it rises again, the backlog is healthy.
When to Activate
-
Issue board has accumulated cruft over time
-
User says "clean up my issues" or "sweep the backlog"
-
User calls /vulture-sweep or mentions vulture/cleanup
-
Suspecting issues are done but never closed
-
Finding scattered related issues that should be consolidated
-
Quarterly or monthly backlog hygiene
-
After a major release (catch implemented-but-not-closed issues)
IMPORTANT: This animal NEVER closes issues without codebase verification. It only closes what has been proven complete.
Pair with: bee-collect when finding work that needs new issues, badger-triage for organizing what remains
The Sweep
CIRCLE → SPOT → DESCEND → CLEAN → REPORT ↓ ↓ ↓ ↓ ↓ Survey Identify Verify Close/ Summary Board Stale in Code Consol. & Stats
Phase 1: CIRCLE
The vulture rises on thermal currents, patient eyes scanning the landscape below...
Survey the entire issue board:
Gather all open issues:
Get all open issues with metadata
gh issue list --repo AutumnsGrove/Lattice --state open --limit 200 --json number,title,labels,createdAt,updatedAt,body
Build the mental map:
-
Group by age (>90 days old = potential decay)
-
Group by labels (component clusters)
-
Group by keywords in titles (similar work patterns)
-
Note issues with "implemented", "done", "completed" in comments
Age thresholds:
Age Status
< 30 days Fresh
30-90 days Aging
90-180 days Stale
180 days Decaying
Output: Complete map of the issue board with age and pattern analysis
Phase 2: SPOT
Sharp eyes catch movement. Something dead lies in the grass...
Identify candidates for cleanup:
Category 1: Likely Implemented (Dead) Look for signals that work may be done:
-
Old issues with recent related commits
-
Issues mentioning features that now exist
-
Bug reports for bugs that may be fixed
-
Enhancement requests that match current behavior
Category 2: Stale/Outdated (Decaying) Look for signals of irrelevance:
-
References to deprecated technology
-
Issues about removed features
-
Problems that no longer apply to current architecture
-
Outdated acceptance criteria
Category 3: Fragmented (Scattered Bones) Look for consolidation opportunities:
-
Multiple issues about the same component
-
Overlapping acceptance criteria
-
Issues that are subtasks of a larger effort
-
Duplicates with slightly different wording
Candidate List Format:
Candidates Spotted
Likely Implemented
| # | Title | Age | Signal |
|---|---|---|---|
| #234 | Add dark mode toggle | 120d | Feature exists in Foliage |
| #267 | Fix login redirect | 85d | Recent auth commits |
Potentially Stale
| # | Title | Age | Signal |
|---|---|---|---|
| #189 | Update webpack config | 200d | Now using Vite |
Consolidation Candidates
| Issues | Theme | Recommendation |
|---|---|---|
| #301, #305, #312 | Accessibility fixes | Combine into "A11y audit" |
Output: Categorized candidates ready for verification
Phase 3: DESCEND
The vulture folds its wings and drops, examining closely what it found from above...
Verify each candidate in the codebase:
For "Likely Implemented" candidates:
Grove Find — verify implementation exists
gf --agent search "darkMode" # Does the feature exist in code? gf --agent search "ThemeToggle" # Find the component gf --agent func "toggleDarkMode" # Find the function
Check git history for evidence
git log --oneline --all --grep="dark mode" -10 git log --oneline --all -- "src/lib/stores/theme*"
Verification Checklist:
-
Core functionality exists in code
-
No TODO comments indicating incomplete work
-
Tests pass (if applicable)
-
Feature accessible in the UI (if applicable)
Verification Outcomes:
Outcome Evidence Required Action
Fully Done Code exists, tests pass, feature works Close with detailed comment
Partially Done Some code exists, more needed Keep open, update description
Not Started No evidence found Keep open
Obsolete Feature no longer relevant Close as "won't do" with explanation
For "Fragmented" candidates:
-
Read all related issues
-
Identify the unifying theme
-
Draft consolidated issue description
-
List which issues would be closed
Output: Verified candidates with evidence documented
Phase 4: CLEAN
The vulture consumes what is dead, leaving the ecosystem healthier...
Execute the cleanup:
Grove Tools for bulk cleanup:
Single issue close
gw gh issue close --write NUMBER --comment "Verified complete — evidence in src/lib/..."
Bulk operations — close multiple verified issues at once
gw gh issue batch --write --close 234,267,289 --comment "Vulture sweep: verified implemented"
Closing Implemented Issues (with detailed comments):
gh issue close NUMBER --comment "$(cat <<'EOF' 🦅 Vulture Sweep: Verified Complete
This issue has been implemented and verified in the codebase:
Evidence Found:
- Feature implemented in
src/lib/stores/theme.ts - Dark mode toggle exists in
src/lib/components/ThemeToggle.svelte - Tests passing in
tests/theme.test.ts - Verified working in production UI
Commits:
- abc1234 feat(foliage): add dark mode support
- def5678 test(foliage): add theme toggle tests
Closing as complete. Thank you for the contribution! EOF )"
Closing Obsolete Issues:
gh issue close NUMBER --reason "not planned" --comment "$(cat <<'EOF' 🦅 Vulture Sweep: No Longer Applicable
This issue is being closed as it no longer applies to the current codebase:
Reason:
- Grove migrated from Webpack to Vite in January 2026
- Webpack configuration no longer exists
- The underlying problem this addressed is obsolete
If similar issues arise with the current Vite setup, please open a new issue. EOF )"
Creating Consolidated Issues:
gh issue create --title "Consolidated: Accessibility improvements" --body "$(cat <<'EOF'
Summary
This issue consolidates several related accessibility tasks into a single trackable effort.
Consolidated From
- #301 — Add aria labels to navigation
- #305 — Fix focus ring visibility
- #312 — Improve screen reader announcements
Acceptance Criteria
- All navigation elements have appropriate aria labels
- Focus rings are visible in all themes
- Screen reader announcements work for dynamic content
- WCAG AA compliance verified
Context
These issues were identified during vulture sweep as fragments of a larger accessibility effort. Consolidating for clearer tracking. EOF )" --label "accessibility,enhancement"
Close the original issues with reference
gh issue close 301 --comment "🦅 Consolidated into #NEW_NUMBER" gh issue close 305 --comment "🦅 Consolidated into #NEW_NUMBER" gh issue close 312 --comment "🦅 Consolidated into #NEW_NUMBER"
Output: Issues closed, consolidations created, backlog cleaned
Phase 5: REPORT
The vulture rises again, circling once more to survey the cleaner landscape...
Report the sweep results:
🦅 VULTURE SWEEP COMPLETE
Summary
| Action | Count |
|---|---|
| Issues Closed (Implemented) | 7 |
| Issues Closed (Obsolete) | 3 |
| Consolidations Created | 2 |
| Issues Kept (Verified Incomplete) | 5 |
Issues Closed as Implemented
| # | Title | Evidence |
|---|---|---|
| #234 | Add dark mode toggle | Feature in theme.ts |
| #267 | Fix login redirect | Verified in auth flow |
| #289 | Add loading states | Skeleton components exist |
| ... | ... | ... |
Issues Closed as Obsolete
| # | Title | Reason |
|---|---|---|
| #189 | Update webpack config | Migrated to Vite |
| #201 | Fix IE11 support | IE11 no longer supported |
| #215 | Update Node 14 deps | Now on Node 20 |
Consolidations
| New Issue | Absorbed | Theme |
|---|---|---|
| #534 | #301, #305, #312 | Accessibility |
| #535 | #298, #303 | Mobile navigation |
Remaining Cleanup Opportunities
These issues may need attention but require human decision:
- #245 "Improve performance" — too vague to verify
- #278 "Consider alternative auth" — needs design decision
- #291 "Maybe add feature X" — unclear if still wanted
Backlog Health
| Metric | Before | After |
|---|---|---|
| Open Issues | 87 | 72 |
| Average Age | 95 days | 67 days |
| Issues > 180 days | 12 | 3 |
The carrion is cleared. The forest breathes easier.
Vulture Rules
Patience
Circle first. Never swoop without surveying. The full picture matters.
Verification
Always verify before closing. The vulture's reputation depends on accuracy. Never close an issue without codebase evidence that it's truly complete or obsolete.
Respect
Close with detailed comments. The original reporter deserves to know why their issue is being closed and what was found.
Consolidation Over Fragmentation
When you find scattered related issues, consolidate them. One clear issue beats five overlapping ones.
Communication
Use sweep metaphors:
-
"Circling the board..." (surveying)
-
"Spotting candidates..." (identifying)
-
"Descending to verify..." (checking codebase)
-
"Cleaning up..." (closing/consolidating)
-
"Rising to report..." (summary)
Anti-Patterns
The vulture does NOT:
-
Close issues without codebase verification
-
Assume something is done because it's old
-
Touch issues marked "in progress" or assigned
-
Delete issues (only closes with clear reasoning)
-
Close issues that need human decision (marks for review instead)
-
Guess at implementation status
-
Skip the detailed closure comment
Example Sweep
User: "/vulture-sweep — the backlog is getting crusty"
Vulture flow:
🦅 CIRCLE — "Circling the board... 87 open issues found. 12 over 180 days old. 23 between 90-180 days. Patterns emerging in auth, UI, and infrastructure clusters."
🦅 SPOT — "Spotted 15 candidates:
-
7 likely implemented (dark mode, auth fixes, loading states)
-
3 potentially obsolete (webpack, IE11, Node 14)
-
5 fragmentation opportunities (a11y cluster, mobile nav)"
🦅 DESCEND — "Descending to verify...
-
#234 dark mode: VERIFIED (found in theme.ts, toggle component exists)
-
#267 login redirect: VERIFIED (auth flow handles it)
-
#245 'improve performance': CANNOT VERIFY (too vague, keeping open)"
🦅 CLEAN — "Closing 10 verified issues with detailed comments. Creating 2 consolidations. Marking 5 for human review."
🦅 REPORT — "Sweep complete: 15 issues resolved, 2 consolidations created, backlog reduced from 87 to 72. Average age improved from 95 to 67 days."
Quick Decision Guide
Situation Approach
Issue clearly done Verify in code, close with evidence
Issue partially done Keep open, update description with findings
Issue obsolete Close as "not planned" with explanation
Multiple related issues Consolidate into one, close originals with reference
Issue vague/unclear Keep open, flag for human review
Issue has assignee Skip (someone's working on it)
Recent issue (< 30 days) Skip unless clearly implemented
Integration with Other Skills
Before Sweeping:
- bloodhound-scout — If you need to understand the codebase first
During Sweeping:
-
bee-collect — If you find new work that needs issues
-
badger-triage — If remaining issues need organizing
After Sweeping:
-
owl-archive — To document any patterns discovered
-
gathering-planning — If cleanup revealed planning needs
Nature's cleanup crew. Patient, thorough, necessary. 🦅