# ORIGIN_ERROR_PATTERNS.md
## đ RĂSUMĂ EXĂCUTIF
Ce document catalogue **TOUS** les patterns d'erreurs identifiés dans le projet Veza pendant la Phase 0 (Error Resolution). Chaque pattern inclut la cause racine, la solution standard, et une checklist de prévention pour éviter sa réapparition dans les futures implémentations.
**DerniĂšre mise Ă jour** : 2025-11-09
**Statut** : â
Document de référence officiel
**Version** : 1.0.0
---
## đ RĂGLES IMMUABLES
1. **TOUJOURS consulter ce document** avant de commencer une nouvelle tĂąche
2. **TOUJOURS vérifier** qu'aucun pattern d'erreur ne sera introduit
3. **TOUJOURS documenter** tout nouveau pattern découvert
4. **JAMAIS contourner** une erreur sans la corriger définitivement
---
## đ STATISTIQUES DES PATTERNS
| Catégorie | Patterns | Fréquence | Priorité |
|-----------|----------|-----------|----------|
| **Backend Go** | 5 | Haute | P0-P1 |
| **Frontend TypeScript** | 8 | TrĂšs Haute | P0-P2 |
| **Tests** | 6 | Haute | P1-P2 |
| **Configuration** | 3 | Moyenne | P0-P1 |
| **Lint/Format** | 4 | Haute | P2 |
**Total** : 26 patterns documentés
---
## 1. BACKEND GO - PATTERNS D'ERREURS
### PAT-001: Import Cycles (Circular Dependencies)
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P0 (Critique)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Import cyclique dĂ©tectĂ© entre packages Go, empĂȘchant la compilation.
**Pattern typique** :
```
package A imports package B
package B imports package C
package C imports package A â CYCLE DĂTECTĂ
```
**Exemple réel** :
```go
// â ERREUR
// internal/services/user_service.go
package services
import "veza-backend-api/internal/handlers" // Import handlers
// internal/handlers/user_handlers.go
package handlers
import "veza-backend-api/internal/services" // Import services â CYCLE!
```
#### Cause Racine
- DĂ©pendances circulaires entre couches (handlers â services â handlers)
- Types partagés définis dans le mauvais package
- Interfaces définies dans les packages qui les utilisent
#### Solution Standard
**Ătape 1** : Identifier le cycle
```bash
cd veza-backend-api
go list -f '{{join .DepsErrors "\n"}}' ./... | grep -i "cycle"
```
**Ătape 2** : CrĂ©er package de types partagĂ©s
```go
// â
SOLUTION - Créer internal/types/interfaces.go
package types
// Interfaces définies dans package neutre
type UserRepository interface {
Create(user *User) error
FindByID(id uuid.UUID) (*User, error)
}
type UserService interface {
CreateUser(req *CreateUserRequest) (*User, error)
}
```
**Ătape 3** : Refactorer les packages
```go
// â
internal/services/user_service.go
package services
import "veza-backend-api/internal/types" // Import types seulement
type UserService struct {
repo types.UserRepository // Dépend de l'interface
}
// â
internal/handlers/user_handlers.go
package handlers
import "veza-backend-api/internal/types" // Import types seulement
func CreateUser(c *gin.Context) {
service := types.UserService // Utilise l'interface
}
```
#### Checklist de Prévention
- [ ] Vérifier qu'aucun import cycle ne sera créé avant d'ajouter un import
- [ ] Utiliser `go mod graph` pour visualiser les dépendances
- [ ] Définir les interfaces dans `internal/types/` ou `internal/interfaces/`
- [ ] Services ne doivent JAMAIS importer handlers
- [ ] Handlers ne doivent JAMAIS importer services directement
- [ ] Utiliser dependency injection via interfaces
#### Références
- **Documentation Go** : https://golang.org/ref/spec#Import_declarations
- **Best Practices** : Clean Architecture, Dependency Inversion Principle
---
### PAT-002: Type Mismatches (string vs *string)
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P0 (Critique)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Incohérence entre types `string` et `*string` (nullable) causant des erreurs de compilation.
**Exemple réel** :
```go
// â ERREUR - internal/models/responses.go
type User struct {
FirstName string `json:"first_name"` // string (non-nullable)
}
func (ur *UserResponse) FromUser(user *User) {
if user.FirstName != nil { // â ERREUR: string ne peut pas ĂȘtre nil
ur.FirstName = *user.FirstName // â ERREUR: dĂ©rĂ©fĂ©rencement impossible
}
}
```
#### Cause Racine
- Migration partielle de `*string` vers `string` (ou vice versa)
- Manque de cohérence dans la définition des modÚles
- Changement de stratégie nullable/non-nullable non appliqué partout
#### Solution Standard
**Option A : Utiliser string (non-nullable)**
```go
// â
SOLUTION A
type User struct {
FirstName string `json:"first_name,omitempty"` // string, jamais nil
}
func (ur *UserResponse) FromUser(user *User) {
if user.FirstName != "" { // â
Vérifier string vide
ur.FirstName = user.FirstName // â
Pas de déréférencement
}
}
```
**Option B : Utiliser *string (nullable)**
```go
// â
SOLUTION B
type User struct {
FirstName *string `json:"first_name,omitempty"` // *string, peut ĂȘtre nil
}
func (ur *UserResponse) FromUser(user *User) {
if user.FirstName != nil { // â
Vérifier nil
ur.FirstName = *user.FirstName // â
Déréférencement correct
}
}
```
**Recommandation** : Utiliser `string` avec valeur vide `""` pour les champs optionnels (plus simple, moins de pointeurs).
#### Checklist de Prévention
- [ ] Décider une stratégie cohérente : `string` ou `*string` pour champs optionnels
- [ ] Documenter la décision dans `ORIGIN_CODE_STANDARDS.md`
- [ ] Vérifier la cohérence des types avant de modifier un modÚle
- [ ] Utiliser `go vet` pour détecter les incohérences
- [ ] Tests unitaires pour valider le comportement nullable/non-nullable
#### Références
- **Go Best Practices** : https://go.dev/doc/effective_go#pointers_vs_values
---
### PAT-003: Missing Packages (Packages Not in std)
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P0 (Critique)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Import de packages qui n'existent pas ou ne sont pas dans le module.
**Exemple réel** :
```go
// â ERREUR
import "veza-backend-api/internal/api/search" // Package n'existe pas
import "veza-backend-api/internal/mocks" // Package n'existe pas
```
#### Cause Racine
- Packages référencés mais jamais créés
- Imports non nettoyés aprÚs refactoring
- Packages déplacés/renommés sans mise à jour des imports
#### Solution Standard
**Ătape 1** : Identifier les packages manquants
```bash
cd veza-backend-api
go build ./... 2>&1 | grep "is not in std"
```
**Ătape 2** : Pour chaque package manquant, dĂ©cider :
- **Option A** : Créer le package (si nécessaire pour la tùche)
- **Option B** : Retirer l'import (si non utilisé)
- **Option C** : Créer un stub minimal (si nécessaire pour compilation)
**Option A - Créer le package** :
```go
// â
Créer internal/api/search/handler.go
package search
import "github.com/gin-gonic/gin"
func SearchHandler(c *gin.Context) {
// Stub minimal pour permettre compilation
c.JSON(200, gin.H{"message": "Search endpoint - TODO: implement"})
}
```
**Option B - Retirer l'import** :
```go
// â
Retirer l'import non utilisé
// import "veza-backend-api/internal/api/search" â SUPPRIMĂ
```
#### Checklist de Prévention
- [ ] Vérifier que tous les packages importés existent avant commit
- [ ] Nettoyer les imports non utilisés avec `goimports -w .`
- [ ] Créer les packages nécessaires AVANT de les importer
- [ ] Utiliser `go mod tidy` pour nettoyer les dépendances
- [ ] Vérifier avec `go build ./...` aprÚs chaque modification
#### Références
- **Go Modules** : https://go.dev/ref/mod
---
### PAT-004: Missing Dependencies (go.mod)
**Catégorie** : CAT-03 (Dépendances)
**Priorité** : P0 (Critique)
**Fréquence** : Basse
**Découvert** : 2025-11-09
#### Description
Dépendance Go manquante dans `go.mod`.
**Exemple réel** :
```go
// â ERREUR
import "github.com/crewjam/saml/samlsp"
// Error: no required module provides package github.com/crewjam/saml/samlsp
```
#### Solution Standard
```bash
cd veza-backend-api
go get github.com/crewjam/saml/samlsp
go mod tidy
```
#### Checklist de Prévention
- [ ] Vérifier que toutes les dépendances sont dans `go.mod`
- [ ] Utiliser `go mod tidy` réguliÚrement
- [ ] Documenter les nouvelles dépendances dans `ORIGIN_TECHNICAL_STACK.md`
---
### PAT-005: Undefined Types/Variables
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P0 (Critique)
**Fréquence** : Basse
**Découvert** : 2025-11-09
#### Description
Utilisation de types ou variables non définis.
**Exemple réel** :
```go
// â ERREUR
// internal/database/chat_repository.go
var db *DB // Type DB non défini
```
#### Solution Standard
- Vérifier que le type existe dans le package ou un package importé
- Importer le package contenant le type
- Créer le type si nécessaire
#### Checklist de Prévention
- [ ] Vérifier que tous les types utilisés sont définis
- [ ] Utiliser `go vet` pour détecter les problÚmes
- [ ] IDE (VS Code/GoLand) devrait signaler les erreurs en temps réel
---
## 2. FRONTEND TYPESCRIPT/REACT - PATTERNS D'ERREURS
### PAT-006: Syntax Errors - Unterminated Regex
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P0 (Critique)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Regex non terminée dans les tests, causant une erreur de syntaxe.
**Exemple réel** :
```typescript
// â ERREUR - src/features/auth/hooks/useOAuthCallback.test.ts
expect(mockNavigate).toHaveBeenCalledWith('/dashboard/ // â Guillemet manquant
```
#### Cause Racine
- Copier-coller incomplet
- Erreur de frappe
- Ăditeur qui n'a pas signalĂ© l'erreur
#### Solution Standard
```typescript
// â
FIX
expect(mockNavigate).toHaveBeenCalledWith('/dashboard'); // Guillemet fermant ajouté
```
#### Checklist de Prévention
- [ ] Utiliser un linter en temps réel (ESLint dans VS Code)
- [ ] Vérifier la syntaxe avant de sauvegarder
- [ ] Utiliser `npm run type-check` avant commit
- [ ] Pre-commit hook devrait bloquer les erreurs de syntaxe
---
### PAT-007: Syntax Errors - Unclosed JSX Tags
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P0 (Critique)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Balises JSX non fermées, causant des erreurs de compilation.
**Exemple réel** :
```typescript
// â ERREUR - src/features/playlists/components/PlaylistList.tsx
{playlists.map(p => )} // â Pas de ni
```
#### Solution Standard
```typescript
// â
FIX
{playlists.map(p => )} // Self-closing tag
// Tag fermant ajouté
```
#### Checklist de Prévention
- [ ] Utiliser Prettier pour formater automatiquement
- [ ] Vérifier que tous les tags JSX sont fermés
- [ ] Utiliser l'extension React dans VS Code
- [ ] `tsc --noEmit` devrait détecter ces erreurs
---
### PAT-008: Configuration Errors - vite.config.ts Type Issues
**Catégorie** : CAT-02 (Configuration)
**Priorité** : P0 (Critique)
**Fréquence** : Basse
**Découvert** : 2025-11-09
#### Description
Incompatibilité de types dans la configuration Vite.
**Exemple réel** :
```typescript
// â ERREUR - vite.config.ts
build: {
terserOptions: {
compress: {
drop_console: true, // Type incompatibilité
}
}
}
```
#### Solution Standard
**Option A - Utiliser esbuild (recommandé)** :
```typescript
// â
SOLUTION A
build: {
minify: 'esbuild', // Plus moderne, plus rapide
// Pas besoin de terserOptions
}
```
**Option B - Corriger terserOptions** :
```typescript
// â
SOLUTION B
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: process.env.NODE_ENV === 'production',
},
} as any, // Type assertion si nécessaire
}
```
#### Checklist de Prévention
- [ ] Utiliser esbuild au lieu de terser (plus moderne)
- [ ] Vérifier la compatibilité des types avec `tsc --noEmit`
- [ ] Consulter la documentation Vite pour les types corrects
- [ ] Tester le build aprĂšs modification de la config
---
### PAT-009: Type Errors - Missing Type Definitions
**Catégorie** : CAT-01 (Compilation)
**Priorité** : P1 (Haute)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Types TypeScript manquants ou incorrects.
**Exemple réel** :
```typescript
// â ERREUR
const user: User = { // Type User non défini
id: '123',
name: 'John'
}
```
#### Solution Standard
```typescript
// â
FIX - Définir le type
interface User {
id: string;
name: string;
}
const user: User = {
id: '123',
name: 'John'
}
```
#### Checklist de Prévention
- [ ] Toujours définir les types avant utilisation
- [ ] Utiliser `strict: true` dans `tsconfig.json`
- [ ] Ăviter `any` (utiliser `unknown` si nĂ©cessaire)
- [ ] Vérifier avec `tsc --noEmit --strict`
---
### PAT-010: Lint Errors - Unused Variables
**Catégorie** : CAT-07 (Lint/Format)
**Priorité** : P2 (Moyenne)
**Fréquence** : TrÚs Haute
**Découvert** : 2025-11-09
#### Description
Variables déclarées mais jamais utilisées.
**Exemple réel** :
```typescript
// â ERREUR
const user = getUser(); // Variable déclarée mais non utilisée
console.log('Hello');
```
#### Solution Standard
**Option A - Supprimer la variable** :
```typescript
// â
SOLUTION A
// const user = getUser(); â SupprimĂ©
console.log('Hello');
```
**Option B - Préfixer avec underscore** :
```typescript
// â
SOLUTION B - Si la variable sera utilisée plus tard
const _user = getUser(); // Préfixe _ indique intentionnellement non utilisé
console.log('Hello');
```
#### Checklist de Prévention
- [ ] Supprimer les variables non utilisées
- [ ] Utiliser `npm run lint -- --fix` pour auto-fix
- [ ] Configurer ESLint pour signaler en temps réel
- [ ] Pre-commit hook devrait bloquer les erreurs lint
---
### PAT-011: Lint Errors - Console Statements
**Catégorie** : CAT-07 (Lint/Format)
**Priorité** : P2 (Moyenne)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Utilisation de `console.log` en production (interdit par lint rules).
**Exemple réel** :
```typescript
// â ERREUR
console.log('Debug info'); // no-console rule
```
#### Solution Standard
**Option A - Supprimer en production** :
```typescript
// â
SOLUTION A
if (process.env.NODE_ENV === 'development') {
console.log('Debug info');
}
```
**Option B - Utiliser un logger** :
```typescript
// â
SOLUTION B
import { logger } from '@/utils/logger';
logger.debug('Debug info'); // Logger gĂšre l'environnement
```
#### Checklist de Prévention
- [ ] Ne pas utiliser `console.log` en production
- [ ] Utiliser un logger configuré
- [ ] ESLint devrait bloquer `console.*` en production
- [ ] Vite supprime automatiquement les console en build production
---
### PAT-012: Lint Errors - Any Types
**Catégorie** : CAT-07 (Lint/Format)
**Priorité** : P2 (Moyenne)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Utilisation de `any` au lieu de types spécifiques.
**Exemple réel** :
```typescript
// â ERREUR
function processData(data: any) { // any interdit
return data.value;
}
```
#### Solution Standard
```typescript
// â
FIX - Typer correctement
interface Data {
value: string;
}
function processData(data: Data) {
return data.value;
}
// OU utiliser unknown si le type est vraiment inconnu
function processData(data: unknown) {
if (typeof data === 'object' && data !== null && 'value' in data) {
return (data as { value: string }).value;
}
throw new Error('Invalid data');
}
```
#### Checklist de Prévention
- [ ] Ăviter `any` (utiliser `unknown` si nĂ©cessaire)
- [ ] Typer toutes les fonctions et variables
- [ ] Utiliser `strict: true` dans `tsconfig.json`
- [ ] ESLint devrait bloquer `any` explicit
---
### PAT-013: Missing Return Types
**Catégorie** : CAT-07 (Lint/Format)
**Priorité** : P2 (Moyenne)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Fonctions sans type de retour explicite.
**Exemple réel** :
```typescript
// â ERREUR
function getUser(id: string) { // Type de retour manquant
return { id, name: 'John' };
}
```
#### Solution Standard
```typescript
// â
FIX
interface User {
id: string;
name: string;
}
function getUser(id: string): User { // Type de retour explicite
return { id, name: 'John' };
}
```
#### Checklist de Prévention
- [ ] Toujours typer le retour des fonctions
- [ ] Utiliser `@typescript-eslint/explicit-function-return-type`
- [ ] TypeScript peut inférer, mais explicite est mieux
---
## 3. TESTS - PATTERNS D'ERREURS
### PAT-014: Test Failures - Missing Mocks
**Catégorie** : CAT-05 (Tests)
**Priorité** : P1 (Haute)
**Fréquence** : TrÚs Haute
**Découvert** : 2025-11-09
#### Description
Tests échouent car les mocks ne sont pas configurés.
**Exemple réel** :
```typescript
// â ERREUR
it('should fetch user', async () => {
const user = await userService.getUser('123'); // userService non mocké
expect(user).toBeDefined();
});
// Error: Cannot read property 'data' of undefined
```
#### Solution Standard
```typescript
// â
FIX
import { vi } from 'vitest';
vi.mock('@/services/user', () => ({
userService: {
getUser: vi.fn().mockResolvedValue({ id: '123', name: 'John' })
}
}));
it('should fetch user', async () => {
const user = await userService.getUser('123');
expect(user).toBeDefined();
});
```
#### Checklist de Prévention
- [ ] Toujours mocker les dépendances externes
- [ ] Utiliser `vi.mock()` pour les modules
- [ ] Configurer les mocks dans `beforeEach` si réutilisés
- [ ] Vérifier que les mocks correspondent aux vrais services
---
### PAT-015: Test Failures - React act() Warnings
**Catégorie** : CAT-05 (Tests)
**Priorité** : P2 (Moyenne)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Avertissements React `act()` dans les tests.
**Exemple réel** :
```typescript
// â WARNING
Warning: An update to Component inside a test was not wrapped in act(...).
```
#### Solution Standard
```typescript
// â
FIX
import { act, render, screen } from '@testing-library/react';
it('should update state', async () => {
render();
await act(async () => {
fireEvent.click(screen.getByRole('button'));
await waitFor(() => {
expect(screen.getByText('Updated')).toBeInTheDocument();
});
});
});
```
#### Checklist de Prévention
- [ ] Utiliser `act()` pour les mises à jour d'état
- [ ] Utiliser `waitFor()` pour les mises Ă jour asynchrones
- [ ] `@testing-library/react` gĂšre `act()` automatiquement dans la plupart des cas
- [ ] Vérifier les warnings dans les logs de tests
---
### PAT-016: Test Failures - WebSocket Mocking Issues
**Catégorie** : CAT-05 (Tests)
**Priorité** : P1 (Haute)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
ProblĂšmes de mock WebSocket dans les tests.
**Exemple réel** :
```typescript
// â ERREUR
TypeError: realWebSocket.addEventListener is not a function
```
#### Solution Standard
```typescript
// â
FIX - Mocker WebSocket globalement
global.WebSocket = class MockWebSocket {
addEventListener = vi.fn();
removeEventListener = vi.fn();
send = vi.fn();
close = vi.fn();
readyState = WebSocket.OPEN;
} as any;
```
#### Checklist de Prévention
- [ ] Mocker WebSocket dans `setupTests.ts`
- [ ] Utiliser une bibliothÚque de mock WebSocket si nécessaire
- [ ] Tester les connexions WebSocket séparément
---
### PAT-017: Test Failures - Outdated Assertions
**Catégorie** : CAT-05 (Tests)
**Priorité** : P1 (Haute)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Assertions de tests obsolĂštes aprĂšs changement d'API.
**Exemple réel** :
```typescript
// â ERREUR - API changĂ©e
expect(result).toEqual({ success: true });
// API retourne maintenant: { status: 'success', data: {...} }
```
#### Solution Standard
```typescript
// â
FIX - Adapter aux nouveaux contracts
expect(result).toEqual({
status: 'success',
data: expect.objectContaining({
id: expect.any(String),
name: expect.any(String),
})
});
```
#### Checklist de Prévention
- [ ] Mettre Ă jour les tests lors de changement d'API
- [ ] Utiliser des matchers flexibles (`expect.objectContaining`)
- [ ] Contract testing pour valider les APIs
- [ ] Snapshot testing pour détecter les changements
---
### PAT-018: Test Failures - Missing Test Data
**Catégorie** : CAT-05 (Tests)
**Priorité** : P1 (Haute)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Tests échouent car les données de test sont manquantes.
#### Solution Standard
```typescript
// â
FIX - Créer fixtures
// tests/fixtures/users.ts
export const testUsers = {
normalUser: {
id: 'user-123',
email: 'user@example.com',
name: 'Test User',
},
};
// test
import { testUsers } from '@/tests/fixtures/users';
it('should work', () => {
const user = testUsers.normalUser;
// ...
});
```
#### Checklist de Prévention
- [ ] Créer des fixtures réutilisables
- [ ] Centraliser les données de test
- [ ] Utiliser des factories pour générer des données
---
### PAT-019: Test Coverage Below Threshold
**Catégorie** : CAT-05 (Tests)
**Priorité** : P1 (Haute)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Couverture de tests en dessous du seuil de 80%.
#### Solution Standard
- Identifier le code non testé
- Ăcrire des tests pour les branches manquantes
- Utiliser `--coverage` pour voir les détails
#### Checklist de Prévention
- [ ] Maintenir coverage â„ 80%
- [ ] CI/CD devrait bloquer si coverage < 80%
- [ ] Ăcrire les tests en mĂȘme temps que le code (TDD)
---
## 4. CONFIGURATION - PATTERNS D'ERREURS
### PAT-020: Missing Environment Variables
**Catégorie** : CAT-02 (Configuration)
**Priorité** : P0 (Critique)
**Fréquence** : Basse
**Découvert** : 2025-11-09
#### Description
Variables d'environnement manquantes.
#### Solution Standard
- Documenter toutes les variables requises dans `.env.example`
- Valider les variables au démarrage
- Utiliser des valeurs par défaut si approprié
#### Checklist de Prévention
- [ ] Documenter toutes les variables dans `.env.example`
- [ ] Valider les variables au démarrage
- [ ] Utiliser `dotenv` pour charger les variables
---
### PAT-021: Docker Configuration Errors
**Catégorie** : CAT-06 (Docker)
**Priorité** : P0 (Critique)
**Fréquence** : Basse
**Découvert** : 2025-11-09
#### Description
Erreurs de syntaxe YAML dans `docker-compose.yml`.
#### Solution Standard
- Valider la syntaxe YAML avec `docker-compose config`
- Vérifier l'indentation (espaces, pas tabs)
- Utiliser un validateur YAML
#### Checklist de Prévention
- [ ] Valider `docker-compose.yml` avant commit
- [ ] Utiliser 2 espaces pour l'indentation
- [ ] Vérifier les guillemets et caractÚres spéciaux
---
## 5. LINT/FORMAT - PATTERNS D'ERREURS
### PAT-022: Code Formatting Issues
**Catégorie** : CAT-07 (Lint/Format)
**Priorité** : P2 (Moyenne)
**Fréquence** : Haute
**Découvert** : 2025-11-09
#### Description
Code non formaté selon les standards.
#### Solution Standard
```bash
# Auto-fix avec Prettier
npm run format
# Auto-fix avec ESLint
npm run lint -- --fix
```
#### Checklist de Prévention
- [ ] Utiliser Prettier pour formater automatiquement
- [ ] Pre-commit hook devrait formater avant commit
- [ ] Configurer l'éditeur pour formater à la sauvegarde
---
### PAT-023: Import Order Issues
**Catégorie** : CAT-07 (Lint/Format)
**Priorité** : P2 (Moyenne)
**Fréquence** : Moyenne
**Découvert** : 2025-11-09
#### Description
Imports non triés selon les rÚgles.
#### Solution Standard
- Utiliser `eslint-plugin-import` avec rĂšgle de tri
- Auto-fix avec `npm run lint -- --fix`
#### Checklist de Prévention
- [ ] Configurer ESLint pour trier les imports
- [ ] Auto-fix devrait corriger automatiquement
---
## đ RĂSUMĂ DES CHECKLISTS PAR CATĂGORIE
### Backend Go
- [ ] Vérifier import cycles avant d'ajouter un import
- [ ] Maintenir cohérence string vs *string
- [ ] Vérifier que tous les packages importés existent
- [ ] Utiliser `go vet` et `golangci-lint`
- [ ] Tests unitaires pour chaque fonction
### Frontend TypeScript/React
- [ ] Linter en temps réel activé
- [ ] TypeScript strict mode activé
- [ ] Tous les tags JSX fermés
- [ ] Pas de `any` types
- [ ] Pas de `console.log` en production
- [ ] Prettier configuré
### Tests
- [ ] Mocks configurés pour toutes les dépendances
- [ ] Coverage â„ 80%
- [ ] Tests passent avant commit
- [ ] Fixtures réutilisables
### Configuration
- [ ] Variables d'environnement documentées
- [ ] docker-compose.yml validé
- [ ] vite.config.ts types corrects
---
## đ MAINTENANCE
### Ajouter un Nouveau Pattern
1. Identifier le pattern récurrent
2. Documenter dans ce fichier avec le format standard
3. Mettre Ă jour les statistiques
4. Ajouter à la checklist de prévention appropriée
5. Mettre Ă jour `ORIGIN_ERROR_PREVENTION_GUIDE.md`
### Révision
- **Fréquence** : Mensuelle
- **Responsable** : Lead Engineers
- **Processus** : Analyser les nouvelles erreurs, documenter les patterns
---
**DerniĂšre mise Ă jour** : 2025-11-09
**Version** : 1.0.0
**Statut** : â
**APPROUVĂ ET VERROUILLĂ**