261 lines
12 KiB
Markdown
261 lines
12 KiB
Markdown
|
|
# V0.903 Release Scope — Stabilisation v1.0 & Launch Readiness
|
|||
|
|
|
|||
|
|
**Statut** : Planifié
|
|||
|
|
**Phase** : 9 (v1.0 Launch — Final)
|
|||
|
|
**Prérequis** : v0.902 (taguée)
|
|||
|
|
**Date cible** : TBD
|
|||
|
|
**Estimation** : ~4 sprints (20 jours ouvrés)
|
|||
|
|
**Précédente** : [v0.902](archive/V0_902_RELEASE_SCOPE.md)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Objectif
|
|||
|
|
|
|||
|
|
Dernière version avant la v1.0. Finalise les modules **Recherche & Recommandations** (recherche phonétique, correction orthographique, recherches sauvegardées, algorithme de recommandation, playlists auto-générées), **Player & Playlists** (smart playlists, export M3U, fusion/duplication), **Auth & Sécurité** (session management device list, notification login inhabituel, historique connexions, CAPTCHA, historique mots de passe). Inclut une phase de **stabilisation** intensive (load testing k6, optimisation Redis/DB/CDN) et la **documentation v1.0 complète**. Se conclut par le tag **v1.0**.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. État actuel (post-v0.902)
|
|||
|
|
|
|||
|
|
| Composant | État | Détail |
|
|||
|
|
|-----------|------|--------|
|
|||
|
|
| **Recherche fulltext** | ✅ Livré v0.203 | pg_trgm fuzzy, AND/OR/NOT, autocomplete |
|
|||
|
|
| **Recherche phonétique** | ❌ Absent | Pas de soundex/metaphone |
|
|||
|
|
| **Correction orthographique** | ❌ Absent | Pas de "did you mean?" |
|
|||
|
|
| **Recherches sauvegardées** | ❌ Absent | Pas de persist des recherches |
|
|||
|
|
| **Algorithme recommandation** | ❌ Absent | Autoplay basique (random), pas de collaborative filtering |
|
|||
|
|
| **Playlists auto-générées** | ❌ Absent | Pas de "Discover Weekly" type |
|
|||
|
|
| **Smart playlists** | ❌ Absent | Playlists statiques uniquement |
|
|||
|
|
| **Export M3U** | ❌ Absent | Pas d'export playlist |
|
|||
|
|
| **Merge/duplicate playlists** | ❌ Absent | Pas de fusion ni duplication |
|
|||
|
|
| **Session management** | ❌ Absent | Pas de liste des devices actifs |
|
|||
|
|
| **Login inhabituel notif** | ❌ Absent | Pas de détection |
|
|||
|
|
| **Historique connexions** | ❌ Absent | Pas de log |
|
|||
|
|
| **CAPTCHA** | ❌ Absent | Pas de protection bot |
|
|||
|
|
| **Historique mots de passe** | ❌ Absent | Pas d'empêchement réutilisation |
|
|||
|
|
| **Load testing** | ❌ Absent | Pas de k6/vegeta |
|
|||
|
|
| **Documentation v1.0** | ⚠️ Partiel | API_REFERENCE existe, manque production guide |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Lots
|
|||
|
|
|
|||
|
|
### Lot ST1 — Recherche & Recommandations
|
|||
|
|
|
|||
|
|
| # | Tâche | Fichiers impactés | Effort |
|
|||
|
|
|---|-------|--------------------|--------|
|
|||
|
|
| ST1-01 | Recherche phonétique — extension PostgreSQL `pg_trgm` + `fuzzystrmatch` (soundex, metaphone), intégration dans search query | Backend | M |
|
|||
|
|
| ST1-02 | Correction orthographique — "Did you mean...?" basé sur trigram similarity > 0.3, suggestion de la meilleure correspondance | Backend, frontend | M |
|
|||
|
|
| ST1-03 | Recherches sauvegardées — `POST /search/saved`, `GET /search/saved`, `DELETE /search/saved/:id`, migration `132_saved_searches.sql` | Backend, frontend | M |
|
|||
|
|
| ST1-04 | Algorithme recommandation — collaborative filtering basique (users who listened to X also listened to Y), `GET /tracks/recommendations` amélioré | Backend | L |
|
|||
|
|
| ST1-05 | Playlists auto-générées — "Discover Weekly" (30 tracks recommandées, régénérées chaque lundi), "Your Top Tracks" (top plays 30j) | Backend, frontend | L |
|
|||
|
|
| ST1-06 | Frontend — "Did you mean" dans SearchPage, section saved searches, playlists auto dans Library | Frontend | M |
|
|||
|
|
| ST1-07 | Tests — phonetic search, suggestion quality, saved searches CRUD, recommendation relevance | Tests | M |
|
|||
|
|
|
|||
|
|
### Lot ST2 — Player & Playlists Final
|
|||
|
|
|
|||
|
|
| # | Tâche | Fichiers impactés | Effort |
|
|||
|
|
|---|-------|--------------------|--------|
|
|||
|
|
| ST2-01 | Smart playlists — règles dynamiques (genre=hiphop AND bpm>120 AND added_last_30d), auto-update, migration `133_smart_playlists.sql` | Backend | L |
|
|||
|
|
| ST2-02 | Export M3U — `GET /playlists/:id/export?format=m3u` retourne fichier M3U avec URLs des tracks | Backend | S |
|
|||
|
|
| ST2-03 | Merge playlists — `POST /playlists/merge` (body: playlist_ids[], target_name), déduplique les tracks | Backend | M |
|
|||
|
|
| ST2-04 | Duplicate playlist — `POST /playlists/:id/duplicate` crée une copie avec nouveau nom | Backend | S |
|
|||
|
|
| ST2-05 | Frontend — boutons Export, Merge, Duplicate dans PlaylistView, Smart Playlist builder (formulaire de règles) | Frontend | L |
|
|||
|
|
| ST2-06 | Tests — smart playlist auto-update, M3U format, merge dedup, duplicate | Tests | M |
|
|||
|
|
|
|||
|
|
### Lot ST3 — Auth & Sécurité Final
|
|||
|
|
|
|||
|
|
| # | Tâche | Fichiers impactés | Effort |
|
|||
|
|
|---|-------|--------------------|--------|
|
|||
|
|
| ST3-01 | Session management — migration `134_sessions.sql` (table sessions: user_id, device, ip, user_agent, created_at, last_active_at), `GET /auth/sessions`, `DELETE /auth/sessions/:id` | Backend | M |
|
|||
|
|
| ST3-02 | Frontend session management — page dans Settings/Security avec liste des devices, bouton "Revoke" | Frontend | M |
|
|||
|
|
| ST3-03 | Login inhabituel — détecter nouvelle IP/device non reconnu, envoyer email notification, flag `is_suspicious` sur session | Backend | M |
|
|||
|
|
| ST3-04 | Historique connexions — `GET /auth/login-history` (dernières 50 connexions avec IP, device, date, status) | Backend, frontend | M |
|
|||
|
|
| ST3-05 | CAPTCHA — intégration hCaptcha/reCAPTCHA sur login après 3 échecs, registration, password reset | Backend middleware, frontend | M |
|
|||
|
|
| ST3-06 | Historique mots de passe — migration ajout `password_history JSONB` sur users, empêcher réutilisation des 5 derniers | Backend | M |
|
|||
|
|
| ST3-07 | Tests — session CRUD, suspicious login detection, CAPTCHA verification, password history | Tests | M |
|
|||
|
|
|
|||
|
|
### Lot ST4 — Performance & Load Testing
|
|||
|
|
|
|||
|
|
| # | Tâche | Fichiers impactés | Effort |
|
|||
|
|
|---|-------|--------------------|--------|
|
|||
|
|
| ST4-01 | k6 load tests — scripts pour auth flow, search, marketplace, streaming, WebSocket chat | `tests/load/` (nouveau) | L |
|
|||
|
|
| ST4-02 | Redis cache optimization — cache strategy review, cache-aside pattern sur queries fréquentes (search, trending, analytics) | Backend | M |
|
|||
|
|
| ST4-03 | DB query optimization — EXPLAIN ANALYZE sur les 10 queries les plus lentes, ajout index manquants, query rewrite | Backend | M |
|
|||
|
|
| ST4-04 | CDN configuration — cache headers sur assets statiques, HLS segments, images produits | Nginx/HAProxy config | M |
|
|||
|
|
| ST4-05 | Performance targets validation — p50 < 50ms, p95 < 200ms, p99 < 500ms sur les endpoints critiques | Tests | M |
|
|||
|
|
|
|||
|
|
### Lot ST5 — Documentation v1.0
|
|||
|
|
|
|||
|
|
| # | Tâche | Fichiers impactés | Effort |
|
|||
|
|
|---|-------|--------------------|--------|
|
|||
|
|
| ST5-01 | API Reference complète — tous les endpoints documentés (swagger + API_REFERENCE.md final) | `docs/API_REFERENCE.md` | L |
|
|||
|
|
| ST5-02 | Production Deployment Guide — docker-compose prod, env vars, backup strategy, monitoring setup, scaling guide | `docs/PRODUCTION_GUIDE.md` (nouveau) | L |
|
|||
|
|
| ST5-03 | README v1.0 — mise à jour avec architecture, quick start, features list, contributing guide | `README.md` | M |
|
|||
|
|
| ST5-04 | Migration Guide — liste toutes les migrations (1 à 134+), procédure upgrade, rollback | `docs/MIGRATION_GUIDE.md` (nouveau) | M |
|
|||
|
|
| ST5-05 | CHANGELOG v1.0 — historique complet de toutes les versions v0.101 à v1.0 | `CHANGELOG.md` | M |
|
|||
|
|
|
|||
|
|
### Lot REL — Release v1.0
|
|||
|
|
|
|||
|
|
| # | Tâche | Fichiers impactés | Effort |
|
|||
|
|
|---|-------|--------------------|--------|
|
|||
|
|
| REL-01 | E2E pass complet — tous les smoke tests de v0.703 à v0.903 exécutés | Smoke tests | L |
|
|||
|
|
| REL-02 | Security audit final — vérifier headers, rate limiting, auth, GDPR | Audit | M |
|
|||
|
|
| REL-03 | Performance benchmark final — k6 results, Lighthouse scores | Benchmark | M |
|
|||
|
|
| REL-04 | PROJECT_STATE, FEATURE_STATUS — mise à jour finale v1.0 | `docs/` | S |
|
|||
|
|
| REL-05 | RETROSPECTIVE_V0903.md + RETROSPECTIVE_V1.md | `docs/` | M |
|
|||
|
|
| REL-06 | Tag v0.903, tag v1.0 | Git | S |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Hors scope v0.903 / v1.0 (reporté v2.0)
|
|||
|
|
|
|||
|
|
| Élément | Raison |
|
|||
|
|
|---------|--------|
|
|||
|
|
| Module 8 — Education (cours, certificats) | Abandonné — complexité, pas de demande |
|
|||
|
|
| Module 15 — IA (mastering auto, stem separation, AI mixing) | Trop avancé, R&D nécessaire |
|
|||
|
|
| Module 17 — Collaboration temps réel (DAW, whiteboard) | Infrastructure spécialisée requise |
|
|||
|
|
| Module 18 — Blockchain/Web3 (NFT, tokens, DAO) | Priorité basse, marché incertain |
|
|||
|
|
| Module 19 — Intégrations DAW (Ableton Link, FL Studio, etc.) | Plugins spécialisés requis |
|
|||
|
|
| Module 20 — Applications natives (iOS, Android, Desktop) | Post-v1.0, React Native ou Tauri |
|
|||
|
|
| Module 21 — Gamification (XP, niveaux, achievements) | Nice-to-have, pas critique pour v1.0 |
|
|||
|
|
| 2FA SMS / Passkeys | Infra Twilio, WebAuthn — v1.1 |
|
|||
|
|
| Chromecast / AirPlay | Protocoles propriétaires — v2.0 |
|
|||
|
|
| Spectrogram / equalizer visualizer | Nice-to-have — v2.0 |
|
|||
|
|
| PayPal, Crypto payments | Intégration supplémentaire — v2.0 |
|
|||
|
|
| GraphQL API | REST suffisant pour v1.0 |
|
|||
|
|
| SDK JavaScript/Python/Go | Post-launch |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Critères d'acceptation v0.903
|
|||
|
|
|
|||
|
|
- [ ] Recherche phonétique : "hip hop" trouve "hiphop" et inversement
|
|||
|
|
- [ ] "Did you mean" : suggestion si < 3 résultats et similarity > 0.3
|
|||
|
|
- [ ] Recherches sauvegardées : CRUD, max 50 par user
|
|||
|
|
- [ ] Recommandations : collaborative filtering, au moins 10 tracks pertinentes
|
|||
|
|
- [ ] Playlists auto : "Discover Weekly" (30 tracks), "Your Top Tracks" (20 tracks)
|
|||
|
|
- [ ] Smart playlists : builder de règles, auto-update quotidien
|
|||
|
|
- [ ] Export M3U : fichier téléchargeable avec URLs valides
|
|||
|
|
- [ ] Merge/duplicate : fusion avec dedup, copie fidèle
|
|||
|
|
- [ ] Session management : liste devices, revoke, logout all
|
|||
|
|
- [ ] Login inhabituel : email envoyé, flag suspicious
|
|||
|
|
- [ ] CAPTCHA : hCaptcha sur login (3 échecs), register, reset
|
|||
|
|
- [ ] Password history : 5 derniers refusés
|
|||
|
|
- [ ] k6 load tests : tous les scénarios passent à 100 concurrent users
|
|||
|
|
- [ ] p95 latency < 200ms sur les endpoints critiques
|
|||
|
|
- [ ] Documentation : API Reference, Production Guide, README, Migration Guide
|
|||
|
|
- [ ] Tous les smoke tests v0.703–v0.903 passent
|
|||
|
|
- [ ] Tag v0.903 et tag v1.0 créés
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Critères d'acceptation v1.0
|
|||
|
|
|
|||
|
|
| Critère | Cible |
|
|||
|
|
|---------|-------|
|
|||
|
|
| Modules opérationnels | 15+ / 24 |
|
|||
|
|
| Features livrées | ~470 / 600 (78%) |
|
|||
|
|
| Score maturité produit | 8/10 |
|
|||
|
|
| Tests backend passants | 100% |
|
|||
|
|
| Frontend build | 0 errors |
|
|||
|
|
| Lighthouse Performance | ≥ 85 |
|
|||
|
|
| Lighthouse Accessibility | ≥ 90 |
|
|||
|
|
| Lighthouse PWA | ≥ 90 |
|
|||
|
|
| p95 latency | < 200ms |
|
|||
|
|
| Security headers | All present |
|
|||
|
|
| GDPR compliance | ✅ (export + deletion) |
|
|||
|
|
| Documentation | API Ref + Production Guide + README |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. Risques
|
|||
|
|
|
|||
|
|
| Risque | Mitigation |
|
|||
|
|
|--------|------------|
|
|||
|
|
| Collaborative filtering froid (pas assez de données) | Fallback sur genre/BPM similarity |
|
|||
|
|
| Smart playlists query lente | Index optimisés, cache résultat, limit 500 tracks |
|
|||
|
|
| k6 load test révèle des bottlenecks | 2 sprints buffer pour fixes perf |
|
|||
|
|
| CAPTCHA UX friction | Seulement après échecs, pas au premier login |
|
|||
|
|
| Password history migration lourde | Hasher progressivement à chaque changement |
|
|||
|
|
| Documentation effort sous-estimé | Paralléliser avec le dev, pas en dernier |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. Architecture v1.0 finale
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TB
|
|||
|
|
subgraph clients [Clients]
|
|||
|
|
WEB[Web App React PWA]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph gateway [Gateway]
|
|||
|
|
HAP[HAProxy LB]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph backend [Backend Go]
|
|||
|
|
API[API Server]
|
|||
|
|
WS[WebSocket Hub Chat]
|
|||
|
|
WRK[Background Workers]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph data [Data Layer]
|
|||
|
|
PG[(PostgreSQL 16)]
|
|||
|
|
RD[(Redis 7)]
|
|||
|
|
S3[(MinIO S3)]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph monitoring [Monitoring]
|
|||
|
|
PROM[Prometheus]
|
|||
|
|
GRAF[Grafana]
|
|||
|
|
ALERT[Alertmanager]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph external [External]
|
|||
|
|
HS[Hyperswitch Payments]
|
|||
|
|
SC[Stripe Connect]
|
|||
|
|
SG[SendGrid Email]
|
|||
|
|
GP[Giphy API]
|
|||
|
|
GEO[MaxMind GeoIP]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
WEB --> HAP
|
|||
|
|
HAP --> API
|
|||
|
|
HAP --> WS
|
|||
|
|
|
|||
|
|
API --> PG
|
|||
|
|
API --> RD
|
|||
|
|
API --> S3
|
|||
|
|
API --> HS
|
|||
|
|
API --> SC
|
|||
|
|
API --> SG
|
|||
|
|
API --> GP
|
|||
|
|
API --> GEO
|
|||
|
|
|
|||
|
|
WS --> PG
|
|||
|
|
WS --> RD
|
|||
|
|
|
|||
|
|
WRK --> PG
|
|||
|
|
WRK --> RD
|
|||
|
|
WRK --> S3
|
|||
|
|
WRK --> SG
|
|||
|
|
|
|||
|
|
API --> PROM
|
|||
|
|
WS --> PROM
|
|||
|
|
PROM --> GRAF
|
|||
|
|
PROM --> ALERT
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. Références
|
|||
|
|
|
|||
|
|
- [V0_902_RELEASE_SCOPE.md](archive/V0_902_RELEASE_SCOPE.md)
|
|||
|
|
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md)
|
|||
|
|
- [ORIGIN_FEATURES_REGISTRY.md](veza-docs/ORIGIN/ORIGIN_FEATURES_REGISTRY.md)
|
|||
|
|
- [ORIGIN_MASTER_ARCHITECTURE.md](veza-docs/ORIGIN/ORIGIN_MASTER_ARCHITECTURE.md)
|
|||
|
|
- [veza_full_features_list.md](docs/archive/root-md/veza_full_features_list.md) (600 features cible)
|
|||
|
|
- `veza-backend-api/internal/` (backend complet)
|
|||
|
|
- `apps/web/src/` (frontend complet)
|