Issue triage: audit open issues, categorize, detect duplicates, cross-ref PRs, risk assessment, post comments. Args: "all" for deep analysis of all, issue numbers to focus (e.g. "42 57"), "en"/"fr" for language, no arg = audit only in French.
| Skill | Usage | Output |
|---|---|---|
/issue-triage | Trier, analyser, commenter les issues | Tableaux d'action + deep analysis + commentaires postés |
/repo-recap | Récap général pour partager avec l'équipe | Résumé Markdown (PRs + issues + releases) |
Déclencheurs :
/issue-triage ou /issue-triage all ou /issue-triage 42 57en ou english → tableaux et résumé en anglaisfr, french, ou pas d'argument → français (défaut)Workflow en 3 phases : audit automatique → deep analysis opt-in → commentaires avec validation obligatoire.
git rev-parse --is-inside-work-tree
gh auth status
Si l'un échoue, stop et expliquer ce qui manque.
# Identité du repo
gh repo view --json nameWithOwner -q .nameWithOwner
# Issues ouvertes avec métadonnées complètes
gh issue list --state open --limit 100 \
--json number,title,author,createdAt,updatedAt,labels,assignees,body,comments
# PRs ouvertes (pour cross-référence)
gh pr list --state open --limit 50 --json number,title,body
# Issues fermées récemment (pour détection doublons)
gh issue list --state closed --limit 20 \
--json number,title,labels,closedAt
# Collaborateurs (pour protéger les issues des mainteneurs)
gh api "repos/{owner}/{repo}/collaborators" --jq '.[].login'
Fallback collaborateurs : si gh api .../collaborators échoue (403/404) :
gh pr list --state merged --limit 10 --json author --jq '.[].author.login' | sort -u
Si toujours ambigu, demander à l'utilisateur via AskUserQuestion.
Note : author est un objet {login: "..."} — toujours extraire .author.login.
1. Catégorisation (labels existants > inférence titre/body) :
crash, error, fail, broken, regression, wrong, unexpectedadd, implement, support, new, feat:improve, optimize, better, enhance, refactorhow, why, help, unclear, docs, documentation2. Cross-ref PRs :
body de chaque PR ouverte pour fixes #N, closes #N, resolves #N (case-insensitive, regex)issue_number -> [PR numbers]3. Détection doublons :
bug:, feat:, [bug], [feature], etc.)4. Classification risque :
CVE, vulnerability, injection, auth bypass, security, exploit, unsafe, credentials, leak, RCE, XSSbreaking change, migration, deprecation, remove API, breaking, incompatible5. Staleness :
30j sans activité (updatedAt) → Stale
90j sans activité → Very Stale
6. Recommandations d'action :
Accept & Prioritize : issue claire, reproducible, dans scopeLabel needed : issue sans labelComment needed : info manquante, body insuffisantLinked to PR : une PR ouverte référence cette issueDuplicate candidate : candidat doublon identifié (préciser avec #N)Close candidate : stale + aucune activité récente, ou hors scope (jamais si auteur est collaborateur)PR merged → close : PR liée est mergée, issue encore ouverte## Issues ouvertes ({count})
### Critiques (risque rouge)
| # | Titre | Auteur | Âge | Labels | Action |
| - | ----- | ------ | --- | ------ | ------ |
### Liées à une PR
| # | Titre | Auteur | PR(s) liée(s) | Status PR | Action |
| - | ----- | ------ | ------------- | --------- | ------ |
### Actives
| # | Titre | Auteur | Catégorie | Âge | Labels | Action |
| - | ----- | ------ | --------- | --- | ------ | ------ |
### Doublons candidats
| # | Titre | Doublon de | Similarité | Action |
| - | ----- | ---------- | ---------- | ------ |
### Stale
| # | Titre | Auteur | Dernière activité | Action |
| - | ----- | ------ | ----------------- | ------ |
### Résumé
- Total : {N} issues ouvertes
- Critiques : {N} (risque sécurité ou breaking)
- Liées à PR : {N}
- Doublons candidats : {N}
- Stale (>30j) : {N} | Very Stale (>90j) : {N}
- Sans labels : {N}
- Quick wins (à fermer ou labeler rapidement) : {liste}
0 issues → afficher Aucune issue ouverte. et terminer.
Note : Âge = jours depuis createdAt, format {N}j. Si >30j, afficher en gras.
Après affichage du tableau de triage, copier dans le presse-papier :
# Cross-platform clipboard
clip() {
if command -v pbcopy &>/dev/null; then pbcopy
elif command -v xclip &>/dev/null; then xclip -selection clipboard
elif command -v wl-copy &>/dev/null; then wl-copy
else cat
fi
}
clip <<'EOF'
{tableau de triage complet}
EOF
Confirmer : Tableau copié dans le presse-papier. (FR) / Triage table copied to clipboard. (EN)
Si argument passé :
"all" → toutes les issues ouvertes"42 57") → uniquement ces issuesAskUserQuestionSi pas d'argument, afficher :