- Archiver 131 .md dans docs/archive/root-md/ - Archiver 22 .json dans docs/archive/root-json/ - Conserver 7 .md utiles (README, CONTRIBUTING, CHANGELOG, etc.) - Conserver package.json, package-lock.json, turbo.json - Ajouter README d'index dans chaque archive
495 lines
14 KiB
Markdown
495 lines
14 KiB
Markdown
# VEZA MVP Validation & Final Audit Agent
|
|
|
|
## 🎯 Mission
|
|
|
|
Tu es un agent de validation et d'audit. Les 15 tâches MVP ont été implémentées. Ta mission est de :
|
|
|
|
1. **VALIDER** que les 15 fixes fonctionnent réellement
|
|
2. **TESTER** les flows critiques E2E
|
|
3. **AUDITER** les problèmes restants
|
|
4. **GÉNÉRER** un rapport final avec score de santé
|
|
|
|
---
|
|
|
|
## 📁 Fichiers de Référence
|
|
|
|
```
|
|
VEZA_MVP_VALIDATION_TODOLIST.json ← Source de vérité pour cette phase
|
|
VEZA_MVP_STABILITY_TODOLIST.json ← Référence des 15 fixes implémentés
|
|
VEZA_MVP_TODOLIST_TRACKING.md ← Journal des implémentations
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Cycle d'Exécution
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ PHASE-V1: VALIDATION TECHNIQUE (10 checks automatiques) │
|
|
│ → Exécuter chaque commande │
|
|
│ → Noter PASS/FAIL │
|
|
│ → Si FAIL: identifier la cause et documenter │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ PHASE-V2: TESTS E2E (10 tests manuels) │
|
|
│ → Guider l'utilisateur à travers chaque test │
|
|
│ → Collecter les résultats │
|
|
│ → Documenter les échecs │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ PHASE-V3: AUDIT DES ISSUES RESTANTES │
|
|
│ → Vérifier INT-000016 à INT-000030 │
|
|
│ → Détecter les régressions │
|
|
│ → Scan de sécurité │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ PHASE-V4: RAPPORT FINAL │
|
|
│ → Calculer le score de santé │
|
|
│ → Générer VEZA_INTEGRATION_FINAL_REPORT.md │
|
|
│ → Décider si MVP est stable │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 PHASE-V1 : Validation Technique
|
|
|
|
Exécute ces 10 commandes et enregistre les résultats :
|
|
|
|
### VAL-001: TypeScript Compilation
|
|
```bash
|
|
cd apps/web && npx tsc --noEmit
|
|
```
|
|
**Attendu**: Exit 0, aucune erreur
|
|
**Si échec**: Lister les erreurs, identifier le MVP fix responsable
|
|
|
|
### VAL-002: Go Compilation
|
|
```bash
|
|
cd veza-backend-api && go build ./...
|
|
```
|
|
**Attendu**: Exit 0, aucune erreur
|
|
**Si échec**: Lister les erreurs, identifier le MVP fix responsable
|
|
|
|
### VAL-003: Frontend Tests
|
|
```bash
|
|
cd apps/web && npm test -- --passWithNoTests --watchAll=false
|
|
```
|
|
**Attendu**: Tous les tests passent
|
|
**Si échec**: Noter les tests qui échouent
|
|
|
|
### VAL-004: Backend Tests
|
|
```bash
|
|
cd veza-backend-api && go test ./... -v
|
|
```
|
|
**Attendu**: Tous les tests passent
|
|
**Si échec**: Noter les tests qui échouent
|
|
|
|
### VAL-005: CORS Production Check
|
|
```bash
|
|
cd veza-backend-api && APP_ENV=production CORS_ALLOWED_ORIGINS='' timeout 5 go run ./cmd/api 2>&1 || echo "Expected failure - check output above"
|
|
```
|
|
**Attendu**: Serveur refuse de démarrer avec message d'erreur CORS clair
|
|
**Si échec**: MVP-001 incomplet
|
|
|
|
### VAL-006: ApiService Removed
|
|
```bash
|
|
grep -r 'ApiService' apps/web/src/ 2>/dev/null || echo "PASS: No ApiService found"
|
|
```
|
|
**Attendu**: 0 résultats
|
|
**Si échec**: MVP-004 incomplet, lister les fichiers
|
|
|
|
### VAL-007: Token Storage Unified
|
|
```bash
|
|
grep -r 'auth-storage' apps/web/src/services/ 2>/dev/null || echo "PASS: No auth-storage in services"
|
|
```
|
|
**Attendu**: 0 résultats dans services/
|
|
**Si échec**: MVP-002 incomplet
|
|
|
|
### VAL-008: Env Vars Standardized
|
|
```bash
|
|
grep -r 'VITE_API_BASE_URL' apps/web/ 2>/dev/null || echo "PASS: No VITE_API_BASE_URL"
|
|
```
|
|
**Attendu**: 0 résultats
|
|
**Si échec**: MVP-006 incomplet
|
|
|
|
### VAL-009: User.id Type Fixed
|
|
```bash
|
|
grep -rn 'id:\s*number' apps/web/src/types/ apps/web/src/features/auth/types/ 2>/dev/null || echo "PASS: No number id types"
|
|
```
|
|
**Attendu**: 0 résultats pour User id
|
|
**Si échec**: MVP-003 incomplet
|
|
|
|
### VAL-010: remember_me Standardized
|
|
```bash
|
|
grep -rn 'rememberMe' apps/web/src/ --include='*.ts' --include='*.tsx' 2>/dev/null | grep -v node_modules || echo "PASS: No camelCase rememberMe"
|
|
```
|
|
**Attendu**: 0 résultats
|
|
**Si échec**: MVP-015 incomplet
|
|
|
|
---
|
|
|
|
## 📋 PHASE-V2 : Tests E2E
|
|
|
|
Guide l'utilisateur à travers ces tests. Demande confirmation après chaque test.
|
|
|
|
### E2E-001: Registration Flow
|
|
```
|
|
Instructions pour l'utilisateur:
|
|
1. Navigue vers /register
|
|
2. Remplis le formulaire (email, username, password)
|
|
3. Soumets
|
|
4. Vérifie la redirection
|
|
5. Ouvre DevTools > Application > localStorage
|
|
6. Vérifie que veza_access_token existe
|
|
7. Vérifie qu'il n'y a PAS de clé 'auth-storage'
|
|
|
|
Questions à poser:
|
|
- Registration réussie? (oui/non)
|
|
- Tokens dans localStorage? (oui/non)
|
|
- Clé 'auth-storage' absente? (oui/non)
|
|
```
|
|
|
|
### E2E-002: Login Flow
|
|
```
|
|
Instructions:
|
|
1. Déconnecte-toi si connecté
|
|
2. Va sur /login
|
|
3. Entre des credentials valides
|
|
4. Coche "Remember me"
|
|
5. Soumets
|
|
6. Ouvre DevTools > Network
|
|
7. Trouve la requête POST /auth/login
|
|
8. Vérifie le body: remember_me (snake_case) et non rememberMe
|
|
|
|
Questions:
|
|
- Login réussi? (oui/non)
|
|
- remember_me envoyé en snake_case? (oui/non)
|
|
```
|
|
|
|
### E2E-003: Session Persistence
|
|
```
|
|
Instructions:
|
|
1. Assure-toi d'être connecté
|
|
2. Fais un hard refresh (Ctrl+Shift+R)
|
|
3. Es-tu toujours connecté?
|
|
4. Ouvre un nouvel onglet sur l'app
|
|
5. Es-tu connecté dans le nouvel onglet?
|
|
|
|
Questions:
|
|
- Session persiste après refresh? (oui/non)
|
|
- Session partagée entre onglets? (oui/non)
|
|
```
|
|
|
|
### E2E-004: Token Refresh
|
|
```
|
|
Instructions:
|
|
1. Connecte-toi
|
|
2. Dans DevTools > Application > localStorage
|
|
3. Modifie veza_access_token (ajoute des caractères pour l'invalider)
|
|
4. Fais une action qui appelle l'API (ex: charger le profil)
|
|
5. Observe Network tab
|
|
6. Y a-t-il une requête vers /auth/refresh?
|
|
7. Le token a-t-il été renouvelé dans localStorage?
|
|
|
|
Questions:
|
|
- Token refresh automatique? (oui/non)
|
|
- Nouveaux tokens stockés? (oui/non)
|
|
```
|
|
|
|
### E2E-005: Logout Flow
|
|
```
|
|
Instructions:
|
|
1. Assure-toi d'être connecté
|
|
2. Clique sur Logout
|
|
3. Vérifie la redirection vers /login
|
|
4. Vérifie localStorage - tokens effacés?
|
|
5. Essaie d'accéder à une route protégée
|
|
6. Es-tu redirigé vers login?
|
|
|
|
Questions:
|
|
- Logout réussi? (oui/non)
|
|
- Tokens effacés de localStorage? (oui/non)
|
|
- Routes protégées inaccessibles? (oui/non)
|
|
```
|
|
|
|
### E2E-006: Profile View/Edit
|
|
```
|
|
Instructions:
|
|
1. Va sur la page profil
|
|
2. Tous les champs sont-ils affichés? (id, email, username, avatar, etc.)
|
|
3. Modifie un champ (ex: username)
|
|
4. Sauvegarde
|
|
5. Refresh la page
|
|
6. Le changement est-il persisté?
|
|
|
|
Questions:
|
|
- Tous les champs user affichés? (oui/non)
|
|
- Modifications sauvegardées? (oui/non)
|
|
```
|
|
|
|
### E2E-007: Error Request ID
|
|
```
|
|
Instructions:
|
|
1. Ouvre DevTools > Console
|
|
2. Provoque une erreur API (ex: accède à une ressource inexistante)
|
|
3. Regarde le log d'erreur dans la console
|
|
4. Contient-il un request_id?
|
|
5. Vérifie dans Network si le même request_id est dans la réponse
|
|
|
|
Questions:
|
|
- request_id présent dans les logs? (oui/non)
|
|
- request_id correspond à la réponse backend? (oui/non)
|
|
```
|
|
|
|
### E2E-008: Retry Logic (si testable)
|
|
```
|
|
Instructions:
|
|
1. Si possible: arrête le backend temporairement
|
|
2. Ou: utilise DevTools > Network > Throttling > Offline
|
|
3. Déclenche une requête API
|
|
4. Observe Network - y a-t-il des retry?
|
|
5. Remets la connexion
|
|
6. La requête finit-elle par réussir?
|
|
|
|
Questions:
|
|
- Retry automatique observé? (oui/non/non testable)
|
|
- Backoff exponentiel? (oui/non/non testable)
|
|
```
|
|
|
|
### E2E-009: CORS Headers
|
|
```
|
|
Instructions:
|
|
1. Frontend sur localhost:3000, Backend sur localhost:8080
|
|
2. Fais une requête API
|
|
3. Ouvre Network > trouve la requête
|
|
4. Regarde les Response Headers
|
|
5. Access-Control-Allow-Origin présent?
|
|
6. Access-Control-Allow-Credentials: true?
|
|
|
|
Questions:
|
|
- Headers CORS présents? (oui/non)
|
|
- Pas d'erreur CORS dans console? (oui/non)
|
|
```
|
|
|
|
### E2E-010: Console Error Scan
|
|
```
|
|
Instructions:
|
|
1. Ouvre DevTools > Console
|
|
2. Clear console
|
|
3. Navigue: Login → Dashboard → Profile → Tracks → Playlists → Logout
|
|
4. Note toutes les erreurs/warnings
|
|
|
|
Questions:
|
|
- Erreurs 404? (oui/non, lesquelles?)
|
|
- Erreurs CORS? (oui/non)
|
|
- Exceptions JavaScript? (oui/non, lesquelles?)
|
|
- Warnings React? (oui/non, lesquels?)
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 PHASE-V3 : Audit Issues Restantes
|
|
|
|
### Vérifier les issues P2 (INT-000016 à INT-000023)
|
|
|
|
Pour chaque issue, vérifie si elle existe encore et note la sévérité actuelle:
|
|
|
|
| ID | Issue | Commande/Check | Statut |
|
|
|----|-------|----------------|--------|
|
|
| INT-000016 | cover_art_path vs cover_art_url | `grep -rn 'cover_art' apps/web/src/types/` | |
|
|
| INT-000017 | Pagination inconsistante | Spot check des endpoints de liste | |
|
|
| INT-000018 | Rate limit feedback | Vérifier gestion du 429 | |
|
|
| INT-000019 | WebSocket error handling | Si chat existe, tester déconnexion | |
|
|
| INT-000020 | Upload progress accuracy | Tester upload de fichier | |
|
|
| INT-000021 | Search debounce | Tester champs de recherche | |
|
|
| INT-000022 | Optimistic UI rollback | Tester échec de mutation | |
|
|
| INT-000023 | Timezone handling | Vérifier affichage des dates | |
|
|
|
|
### Vérifier les issues P3 (INT-000024 à INT-000030)
|
|
|
|
| ID | Issue | Statut |
|
|
|----|-------|--------|
|
|
| INT-000024 | API versioning | /api/v1 utilisé partout? |
|
|
| INT-000025 | OpenAPI docs | Swagger existe? |
|
|
| INT-000026 | Error message format | Cohérent? |
|
|
| INT-000027 | Rate limit headers | X-RateLimit-* présents? |
|
|
| INT-000028 | API docs à jour | FRONTEND_INTEGRATION.md actuel? |
|
|
| INT-000029 | Vite proxy | Fonctionne sans? |
|
|
| INT-000030 | HLS endpoints | Désactivés dans MVP-008? |
|
|
|
|
### Détection de Régressions
|
|
|
|
```bash
|
|
# TODOs/FIXMEs liés au MVP
|
|
grep -rn 'TODO.*MVP\|FIXME.*MVP' apps/web/src/ veza-backend-api/
|
|
|
|
# Code mort potentiel
|
|
grep -rn 'ApiService\|apiService' apps/web/src/
|
|
|
|
# Sensitive data in logs
|
|
grep -rn 'console.log.*token\|console.log.*password' apps/web/src/
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 PHASE-V4 : Rapport Final
|
|
|
|
### Calcul du Score de Santé
|
|
|
|
```
|
|
SCORING (sur 100 points, converti en /10):
|
|
|
|
Compilation (20 pts)
|
|
├── TypeScript compile: 10 pts
|
|
└── Go compile: 10 pts
|
|
|
|
Tests (15 pts)
|
|
├── Frontend tests pass: 7 pts
|
|
└── Backend tests pass: 8 pts
|
|
|
|
Auth Flow (20 pts)
|
|
├── Login works: 5 pts
|
|
├── Logout works: 5 pts
|
|
├── Token refresh works: 5 pts
|
|
└── Session persists: 5 pts
|
|
|
|
API Contract (15 pts)
|
|
├── No 404 errors: 5 pts
|
|
├── Consistent format: 5 pts
|
|
└── Type safety: 5 pts
|
|
|
|
Error Handling (10 pts)
|
|
├── Retry logic: 4 pts
|
|
├── Error correlation: 3 pts
|
|
└── User feedback: 3 pts
|
|
|
|
Security (10 pts)
|
|
├── CORS configured: 4 pts
|
|
├── No wildcards prod: 3 pts
|
|
└── CSRF exists: 3 pts
|
|
|
|
Code Quality (10 pts)
|
|
├── No legacy code: 4 pts
|
|
├── Consistent naming: 3 pts
|
|
└── No dead code: 3 pts
|
|
|
|
TOTAL: ___ / 100 = ___ / 10
|
|
```
|
|
|
|
### Template du Rapport Final
|
|
|
|
Génère ce fichier: `VEZA_INTEGRATION_FINAL_REPORT.md`
|
|
|
|
```markdown
|
|
# Veza Integration Final Report
|
|
|
|
**Date**: [DATE]
|
|
**Auditeur**: [Agent]
|
|
**Phase précédente**: MVP Stability Fixes (15/15)
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
**Health Score**: X/10 (était 4/10 avant MVP fixes)
|
|
**MVP Stable**: OUI/NON
|
|
**Prêt pour Production**: OUI/NON/AVEC RÉSERVES
|
|
|
|
[Résumé en 3-4 phrases]
|
|
|
|
---
|
|
|
|
## MVP Fixes Verification
|
|
|
|
| ID | Fix | Validation | Statut |
|
|
|----|-----|------------|--------|
|
|
| MVP-001 | CORS Config | VAL-005 | ✅/❌ |
|
|
| MVP-002 | Token Storage | VAL-007 | ✅/❌ |
|
|
| ... | ... | ... | ... |
|
|
|
|
**Résultat**: X/15 fixes vérifiés fonctionnels
|
|
|
|
---
|
|
|
|
## E2E Test Results
|
|
|
|
| Test | Résultat | Notes |
|
|
|------|----------|-------|
|
|
| E2E-001 Registration | ✅/❌ | |
|
|
| E2E-002 Login | ✅/❌ | |
|
|
| ... | ... | ... |
|
|
|
|
**Résultat**: X/10 tests passent
|
|
|
|
---
|
|
|
|
## Issues Restantes
|
|
|
|
### P2 (Medium - à traiter prochainement)
|
|
- [ ] INT-000016: ...
|
|
- [ ] INT-000017: ...
|
|
|
|
### P3 (Low - tech debt)
|
|
- [ ] INT-000024: ...
|
|
- [ ] INT-000025: ...
|
|
|
|
---
|
|
|
|
## Régressions Détectées
|
|
|
|
[Liste des régressions trouvées, ou "Aucune régression détectée"]
|
|
|
|
---
|
|
|
|
## Security Assessment
|
|
|
|
| Check | Statut | Risque Accepté? |
|
|
|-------|--------|-----------------|
|
|
| CORS configuré | ✅/❌ | |
|
|
| Pas de wildcards | ✅/❌ | |
|
|
| CSRF implémenté | ✅/❌ | |
|
|
| Tokens en localStorage | ⚠️ | Oui (MVP) |
|
|
|
|
---
|
|
|
|
## Recommandations
|
|
|
|
### Immédiat (avant déploiement)
|
|
1. ...
|
|
2. ...
|
|
|
|
### Court terme (sprint suivant)
|
|
1. ...
|
|
2. ...
|
|
|
|
### Moyen terme (backlog)
|
|
1. ...
|
|
2. ...
|
|
|
|
---
|
|
|
|
## Deployment Readiness Checklist
|
|
|
|
- [ ] Tous les tests passent
|
|
- [ ] CORS_ALLOWED_ORIGINS configuré pour prod
|
|
- [ ] Variables d'environnement documentées
|
|
- [ ] Pas de secrets dans le code
|
|
- [ ] Docker build fonctionne
|
|
- [ ] Rollback plan en place
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
[Score final, décision MVP stable ou non, prochaines étapes]
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 COMMENCE
|
|
|
|
1. Lis `VEZA_MVP_VALIDATION_TODOLIST.json`
|
|
2. Annonce: "🔍 Démarrage de la validation MVP Veza"
|
|
3. Exécute PHASE-V1 (commandes automatiques)
|
|
4. Guide l'utilisateur pour PHASE-V2 (tests manuels)
|
|
5. Effectue PHASE-V3 (audit)
|
|
6. Génère PHASE-V4 (rapport final)
|
|
|
|
**Première action**: Exécuter VAL-001 (TypeScript compilation)
|