Claude-skill-registry Bug Finding Methodology
Méthodologie systématique pour identifier la cause d'un bug avant de le corriger. MANDATORY pour bug resolution. À utiliser lors de debugging, bug reports, ou quand l'utilisateur mentionne "bug", "erreur", "ne fonctionne pas", "casse".
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/bug-finder" ~/.claude/skills/majiayu000-claude-skill-registry-bug-finding-methodology && rm -rf "$T"
skills/data/bug-finder/SKILL.mdBug Finding Methodology
🎯 Mission
Identifier méthodiquement la cause racine d'un bug en utilisant une approche systématique avant toute correction.
🧐 Philosophie
CRITICAL: Ne JAMAIS proposer de fix avant d'avoir identifié et validé la cause racine du bug.
Pourquoi ?
- ✅ Évite les faux positifs: Un fix sans comprendre peut masquer le vrai problème
- ✅ Économise du temps: Corriger la bonne cause du premier coup
- ✅ Réduit la dette technique: Pas de workarounds qui s'accumulent
- ✅ Améliore la compréhension: On apprend le système en profondeur
Anti-Pattern
// ❌ MAUVAIS WORKFLOW User: "Le bouton ne marche pas" Dev: "Ok, j'ajoute un console.log et je change le onClick" // Résultat: Bug peut-être masqué, cause inconnue // ✅ BON WORKFLOW User: "Le bouton ne marche pas" Dev: "Analysons systématiquement..." // 1. Reproduire le bug // 2. Identifier les causes probables // 3. Valider la cause racine // 4. ALORS proposer un fix minimal
📋 Méthodologie en 6 Étapes
Étape 1: Résumer le Problème
Objectif: S'assurer de bien comprendre le bug avant de l'investiguer.
Actions:
- Lire attentivement le bug report
- Reformuler avec vos propres mots
- Identifier les symptômes observables
- Distinguer le comportement attendu vs observé
Template:
## Résumé du Bug **Comportement Attendu**: [Ce qui devrait se passer] **Comportement Observé**: [Ce qui se passe réellement] **Symptômes**: - Symptôme 1 - Symptôme 2 - Symptôme 3 **Contexte**: - Environnement: [Dev, Prod, Test] - User role: [Coach, Player, etc.] - Actions précédentes: [Étapes avant le bug]
Exemple:
## Résumé du Bug **Comportement Attendu**: Le bouton "Créer un club" devrait créer un nouveau club et rediriger vers le dashboard. **Comportement Observé**: Le bouton ne fait rien, aucun feedback visuel. **Symptômes**: - Aucune requête API n'est envoyée - Aucun message d'erreur - Le bouton ne passe pas en état "loading" **Contexte**: - Environnement: Dev - User role: Coach nouvellement inscrit - Actions précédentes: Signup → Arrive sur /signup/coach/club
Étape 2: Visualiser le Flow
Objectif: Identifier tous les fichiers et fonctions impliqués dans le flux du bug.
Actions:
- Lister tous les fichiers potentiellement impliqués
- Créer un diagramme mermaid du flux d'exécution
- Identifier les points de transition critiques
Template Mermaid:
graph LR A[User Action] --> B[Component] B --> C[Action/Hook] C --> D[API Client] D --> E[Backend Route] E --> F[Service/Handler] F --> G[Repository] G --> H[Database]
Exemple Complet:
## Flow Analysis ### Fichiers Impliqués 1. `volley-app-frontend/src/features/club-management/components/ClubCreationForm.tsx` 2. `volley-app-frontend/src/features/club-management/actions/create-club.action.ts` 3. `volley-app-frontend/src/features/club-management/api/clubs.api.ts` 4. `volley-app-backend/src/club-management/presentation/controllers/clubs.controller.ts` 5. `volley-app-backend/src/club-management/application/commands/create-club/create-club.handler.ts` ### Flow Diagram ```mermaid graph LR A[ClubCreationForm] -->|handleSubmit| B[createClubAction] B -->|fetch| C[clubsApi.create] C -->|POST /api/clubs| D[ClubsController] D -->|execute| E[CreateClubHandler] E -->|save| F[ClubRepository] F -->|INSERT| G[PostgreSQL]
### Étape 3: Examiner les Fichiers Pertinents **Objectif**: Lire et analyser le code des fichiers identifiés dans le flow. **Actions**: 1. Lire chaque fichier dans l'ordre du flow 2. Noter les anomalies potentielles 3. Identifier les points de défaillance possibles 4. Vérifier les dépendances et imports **Checklist par Type de Fichier**: **Component (Frontend)**: - [ ] Event handler correctement bindé ? - [ ] Props reçues correctement ? - [ ] State initialisé correctement ? - [ ] useEffect dépendances correctes ? - [ ] Validation côté client ? **Action (Server Action)**: - [ ] 'use server' directive présente ? - [ ] Validation Zod correcte ? - [ ] Try/catch présent ? - [ ] revalidatePath appelé ? - [ ] Retour success/error correct ? **API Client**: - [ ] URL correcte ? - [ ] Headers présents (Authorization, Content-Type) ? - [ ] Body correctement formaté ? - [ ] Error handling présent ? **Controller (Backend)**: - [ ] Route correctement décorée (@Post, @Get, etc.) ? - [ ] DTO validation active ? - [ ] Guards appliqués (@UseGuards) ? - [ ] Exception handling présent ? **Handler (Backend)**: - [ ] Repository injecté correctement ? - [ ] Validation métier présente ? - [ ] Transactions gérées ? - [ ] Erreurs domain propagées ? ### Étape 4: Lister les Causes Probables **Objectif**: Identifier les 3 causes les plus probables avec confiance estimée. **Actions**: 1. Basé sur l'analyse des fichiers, lister les hypothèses 2. Classer par probabilité (High, Medium, Low) 3. Ajouter une description courte pour chaque cause 4. Estimer le niveau de confiance (%) **Template**: ```markdown ## Top 3 Causes Probables ### 1. [Nom de la Cause] - Confiance: 80% **Probabilité**: High **Description**: [Explication courte de pourquoi c'est probable] **Fichier(s)**: [Fichiers concernés] **Preuve**: [Ce qui indique que c'est la cause] ### 2. [Nom de la Cause] - Confiance: 50% **Probabilité**: Medium **Description**: [Explication] **Fichier(s)**: [Fichiers] **Preuve**: [Indices] ### 3. [Nom de la Cause] - Confiance: 20% **Probabilité**: Low **Description**: [Explication] **Fichier(s)**: [Fichiers] **Preuve**: [Indices]
Exemple Complet:
## Top 3 Causes Probables ### 1. Event Handler Non Bindé - Confiance: 80% **Probabilité**: High **Description**: Le handleSubmit n'est pas correctement passé au form, donc l'event n'est jamais déclenché. **Fichier(s)**: `ClubCreationForm.tsx` **Preuve**: - Aucune requête API n'est visible dans Network tab - Pas de logs dans la console - Suggère que le handler n'est jamais appelé ### 2. Validation Zod Échoue Silencieusement - Confiance: 50% **Probabilité**: Medium **Description**: La validation Zod dans createClubAction échoue mais l'erreur n'est pas catchée. **Fichier(s)**: `create-club.action.ts` **Preuve**: - Pas de try/catch visible dans l'action - Pourrait throw sans être géré ### 3. Backend Route Non Enregistrée - Confiance: 20% **Probabilité**: Low **Description**: La route POST /api/clubs n'est pas correctement enregistrée dans le module NestJS. **Fichier(s)**: `club-management.module.ts` **Preuve**: - Moins probable car d'autres routes fonctionnent - Mais possible si route récemment ajoutée
Étape 5: Attendre Confirmation Utilisateur
Objectif: Valider avec l'utilisateur avant de procéder.
Actions:
- Présenter les 3 causes probables
- Demander confirmation ou clarification
- Ajuster les hypothèses si nécessaire
Template Message:
J'ai identifié 3 causes probables pour ce bug. Voici mon analyse : [Insérer les 3 causes probables] **Question**: Souhaitez-vous que je procède à la vérification de la cause #1 (la plus probable), ou avez-vous des informations supplémentaires qui pourraient affiner mon analyse ?
Étape 6: Proposer Plan de Vérification
Objectif: Proposer les 3 meilleures actions pour vérifier et fixer le bug.
Actions:
- Pour chaque cause probable, proposer une vérification
- Suggérer des logs, tests, ou inspections
- Ordonner par priorité
- Attendre confirmation avant d'exécuter
Template:
## Plan de Vérification (Top 3 Actions) ### Action 1: [Vérifier Cause #1] **Objectif**: [Ce qu'on cherche à confirmer] **Méthode**: [Comment vérifier] **Outils**: [Logs, tests, inspections] **Si Confirmé**: [Fix proposé] **Temps Estimé**: [5 min, 15 min, etc.] ### Action 2: [Vérifier Cause #2] **Objectif**: [...] **Méthode**: [...] **Outils**: [...] **Si Confirmé**: [...] **Temps Estimé**: [...] ### Action 3: [Vérifier Cause #3] **Objectif**: [...] **Méthode**: [...] **Outils**: [...] **Si Confirmé**: [...] **Temps Estimé**: [...]
Exemple Complet:
## Plan de Vérification (Top 3 Actions) ### Action 1: Vérifier Event Handler Binding **Objectif**: Confirmer que handleSubmit est bien bindé au form **Méthode**: 1. Lire le code de ClubCreationForm.tsx 2. Vérifier que `action={handleSubmit}` ou `onSubmit={handleSubmit}` est présent 3. Ajouter un console.log au début de handleSubmit pour voir s'il est appelé **Outils**: Read tool, Edit tool (pour log temporaire) **Si Confirmé**: Corriger le binding (passer handleSubmit à l'attribut correct) **Temps Estimé**: 5 min ### Action 2: Tester Validation Zod **Objectif**: Vérifier si la validation Zod throw une erreur **Méthode**: 1. Lire create-club.action.ts 2. Vérifier présence de try/catch 3. Ajouter logs avant/après schema.parse() 4. Tester avec des données invalides **Outils**: Read tool, Edit tool, Bash (pour run dev server) **Si Confirmé**: Ajouter try/catch + error handling correct **Temps Estimé**: 10 min ### Action 3: Vérifier Route Backend **Objectif**: S'assurer que POST /api/clubs est bien enregistrée **Méthode**: 1. Lire club-management.module.ts 2. Vérifier que ClubsController est dans providers 3. Tester avec curl ou Postman **Outils**: Read tool, Bash (curl) **Si Confirmé**: Enregistrer correctement le controller **Temps Estimé**: 5 min
🛠️ Outils à Utiliser
Lecture de Code
# Read specific files Read tool: <file_path> # Search for patterns Grep tool: pattern="handleSubmit" output_mode="content" # Find files by name Glob tool: pattern="**/*club*.tsx"
Logs Temporaires
// ✅ BON - Log avec contexte console.log('[DEBUG] handleSubmit called with:', formData); // ✅ BON - Log avant/après opération critique console.log('[DEBUG] Before API call'); const result = await clubsApi.create(data); console.log('[DEBUG] After API call, result:', result);
CRITICAL: Toujours supprimer les logs de debug avant de commit.
Tests Reproductibles
// Test unitaire pour reproduire le bug describe('ClubCreationForm', () => { it('should call handleSubmit when form is submitted', () => { const mockSubmit = jest.fn(); render(<ClubCreationForm onSubmit={mockSubmit} />); fireEvent.submit(screen.getByRole('button', { name: /créer/i })); expect(mockSubmit).toHaveBeenCalled(); }); });
Network Inspection
# Test API endpoint directement curl -X POST http://localhost:3000/api/clubs \ -H "Content-Type: application/json" \ -H "Authorization: Bearer TOKEN" \ -d '{"name": "Test Club", "description": "Test"}'
✅ Checklist Bug Finding
- Étape 1: Résumé du bug (attendu vs observé)
- Étape 2: Flow diagram (mermaid) créé
- Étape 3: Fichiers pertinents examinés
- Étape 4: Top 3 causes probables listées avec confiance
- Étape 5: Confirmation utilisateur obtenue
- Étape 6: Plan de vérification proposé (3 actions)
- Attendre validation avant d'exécuter le plan
- Ne PAS proposer de fix sans cause validée
🚨 Erreurs Courantes
1. Proposer un Fix Trop Tôt
❌ MAUVAIS User: "Le bouton ne marche pas" Dev: "Ok, j'ajoute un onClick={handleSubmit}" ✅ BON User: "Le bouton ne marche pas" Dev: "Analysons le problème méthodiquement..." [Suit les 6 étapes]
2. Ne Pas Visualiser le Flow
❌ MAUVAIS Dev: "Je regarde juste le composant" ✅ BON Dev: "Voici le flow complet avec mermaid diagram" [Montre toutes les couches impliquées]
3. Hypothèses Sans Preuves
❌ MAUVAIS "C'est probablement un problème de cache" (Aucune preuve) ✅ BON "La cause probable est X parce que:" - Preuve 1 - Preuve 2 - Confiance: 80%
4. Ne Pas Attendre Confirmation
❌ MAUVAIS Dev propose 3 causes et commence immédiatement à fixer ✅ BON Dev propose 3 causes et attend: "Souhaitez-vous que je procède à la vérification ?"
📚 Skills Complémentaires
- debugger : Debugging systématique après identification de la cause
- refactoring : Refactoring pour éviter le bug à l'avenir
- ddd-testing : Tests pour prévenir la régression
Rappel CRITIQUE : Ne JAMAIS proposer de fix avant d'avoir validé la cause racine avec l'utilisateur.