veza/docs/archive/V0_501_RELEASE_SCOPE.md
senke c416f51f25 docs(v0.501): Sprint 6 -- finalization and tag
- FIN-01: Add smoke test results (22/22 features pass)
- FIN-02: Update PROJECT_STATE.md for v0.501
- FIN-03: Update CHANGELOG.md with v0.501 entries
- FIN-04: Archive V0_501 scope, create V0_502 placeholder
- FIN-05: Add v0.501 retrospective
- FIN-06: Validate Go build passes
2026-02-22 18:45:07 +01:00

13 KiB

ARCHIVED — Completed 2026-02-22

V0_501_RELEASE_SCOPE.md — Phase 5 : Streaming & Cloud

Phase : 5 — Streaming & Cloud (redéfinie, ex-Education/Gear) Version précédente : v0.404 (Stabilisation post-audit) Version suivante : v0.502 Prérequis : v0.404 taguée (sécurité critique résolue, stream server intégré, CI/CD fonctionnel)


1. Contexte & Redéfinition de la Phase 5

Pourquoi redéfinir ?

La Phase 5 était initialement « Education / Gear ». Le module Education a été supprimé (voir FEATURE_STATUS.md : dossier supprimé, 0/30 features). La Phase 5 doit être redéfinie autour des axes stratégiques restants.

Choix stratégique

Veza est une plateforme audio. Le streaming (HLS, live) est le différenciateur produit. Après la stabilisation v0.404 (qui intègre le stream server et active HLS), la Phase 5 doit consolider cette fondation et ajouter les fonctionnalités cloud qui font de Veza un outil de travail pour les musiciens, pas seulement une vitrine.

Nouvelle définition Phase 5

Phase 5 — Streaming & Cloud : Rendre le streaming audio production-ready, ajouter le stockage cloud pour les musiciens, et compléter le module Gear.

Plan Phase 5 complet

Version Focus Lots
v0.501 HLS production + Cloud storage MVP + Gear avancé S1, C1, G1
v0.502 Live streaming (Go Live) + Traitement audio S2, A1
v0.503 Cloud avancé + Collaboration fichiers C2, C3

2. Périmètre v0.501

Lot S1 — HLS Streaming production-ready

Prérequis : v0.404 INT-02 terminé (stream server intégré, gRPC connecté, 1 flux E2E validé).

Le Lot S1 prend le relais pour rendre le streaming fiable et performant en production.

ID Feature Frontend Backend Effort
S1.1 Transcoding adaptatif — générer automatiquement 3 variantes HLS (128k, 256k, 320k) à l'upload. Manifest master.m3u8 avec les 3 qualités. Sélecteur qualité dans le player Stream server : FFmpeg pipeline multi-bitrate, stockage segments L
S1.2 Playback adaptatif (ABR) — le player sélectionne automatiquement la qualité selon la bande passante. Fallback progressif si un segment échoue. hls.js intégré au player avec ABR activé Endpoint /hls/:track_id/master.m3u8 avec variantes M
S1.3 Cache CDN segments HLS — configurer des headers de cache sur les segments (.ts). Redis cache pour les manifests. TTL configurable. Stream server : headers Cache-Control, Redis cache manifest M
S1.4 Monitoring streaming — métriques Prometheus : latence transcodage, erreurs segments, connexions actives, bande passante servie. Dashboard Grafana dédié. Stream server : /metrics endpoint, compteurs Prometheus M
S1.5 Waveform generation — générer un fichier waveform JSON à l'upload (FFmpeg audiowaveform). Affichage dans le player et dans TrackDetailPage. Composant WaveformDisplay, intégration player progress bar Backend : job async waveform generation, endpoint GET /tracks/:id/waveform L

Lot C1 — Cloud Storage MVP

Permettre aux musiciens de stocker et organiser leurs fichiers audio dans un espace cloud personnel.

