github-issue

Par divinevideo · divine-mobile

Créez des tickets GitHub bien structurés selon la hiérarchie Epic > Feature > Task/Bug. Utilise les types de tickets GitHub (et non les labels) ainsi que les relations pour connecter les tickets liés. Invoquer avec /github-issue.

npx skills add https://github.com/divinevideo/divine-mobile --skill github-issue

Compétence Création de Problèmes GitHub

Objectif

Aider à créer des problèmes GitHub bien structurés qui suivent la hiérarchie du projet, les conventions et les modèles existants de .github/ISSUE_TEMPLATE/.

Hiérarchie des Problèmes

Epic (grande initiative, plusieurs fonctionnalités)
  └── Feature (capacité visible pour l'utilisateur, plusieurs tâches)
        └── Task (unité unique de travail)
        └── Bug (défaut à corriger)

Quand utiliser chaque type

Type Préfixe du titre Utiliser quand
Epic epic: Grande initiative s'étendant sur des semaines/mois
Feature feat: Nouvelle capacité visible pour l'utilisateur
Task task: Unité unique de travail d'implémentation
Bug fix: Quelque chose ne fonctionne pas / ne fonctionne pas comme prévu

Modèles de Problèmes

Modèle Bug (correspond à .github/ISSUE_TEMPLATE/bug_report.yaml)

Format du titre: fix: <description>

## Résumé
[Une phrase sur ce qui ne fonctionne pas]

## Environnement
- Version de l'app : [ex. 1.2.3]
- Appareil : [ex. iPhone 14 Pro, iOS 17.1]
- Réseau : [WiFi / Cellulaire]

## Étapes pour reproduire
1. Aller à '...'
2. Cliquer sur '...'
3. Voir l'erreur

## Résultat réel
[Ce qui s'est réellement passé]

## Résultat attendu
[Ce que vous vous attendiez à voir]

## Régression ?
[Oui / Non / Inconnu - Cela fonctionnait-il dans une version précédente ?]

## Preuves
[Captures d'écran, enregistrements d'écran, logs, rapports de crash]

Modèle Feature (correspond à .github/ISSUE_TEMPLATE/feature_request.yaml)

Format du titre: feat: <description>

## Que souhaiteriez-vous ?
[Décrivez la fonctionnalité ou l'amélioration]

## Comment cela vous serait-il utile ?
[Quel problème cela résout-il ou qu'est-ce que cela rend plus facile ?]

## Quand utiliseriez-vous cela ?
[Décrivez une situation où vous auriez besoin de cette fonctionnalité]

## Autre chose ?
[Captures d'écran, maquettes, exemples d'autres apps]

Modèle Task

Format du titre: task: <description>

## Description
[Description claire de ce qui doit être fait]

## Contexte
[Pourquoi cette tâche est nécessaire]

## Notes d'implémentation
[Approche technique, fichiers à modifier, considérations]

## Critères d'acceptation
- [ ] Critère 1
- [ ] Critère 2

## Test
[Comment vérifier que cette tâche est complète]

Modèle Epic

Format du titre: epic: <description>

## Aperçu
[Description haut niveau de l'initiative]

## Objectifs
- [ ] Objectif 1
- [ ] Objectif 2

## Fonctionnalités
- [ ] #XXX Nom de la fonctionnalité
- [ ] #YYY Nom de la fonctionnalité

## Critères de succès
[Comment nous savons que cet epic est complet]

## Notes
[Contexte additionnel, contraintes ou considérations]

Relations

Utilisez l'API sub-issue de GitHub (PAS de texte comme "Part of #123" dans le corps) :

Relation Comment
Parent/Enfant Mutation GraphQL addSubIssue
Associé Related to #789 dans le corps du texte
Bloque Blocks #101 dans le corps du texte
Bloqué par Blocked by #102 dans le corps du texte

Flux de travail

  1. Rassembler les informations : Poser des questions clarificatrices pour comprendre le problème
  2. Déterminer le type : Basé sur l'envergure, choisir Epic/Feature/Task/Bug
  3. Rechercher un parent : Chercher des Features/Epics associés et demander à l'utilisateur lequel lier
  4. Rédiger le problème : Utiliser le modèle approprié correspondant à .github/ISSUE_TEMPLATE/
  5. Examiner avec l'utilisateur : Montrer le brouillon avant de créer
  6. Créer le problème : Processus à 3 étapes ci-dessous

Créer des Problèmes (processus à 3 étapes)

Étape 1 : Créer le problème

gh issue create \
  --title "fix:|feat:|task:|epic: Description" \
  --body "..." \
  --assignee NotThatKindOfDrLiz

Étape 2 : Définir le type de problème via GraphQL

Types disponibles et leurs IDs (repo: divinevideo/divine-mobile) :

  • Task: IT_kwDODpf9Q84ByDOD
  • Bug: IT_kwDODpf9Q84ByDOE
  • Feature: IT_kwDODpf9Q84ByDOF
# Obtenir l'ID du nœud du problème
gh api graphql -f query='{ repository(owner: "divinevideo", name: "divine-mobile") {
  issue(number: ISSUE_NUMBER) { id }
} }'

# Définir le type
gh api graphql -f query='mutation { updateIssueIssueType(input: {
  issueId: "ISSUE_NODE_ID",
  issueTypeId: "TYPE_ID"
}) { issue { id } } }'

