A funeral for your abandoned pull requests. Cause of death analysis. RIP to every PR that never got merged.
npx pr-graveyard
No install. No config. Just open a terminal in any git repo.
Fetches all your closed-without-merge pull requests via the gh CLI and delivers a brutally honest autopsy. Every dead PR gets:
- A cause of death (8 distinct causes based on PR metadata + title patterns)
- Its lifespan (born/died dates + days)
- Last words (the epitaph it deserved)
- Graveyard statistics (survival rate, fatale month, most common killer)
- A personal verdict on what your graveyard says about you as a developer
Falls back to analyzing stale local git branches if no GitHub access is available.
⚰️ PR Graveyard
──────────────────────────────────────────────────
Repository: my-app | Author: NickCirv
Total PRs: 94 | Merged: 71 | Buried here: 23
🪦 IN LOVING MEMORY 🪦
#47 — "feat: add AI-powered recommendations"
Born: Jan 3, 2025 | Died: Mar 15, 2025 (71 days) | +1,847/-203 lines
Cause of Death: Scope Creep Death — +1847/-203 lines, never finished
Last words: "I'll just add one more thing..."
Author: @nickcirv
#31 — "WIP: refactor everything"
Born: Nov 12, 2024 | Died: Dec 1, 2024 (19 days)
Cause of Death: The Eternal WIP — title literally said WIP
Last words: "I'll finish it this weekend, I promise"
Author: @nickcirv
#28 — "fix: hopefully this works"
Born: Oct 8, 2024 | Died: Oct 8, 2024 (1 day)
Cause of Death: Hasty Burial — opened and closed same day
Last words: "actually, never mind"
Author: @nickcirv
#19 — "chore: clean up legacy code"
Born: Aug 22, 2024 | Died: Sep 14, 2024 (23 days)
Cause of Death: Silent Abandonment — no comments, no activity, just gone
Last words: "..."
Author: @nickcirv
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 Graveyard Statistics:
Average lifespan: 23 days
Longest suffering: 134 days (#12, "feat: complete payment integration")
Most common cause: Silent Abandonment (39%)
Survival Rate: 75.5% (71/94 merged)
Your PR Mortality Rate: 24.5%
Most fatal month: March 2025 (5 burials)
🕯️ Epitaphs by cause:
████████████░░░░ 9 Silent Abandonment (39%)
████████░░░░░░░░ 6 Scope Creep Death (26%)
█████░░░░░░░░░░░ 4 The Eternal WIP (17%)
███░░░░░░░░░░░░░ 2 Death by Review (9%)
██░░░░░░░░░░░░░░ 1 Hasty Burial (4%)
██░░░░░░░░░░░░░░ 1 Burnout Casualty (4%)
💡 What your graveyard says about you:
→ You disappear from your own PRs. Consider smaller, time-boxed tasks.
May they find the merge they never knew in this life.
| Cause | Trigger |
|---|---|
| Hasty Burial | Opened and closed the same day |
| The Eternal WIP | Title contained WIP, draft, DNM, etc. |
| Scope Creep Death | 1000+ lines changed, never finished |
| Death by Review | 5+ comments, still didn't make it |
| The Feature That Wasn't | 0 comments, closed quietly within a week |
| Burnout Casualty | Open for 60+ days, sudden close |
| Merge Conflict Victim | 21+ days old, large diff — conflicts were inevitable |
| Silent Abandonment | No comments, no activity, just gone |
| Existential Dread | Nobody knows. Nobody ever will. |
npx pr-graveyard # all closed/abandoned PRs npx pr-graveyard --mine # only your PRs npx pr-graveyard --epitaph # just names and causes, no details npx pr-graveyard --worst 5 # top 5 most tragic deaths by lifespan npx pr-graveyard --local # analyze stale local branches instead npx pr-graveyard --help # show usage
- Node.js 18+
ghCLI (GitHub CLI) — authenticated (gh auth login)- Works in any git repository with a GitHub remote
- Falls back to local branch analysis if
ghis unavailable or unauthenticated
Pure Node.js ES modules. Only built-in modules: child_process, fs, os, https. No npm install needed.
MIT — NickCirv