# 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)