Étape 3 : Définir la relation parent via GraphQL

# Obtenir l'ID du nœud du problème parent
gh api graphql -f query='{ repository(owner: "divinevideo", name: "divine-mobile") {
  issue(number: PARENT_NUMBER) { id }
} }'

# Ajouter comme sub-issue
gh api graphql -f query='mutation { addSubIssue(input: {
  issueId: "PARENT_NODE_ID",
  subIssueId: "CHILD_NODE_ID"
}) { issue { id } subIssue { id } } }'

Rechercher des Problèmes Parents

Avant de créer une Task ou un Bug, rechercher des Features/Epics associés :

gh issue list --search "mots-clés associés" --limit 10

Bonnes pratiques

  1. Utiliser le bon préfixe du titre : fix:, feat:, task:, epic:

  2. Un problème, une préoccupation : Ne pas combiner plusieurs bugs ou fonctionnalités

  3. Utiliser l'API sub-issue pour la hiérarchie : Ne jamais utiliser de texte "Part of #XXX", utiliser la mutation GraphQL addSubIssue

  4. Inclure le contexte : Expliquer pourquoi, pas seulement quoi

  5. Être spécifique : Inclure les chemins de fichiers, les messages d'erreur, les étapes pour reproduire

  6. Correspondre aux modèles existants : Suivre la structure de .github/ISSUE_TEMPLATE/

Exemple : Créer un Bug

gh issue create \
  --title "fix: Les étiquettes des stats de profil se retournent incorrectement sur petit écran" \
  --body "$(cat <<'EOF'
## Résumé
Les étiquettes des stats de profil ("Followers", "Following") se retournent sur plusieurs lignes, en coupant les mots en plein milieu.

## Environnement
- Version de l'app : Dernière
- Appareil : Appareils petit écran
- Réseau : N/A

## Étapes pour reproduire
1. Ouvrir l'écran de profil sur un petit appareil ou largeur étroite
2. Regarder la ligne des stats (Videos, Followers, Following)
3. Voir les étiquettes se retourner incorrectement

## Résultat réel
Les étiquettes se retournent en plein mot :
- "Followers" devient "Follower" + "s"
- "Following" devient "Followin" + "g"

## Résultat attendu
Les étiquettes devraient rester sur une seule ligne, ou être tronquées avec ellipsis si nécessaire.

## Régression ?
Inconnu

## Preuves
<!-- Capture d'écran à ajouter après la création -->
EOF
)"

Skills similaires