veza/VEZA_VALIDATION_AGENT_PROMPT.md
senke b9821db707 [BE-SEC-001] security: Fix ownership verification for user profile updates
- Verified RequireOwnershipOrAdmin middleware is correctly applied to PUT /users/:id
- Added integration tests for ownership verification
- Test: user cannot update another user's profile (403 Forbidden)
- Test: admin can update any profile (200 OK)
- Test: user can update own profile (200 OK)
- All tests pass

Phase: PHASE-1
Priority: P0
Progress: 1/267 (0.4%)
2025-12-23 01:36:04 +01:00

14 KiB

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

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

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

cd apps/web && npm test -- --passWithNoTests --watchAll=false

Attendu: Tous les tests passent Si échec: Noter les tests qui échouent

VAL-004: Backend Tests

cd veza-backend-api && go test ./... -v

Attendu: Tous les tests passent Si échec: Noter les tests qui échouent

VAL-005: CORS Production Check

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

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

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

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

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

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

# 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

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