📋 Guide de contribution
Merci d'envisager de contribuer à BlocMail & BlocNumEtSMS !
Avant de commencer
- Lire le README.md
- Consulter STATUS.md pour voir ce qui est en cours
- Vérifier les Issues GitHub ouvertes
- Pour les grosses fonctionnalités : discuter en issue avant de coder
Conventions de code
Style TypeScript
// ✅ Bon
const analyzeEmail = async (headers: string): Promise<AnalysisResult> => { ... };
// ❌ Éviter
const analyzeEmail = async (headers) => { ... };
| Élément | Convention | Exemple |
|---|---|---|
| Composants React | PascalCase | EmailHeaderAnalyzer.tsx |
| Hooks | camelCase + use | useSpamAnalysis.ts |
| Types/Interfaces | PascalCase | SpamAnalysisResult |
| Fichiers utilitaires | kebab-case | extract-spam-patterns.cjs |
| Variables | camelCase | emailContent |
| Colonnes DB | snake_case | email_content |
Classes CSS
// Toujours utiliser cn() de @/lib/utils
import { cn } from '@/lib/utils';
className={cn("base", condition && "conditional")}
Conventions de branches
feature/{description} # Nouvelle fonctionnalité
bugfix/{description} # Correction de bug
hotfix/{description} # Correction urgente production
docs/{description} # Documentation uniquement
refactor/{description} # Refactoring sans changement fonctionnel
Exemples :
feature/stripe-integrationbugfix/arcep-cache-ttldocs/update-api-reference
Conventions de commit
Format Conventional Commits :
<type>(<scope>): <description courte>
[body optionnel]
Types : feat, fix, docs, style, refactor, test, chore
feat(analyzer): add batch email analysis mode
fix(arcep): handle malformed phone number format
docs(api): update SSE streaming examples
Règles :
- Verbe à l'impératif présent
- Pas de majuscule sur la première lettre de la description
- Pas de point final
- Limite 72 caractères pour le titre
Processus de Pull Request
- Créer une branche depuis
main - Développer la contribution
npm run dev— vérifier que tout fonctionnenpm run build— vérifier que le build passenpm run lint— zéro warning- Créer la PR vers
main
Template PR
## Résumé
Description de ce que fait cette PR.
## Changements
- [ ] Feature X implémentée
- [ ] Bug Y corrigé
## Comment tester
1. Lancer `npm run dev`
2. Aller sur `/analyzer`
3. Coller des headers email
4. Vérifier que...
## Screenshots (si applicable)
Exigences de tests (Q2 2026)
- Tests unitaires Vitest pour les fonctions pures
- Cibles prioritaires :
credits.ts, scoring hybride, normalisation numéros - Tests Edge Functions avec
Deno.test - Tests E2E Playwright pour les flux critiques
npm run test # Tests unitaires
npm run test:e2e # Tests E2E
Ajouter un pattern spam
- Identifier le type et écrire la structure JSON
- Tester manuellement avec des emails réels
- Valider l'absence de faux positifs
- Ajouter dans le fichier source approprié (
spam_patterns.jsonou source dédiée) - Régénérer :
node scripts/extract-spam-patterns.cjs --source=all - Créer une PR documentée
Ne pas faire
- ❌ Modifier
src/components/ui/(composants shadcn auto-générés) - ❌ Modifier
src/integrations/supabase/types.ts(auto-généré) - ❌ Committer
.envou des clés API - ❌ Ajouter des
console.logen production - ❌ Utiliser
anyTypeScript sans justification
Contact
Pour toute question sur la contribution : contact.seb205@gmail.com