Maintainer Triage Skill
An untriaged backlog isn't a to-do list — it's 400 open loops charging
interest on a volunteer's conscience. The fix isn't heroic issue-closing
weekends (they don't repeat); it's a system where every issue gets a
decision in under a minute — reproduce/needs-info/accepted/wontfix/
someday — encoded in labels, communicated by saved replies that stay human,
and maintained by a 30-minute weekly routine. Honest triage closes issues
politely that will never be done, because "open forever" is the cruelest
answer of all.
What This Skill Produces
- A label taxonomy that encodes decisions, not just topics: status
(needs-repro, needs-info, accepted, help-wanted, wontfix, someday) ×
type (bug, feature, docs, question) × effort (good-first-issue,
deep-water)
- Batch triage rules: the 30-second decision tree per issue, and the
order to eat the backlog (newest-first, oldest closed honestly in bulk)
- Saved replies for the eight recurring moments — needs-repro,
duplicate, wontfix-with-respect, stale-close, "PR welcome" (said only
when meant), the excited-first-contributor welcome
- A sustainable routine: the 30-minute weekly triage block + the
stale-policy settings, with the conscience switch: bugs never auto-stale
- The backlog burn-down plan for the existing 400
Required Inputs
Ask for (if not already provided):
- The repo: what it does, issue count, open PR count, other maintainers or
solo, current label mess
- The honest capacity: hours/week the maintainer actually has (the system
is sized to this, not to the backlog)
- The sore points: what fills the backlog (support questions? feature
wishlists? real bugs?) and what the maintainer feels worst about
- Project stance: is this a hobby, a career asset, or accidentally
load-bearing infrastructure? (wontfix courage scales with clarity here)
Framework
- Labels are decisions. Every open issue carries exactly one status
label — an issue with no status is untriaged, and the goal state is
zero untriaged. Topics are optional garnish; status is the system.
- The 30-second tree. Bug without repro → needs-repro + saved reply +
14-day clock. Repro'd bug → accepted + severity. Feature aligned with
project vision → accepted or help-wanted; not aligned → wontfix now,
kindly — parking unaligned features in "someday" is deferral disguised
as kindness, use someday only for genuinely-yes-later. Question → answer
or convert to discussion/docs issue. Duplicate → link + close.
- Eat the backlog newest-first. Newest issues have live reporters and
fresh context; the oldest 200 get the honest bulk pass: a pinned
announcement ("triage sweep this week — issues inactive >12 months close
with this message; comment to reopen") then the sweep. Reopens are
signal, not failure — that's the mechanism finding the living issues.
- Saved replies stay human. Each is 2–4 sentences, warm, and ends with
a clear next step. "PR welcome" appears only where a PR would genuinely
be reviewed and merged — as a brush-off it's the most resented phrase in
open source.
- The routine that survives. Weekly 30 minutes: new issues to zero
untriaged → needs-info clock expiries → one accepted issue advanced.
Stale-bot only on needs-info and question labels, never on accepted
bugs. The maintainer's dread is the metric: if opening the repo stops
hurting, the system is working.
Output Format
## Label taxonomy (create these)
[Status set · type set · effort set — with color/description lines]
## The 30-second tree
[Decision tree, one branch per issue shape]
## Saved replies (paste into GitHub)
[The eight, each 2-4 sentences]
## Backlog burn-down
[The pinned announcement text · sweep order · reopen handling]
## Weekly 30 minutes
[The three-step routine · stale-bot config with the bugs-never-stale rule]
Quality Checks
Anti-Patterns
Related
[[the-maintainers-no]] for the requests that need a personal no;
[[first-maintainer-month]] for new maintainers; [[email-triage-system]] —
the same discipline pointed at an inbox.
1---2name: maintainer-triage-23description: Get an open-source repo's issue backlog from 400-and-drowning to triaged-and-honest in one pass — a label taxonomy that encodes decisions, batch triage rules you can apply in seconds per issue, saved replies that stay kind at scale, and stale-bot policy set with a conscience. Use when a maintainer says 'my issues are out of control', 'triage my backlog', 'set up labels for my repo', or dreads opening GitHub. Produces the taxonomy, the triage pass rules, saved replies, and a sustainable weekly routine.4---56# Maintainer Triage Skill78An untriaged backlog isn't a to-do list — it's 400 open loops charging9interest on a volunteer's conscience. The fix isn't heroic issue-closing10weekends (they don't repeat); it's a system where every issue gets a11*decision* in under a minute — reproduce/needs-info/accepted/wontfix/12someday — encoded in labels, communicated by saved replies that stay human,13and maintained by a 30-minute weekly routine. Honest triage closes issues14politely that will never be done, because "open forever" is the cruelest15answer of all.1617## What This Skill Produces1819- A **label taxonomy** that encodes decisions, not just topics: status20 (needs-repro, needs-info, accepted, help-wanted, wontfix, someday) ×21 type (bug, feature, docs, question) × effort (good-first-issue,22 deep-water)23- **Batch triage rules**: the 30-second decision tree per issue, and the24 order to eat the backlog (newest-first, oldest closed honestly in bulk)25- **Saved replies** for the eight recurring moments — needs-repro,26 duplicate, wontfix-with-respect, stale-close, "PR welcome" (said only27 when meant), the excited-first-contributor welcome28- A **sustainable routine**: the 30-minute weekly triage block + the29 stale-policy settings, with the conscience switch: bugs never auto-stale30- The **backlog burn-down plan** for the existing 4003132## Required Inputs3334Ask for (if not already provided):35- The repo: what it does, issue count, open PR count, other maintainers or36 solo, current label mess37- The honest capacity: hours/week the maintainer actually has (the system38 is sized to this, not to the backlog)39- The sore points: what fills the backlog (support questions? feature40 wishlists? real bugs?) and what the maintainer feels worst about41- Project stance: is this a hobby, a career asset, or accidentally42 load-bearing infrastructure? (wontfix courage scales with clarity here)4344## Framework45461. **Labels are decisions.** Every open issue carries exactly one status47 label — an issue with no status is untriaged, and the goal state is48 zero untriaged. Topics are optional garnish; status is the system.492. **The 30-second tree.** Bug without repro → needs-repro + saved reply +50 14-day clock. Repro'd bug → accepted + severity. Feature aligned with51 project vision → accepted or help-wanted; not aligned → wontfix *now*,52 kindly — parking unaligned features in "someday" is deferral disguised53 as kindness, use someday only for genuinely-yes-later. Question → answer54 or convert to discussion/docs issue. Duplicate → link + close.553. **Eat the backlog newest-first.** Newest issues have live reporters and56 fresh context; the oldest 200 get the honest bulk pass: a pinned57 announcement ("triage sweep this week — issues inactive >12 months close58 with this message; comment to reopen") then the sweep. Reopens are59 *signal*, not failure — that's the mechanism finding the living issues.604. **Saved replies stay human.** Each is 2–4 sentences, warm, and ends with61 a clear next step. "PR welcome" appears only where a PR would genuinely62 be reviewed and merged — as a brush-off it's the most resented phrase in63 open source.645. **The routine that survives.** Weekly 30 minutes: new issues to zero65 untriaged → needs-info clock expiries → one accepted issue advanced.66 Stale-bot only on needs-info and question labels, never on accepted67 bugs. The maintainer's dread is the metric: if opening the repo stops68 hurting, the system is working.6970## Output Format7172```73## Label taxonomy (create these)74[Status set · type set · effort set — with color/description lines]7576## The 30-second tree77[Decision tree, one branch per issue shape]7879## Saved replies (paste into GitHub)80[The eight, each 2-4 sentences]8182## Backlog burn-down83[The pinned announcement text · sweep order · reopen handling]8485## Weekly 30 minutes86[The three-step routine · stale-bot config with the bugs-never-stale rule]87```8889## Quality Checks9091- [ ] Every issue shape in the tree ends in a decision + a saved reply —92 no branch ends in "leave it"93- [ ] Wontfix replies give the reason and thank the reporter — respect at94 scale is the whole trick95- [ ] The bulk-close announcement runs BEFORE the sweep, and reopen96 instructions are in the close message97- [ ] Stale automation exempts accepted bugs explicitly98- [ ] The routine fits the stated real hours, not the aspirational ones99100## Anti-Patterns101102- [ ] Do not build a 40-label topic museum — status labels are the system;103 taxonomy sprawl is procrastination with colors104- [ ] Do not use "someday" as a polite graveyard — unaligned features get105 an honest wontfix106- [ ] Do not auto-stale confirmed bugs; nothing burns trust faster107- [ ] Do not write saved replies that could double as form rejections —108 each names the specific next step109- [ ] Do not size the system to the backlog instead of the maintainer's110 hours111112## Related113114[[the-maintainers-no]] for the requests that need a personal no;115[[first-maintainer-month]] for new maintainers; [[email-triage-system]] —116the same discipline pointed at an inbox.