ID Feature Frontend Backend Effort
C1.1 Migration stockage — table user_files (id, user_id, filename, path, size_bytes, mime_type, folder_id, created_at). Table user_folders (id, user_id, name, parent_id). Migration, modèles UserFile + UserFolder S
C1.2 Upload fichiers cloudPOST /cloud/files (multipart), validation type (audio/*, zip, midi, project files). Limite 500MB/fichier, quota 5GB/user (configurable). Dropzone upload dans CloudPage Handler, service, stockage S3-compatible (MinIO en dev) L
C1.3 File browser — arborescence de dossiers, navigation, renommage, déplacement, suppression. Tri par nom, date, taille. CloudBrowserView : tree sidebar + file list + breadcrumbs CRUD endpoints : GET/POST/PUT/DELETE /cloud/folders, GET /cloud/files (avec filtres folder_id, sort) L
C1.4 Prévisualisation audio — lecture inline des fichiers audio depuis le cloud sans les ajouter à la bibliothèque publique. Player minimal intégré au file browser. Mini player inline dans CloudBrowserView GET /cloud/files/:id/stream (auth, range requests) M
C1.5 Publier depuis le cloud — bouton « Publier comme track » qui crée un track à partir d'un fichier cloud, sans re-upload. Lien symbolique vers le fichier existant. Bouton dans CloudBrowserView → modale CreateTrack pré-remplie POST /cloud/files/:id/publish → crée un track lié au fichier M

Lot G1 — Gear avancé

Le module Gear (inventaire équipement) est partiellement implémenté (CRUD basique). Le compléter.

ID Feature Frontend Backend Effort
G1.1 Catégorisation — catégories prédéfinies (instruments, microphones, interfaces, DAW, plugins, accessoires). Filtrage par catégorie. Select catégorie dans GearForm, filtres dans GearListView Champ category dans gear, migration, enum validation S
G1.2 Images équipement — upload photo par item (max 3). Affichage galerie dans le détail. Upload image dans GearForm, galerie dans GearDetailView POST /inventory/gear/:id/images, stockage, migration gear_images M
G1.3 Gear sur profil public — section « Mon setup » sur le profil public, affichant les items marqués comme publics. Section GearShowcase dans ProfilePage GET /users/:username/gear (items publics), champ is_public sur gear M
G1.4 Recherche Gear — recherche textuelle dans le nom et la description des items. SearchBar dans GearListView Intégration au SearchService existant (type gear) S

3. Périmètre HORS SCOPE v0.501

Élément Raison Version cible
Live streaming (Go Live, RTMP) Nécessite infrastructure RTMP, complexité élevée v0.502 Lot S2
Collaboration fichiers cloud (partage, commentaires) Dépend de C1 stabilisé v0.503 Lot C2
Versioning fichiers cloud Feature avancée v0.503 Lot C3
Traitement audio (normalisation, trim, fade) Dépend du stream server stabilisé v0.502 Lot A1
Gamification TIER 2, hors priorité MVP v0.801+
Web3 / tokens TIER 2, hors priorité MVP v0.901+
Migration React 19 Évaluation en v0.501, migration en v0.602 v0.602

4. Prérequis techniques

Prérequis Source Statut attendu à l'entrée v0.501
Stream server intégré (gRPC fonctionnel) v0.404 INT-02 Fait
HLS activé (HLS_STREAMING=true) v0.404 INT-02 Fait
Pipeline CD fonctionnel v0.404 SEC-01 Fait
Auth stream token endpoint v0.404 SEC-03 Fait
Staging compose complet v0.404 INF-07 Fait
Object storage (MinIO/S3) Nouveau — configurer en v0.501 À faire

Note : Le Lot C1 introduit MinIO (S3-compatible) pour le stockage de fichiers. C'est la seule nouvelle dépendance infra de v0.501. En production, remplaçable par AWS S3, GCS, ou Cloudflare R2.


5. Migrations prévues

# Table Description
101 user_folders Dossiers cloud utilisateur (id, user_id, name, parent_id, created_at)
102 user_files Fichiers cloud (id, user_id, folder_id, filename, path, size_bytes, mime_type, created_at)
103 tracks (alter) Ajouter waveform_url (nullable, chemin vers waveform JSON)
104 gear (alter) Ajouter category (enum), is_public (bool default false)
105 gear_images Images équipement (id, gear_id, image_url, position, created_at)
106 user_storage_quotas Quotas stockage (user_id, max_bytes, used_bytes)

6. Nouvelles routes API

Streaming (Lot S1)

Méthode Route Auth Description
GET /hls/:track_id/master.m3u8 Stream token Manifest HLS multi-bitrate
GET /tracks/:id/waveform Optionnel Waveform JSON

Cloud (Lot C1)

Méthode Route Auth Description
GET /cloud/files Requis Lister fichiers (filtres: folder_id, sort, page)
POST /cloud/files Requis Upload fichier (multipart)
GET /cloud/files/:id Requis (owner) Détail fichier
DELETE /cloud/files/:id Requis (owner) Supprimer fichier
GET /cloud/files/:id/stream Requis (owner) Stream audio (range requests)
POST /cloud/files/:id/publish Requis (owner) Publier comme track
GET /cloud/folders Requis Lister dossiers
POST /cloud/folders Requis Créer dossier
PUT /cloud/folders/:id Requis (owner) Renommer/déplacer dossier
DELETE /cloud/folders/:id Requis (owner) Supprimer dossier (+ contenu)
GET /cloud/quota Requis Quota utilisateur

Gear (Lot G1)

Méthode Route Auth Description
POST /inventory/gear/:id/images Requis (owner) Upload image équipement
DELETE /inventory/gear/:id/images/:img_id Requis (owner) Supprimer image
GET /users/:username/gear Optionnel Gear public d'un utilisateur

7. Nouvelles pages/composants frontend

Page/Composant Route Lot
CloudPage /cloud C1
CloudBrowserView — (dans CloudPage) C1
CloudUploadModal C1
CloudFolderTree C1
CloudFilePreview (mini player) C1
WaveformDisplay — (dans player + TrackDetailPage) S1
QualitySelector — (dans player) S1
GearCategoryFilter — (dans GearListView) G1
GearImageGallery — (dans GearDetailView) G1
GearShowcase — (dans ProfilePage) G1

8. Estimation d'effort

Lot Features Effort total estimé Répartition
S1 — HLS production 5 ~3 semaines 60% backend/stream server, 40% frontend
C1 — Cloud MVP 5 ~3 semaines 50% backend, 30% frontend, 20% infra (MinIO)
G1 — Gear avancé 4 ~1 semaine 50/50

Durée totale estimée v0.501 : ~7 semaines (parallélisable à ~5 semaines si S1 et C1 avancent en parallèle)


9. Critères de succès v0.501

Critère Seuil
Un track uploadé est jouable en HLS multi-bitrate 3 qualités sélectionnables
ABR fonctionne (bascule automatique de qualité) Vérifié sur connexion throttlée
Waveform visible dans le player Sur 100% des nouveaux tracks
Cloud : upload + navigation + preview + publish fonctionnels Flux E2E validé
Quota stockage respecté Upload refusé au-delà du quota
Gear : catégories, images, profil public Visible sur /u/:username
Aucune régression sur les 14 features E2E de v0.404 Smoke test staging
Score maturité produit estimé ≥ 5/10 (vs 3/10 post-audit)

10. Risques v0.501

Risque Probabilité Impact Mitigation
FFmpeg transcoding lent sur gros fichiers Élevée UX dégradée (upload → playback long) Job async + notification quand prêt. Progress bar. Limiter à 200MB initialement.
MinIO setup complexe en prod Moyenne Retard infra Commencer avec stockage local en dev, MinIO en staging, S3 en prod. Abstraction storage interface.
Quota stockage contournable Faible Coûts imprévus Vérification atomique (transaction DB) avant tout upload. Rate limiting sur upload.
Cloud browser UX complexe Moyenne Feature sous-utilisée MVP minimaliste (flat list + 1 niveau dossiers). Tree view en v0.503.

11. Impact sur les métriques globales

Métrique Avant v0.501 Après v0.501 (estimé)
Features E2E fonctionnelles 14 ~22 (+8)
TIER 0 complétude 44% (83/190) ~49% (93/190)
Score maturité produit 3/10 ~5/10
Module 4 (Streaming) 36% ~55%
Module 9 (Cloud) 0% ~30%
Module 11 (Gear) ~40% ~60%

12. Référence

Document Rôle
V0_404_RELEASE_SCOPE.md Version précédente (stabilisation, archivée)
AUDIT_TECHNIQUE_2026-02-22.md Audit de référence
PLAN_ACTION_AUDIT.md Plan d'action détaillé
SCOPE_CONTROL.md Processus anti-scope-creep
FEATURE_STATUS.md Statut features

13. Roadmap Phase 5 complète (preview)

v0.501 (ce document)
├── S1 — HLS production (transcoding, ABR, cache, monitoring, waveform)
├── C1 — Cloud MVP (upload, browser, preview, publish)
└── G1 — Gear avancé (catégories, images, profil public)

v0.502
├── S2 — Live streaming (Go Live RTMP → HLS, chat live, modération)
└── A1 — Traitement audio (normalisation, trim, fade-in/out, bounce)

v0.503
├── C2 — Cloud partage (partager fichier/dossier, permissions, lien public)
└── C3 — Cloud avancé (versioning fichiers, historique, restore, corbeille)