chore(release): create branch release/v0.203
This commit is contained in:
parent
ede3546f4b
commit
879980ccad
5 changed files with 210 additions and 29 deletions
|
|
@ -1,10 +1,10 @@
|
|||
# Règles de Développement UI - Projet SaaS
|
||||
|
||||
## 0. Scope v0.202 (priorité absolue)
|
||||
## 0. Scope v0.203 (priorité absolue)
|
||||
|
||||
- **Référence** : `docs/V0_202_RELEASE_SCOPE.md` et `docs/SCOPE_CONTROL.md`
|
||||
- Avant toute modification : vérifier si le changement est **dans le scope v0.202**
|
||||
- **Autorisé v0.202** : lots G, H, F, C, D (Recherche avancée, Analytics créateur, Seller, Player, Queue)
|
||||
- **Référence** : `docs/V0_203_RELEASE_SCOPE.md` et `docs/SCOPE_CONTROL.md`
|
||||
- Avant toute modification : vérifier si le changement est **dans le scope v0.203**
|
||||
- **Autorisé v0.203** : lots D1, K, L (Queue collaborative, Recherche phonétique/booléenne, Social Trending)
|
||||
- **Interdit** : nouvelles routes/pages hors scope, nouvelles dépendances (sauf correctif sécurité)
|
||||
- En cas de doute : ne pas ajouter. Créer une issue pour une version ultérieure.
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ Ce document décrit le statut réel des fonctionnalités par rapport au code.
|
|||
| Feature | Limitation | Version cible |
|
||||
|---------|------------|--------------|
|
||||
| **Go Live** (streaming vidéo) | Non implémenté — toast « coming soon » conservé | v0.703 |
|
||||
| **Social Trending** (tags tendance) | SocialViewTrending utilise tags statiques ; pas d'API `/social/trending` | v0.203 |
|
||||
| **Social Trending** (tags tendance) | SocialViewTrending utilise tags statiques ; API `/social/trending` prévue v0.203 (Lot L) | v0.203 |
|
||||
| **2FA SMS** | Option « Envoyer par SMS » pendant la vérification 2FA — requiert infra Twilio + users.phone_number | v0.104 |
|
||||
| **Passkeys / WebAuthn** | Login sans mot de passe — requiert go-webauthn, table webauthn_credentials, frontend navigator.credentials | v0.104 |
|
||||
|
||||
|
|
@ -64,12 +64,15 @@ Ce document décrit le statut réel des fonctionnalités par rapport au code.
|
|||
| C | Player (crossfade, gapless preload, PiP) |
|
||||
| D | Autoplay (GET /tracks/recommendations, section « À écouter ensuite » dans PlayerQueue) |
|
||||
|
||||
## Prochaines fonctionnalités v0.203+
|
||||
## Prochaines fonctionnalités v0.203 (scope défini)
|
||||
|
||||
| Feature | Priorité |
|
||||
|---------|----------|
|
||||
| Queue collaborative (D1) | Basse |
|
||||
| Recherche phonétique, booléenne | v0.203+ |
|
||||
| Lot | Feature |
|
||||
|-----|---------|
|
||||
| D1 | Queue collaborative (session partagée, sync temps réel) |
|
||||
| K | Recherche phonétique (fuzzy), opérateurs booléens (AND/OR/NOT) |
|
||||
| L | Social Trending (API GET /social/trending, brancher SocialViewTrending) |
|
||||
|
||||
Voir [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) pour le détail.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -39,12 +39,13 @@
|
|||
|
||||
### Immédiat (préparation v0.203)
|
||||
1. **Créer la branche** : `git checkout -b release/v0.203`
|
||||
2. **Définir** le scope dans V0_203_RELEASE_SCOPE.md
|
||||
2. **Lire** [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md)
|
||||
3. **PR** : `gh pr create --base main --head release/v0.203 --title "Release v0.203"`
|
||||
|
||||
### Cibles v0.203+
|
||||
- Queue collaborative (D1)
|
||||
- Recherche phonétique, booléenne
|
||||
### Cibles v0.203 (scope défini)
|
||||
- **D1** : Queue collaborative (session partagée, sync)
|
||||
- **K** : Recherche phonétique + opérateurs booléens
|
||||
- **L** : Social Trending (API GET /social/trending)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -52,7 +53,7 @@
|
|||
|
||||
| Document | Usage |
|
||||
|----------|-------|
|
||||
| [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md) | Scope détaillé v0.202 |
|
||||
| [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) | Scope détaillé v0.203 |
|
||||
| [SCOPE_CONTROL.md](SCOPE_CONTROL.md) | Anti-scope-creep, workflow |
|
||||
| [FEATURE_STATUS.md](FEATURE_STATUS.md) | Statut des features par domaine |
|
||||
| [CHANGELOG.md](../CHANGELOG.md) | Historique des versions |
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
# Contrôle du scope — Anti-scope-creep
|
||||
|
||||
**Objectif** : Éviter toute dérive de scope. Chaque modification doit être intentionnelle et traçable.
|
||||
**Référence active** : [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md)
|
||||
**Version précédente** : [V0_201_RELEASE_SCOPE.md](V0_201_RELEASE_SCOPE.md)
|
||||
**Référence active** : [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md)
|
||||
**Version précédente** : [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. Règle d'or
|
||||
|
||||
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.202.**
|
||||
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.203.**
|
||||
> Si non → ne pas ajouter. Créer un ticket pour une version ultérieure.
|
||||
|
||||
---
|
||||
|
||||
## 2. Pendant la phase v0.202 (jusqu'au tag)
|
||||
## 2. Pendant la phase v0.203 (jusqu'au tag)
|
||||
|
||||
### 2.1 Autorisé
|
||||
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
### 2.2 Interdit
|
||||
|
||||
- **Nouvelles features** hors scope v0.202
|
||||
- **Nouvelles features** hors scope v0.203
|
||||
- **Nouvelles routes** ou pages hors scope
|
||||
- **Nouvelles dépendances** (sauf correctif sécurité)
|
||||
- **Changements de comportement** sur les features HORS SCOPE
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
- Non → **STOP.** Est-ce une correction de bug ? Si oui, la feature est-elle IN SCOPE ?
|
||||
|
||||
2. **Mon changement ajoute-t-il du code ?**
|
||||
- Nouvelle route, nouveau composant, nouveau service → **STOP.** Hors scope v0.202.
|
||||
- Nouvelle route, nouveau composant, nouveau service → **STOP.** Hors scope v0.203.
|
||||
- Correction, refactoring, test → OK si lié à une feature IN SCOPE.
|
||||
|
||||
3. **Mes tests passent-ils ?**
|
||||
|
|
@ -81,7 +81,7 @@ Format : `type(scope): description`
|
|||
|
||||
Dans chaque PR, le relecteur doit valider :
|
||||
|
||||
- [ ] Le changement est dans le scope v0.202 (voir [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md))
|
||||
- [ ] Le changement est dans le scope v0.203 (voir [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md))
|
||||
- [ ] Aucune nouvelle feature ajoutée
|
||||
- [ ] Aucune régression sur les flows critiques
|
||||
- [ ] Les tests passent
|
||||
|
|
@ -98,13 +98,13 @@ Une PR sera rejetée si :
|
|||
|
||||
---
|
||||
|
||||
## 5. Proposer une feature pour APRÈS v0.202
|
||||
## 5. Proposer une feature pour APRÈS v0.203
|
||||
|
||||
### 5.1 Template
|
||||
|
||||
Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md) avec :
|
||||
|
||||
- **Alignement scope** : cocher "Hors scope v0.202 — pour v0.203+"
|
||||
- **Alignement scope** : cocher "Hors scope v0.203 — pour v0.301+"
|
||||
- **Justification** : pourquoi cette feature est nécessaire
|
||||
- **Effort estimé** : S / M / L / XL
|
||||
- **Dépendances** : quelles features v0.202 doivent être stables avant
|
||||
|
|
@ -112,8 +112,8 @@ Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md
|
|||
### 5.2 Workflow
|
||||
|
||||
1. Créer une issue avec le template
|
||||
2. **Ne pas implémenter** tant que v0.202 n'est pas taguée
|
||||
3. Une fois v0.202 stable, prioriser les issues "v0.203" dans un nouveau document de scope
|
||||
2. **Ne pas implémenter** tant que v0.203 n'est pas taguée
|
||||
3. Une fois v0.203 stable, prioriser les issues "v0.301" dans V0_301_RELEASE_SCOPE.md
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -140,13 +140,13 @@ Pour tout cas ambigu :
|
|||
|
||||
- Ouvrir une issue "Scope clarification"
|
||||
- Décision documentée dans l'issue
|
||||
- Mise à jour de V0_202_RELEASE_SCOPE.md si le scope est étendu (exception rare)
|
||||
- Mise à jour de V0_203_RELEASE_SCOPE.md si le scope est étendu (exception rare)
|
||||
|
||||
---
|
||||
|
||||
## 7. Après le tag d'une version
|
||||
|
||||
1. **Créer** le document de scope de la version suivante (ex: `V0_203_RELEASE_SCOPE.md`)
|
||||
1. **Créer** le document de scope de la version suivante (ex: `V0_301_RELEASE_SCOPE.md`)
|
||||
2. **Définir** explicitement les nouvelles features autorisées
|
||||
3. **Mettre à jour** la référence active dans ce document (section header)
|
||||
4. **Reprendre** ce processus avec le nouveau document de scope
|
||||
|
|
@ -158,11 +158,12 @@ Pour tout cas ambigu :
|
|||
- v0.103 : Complétion Phase 1 Fondation — Auth A1/A4, Profils B1-B3 (taguée)
|
||||
- v0.201 : Phase 2 Contenu — Lot E Métadonnées (BPM, key, lyrics, tags) — taguée
|
||||
- v0.202 : Phase 2 Contenu — Lots G, H, F, C, D — taguée
|
||||
- v0.203 : Phase 2 Contenu — D1, K, L (queue collaborative, recherche enrichie, Social Trending) — en préparation
|
||||
|
||||
---
|
||||
|
||||
## 8. Rappel pour les contributeurs
|
||||
|
||||
- **Cursor / IA** : Les règles dans `.cursorrules` rappellent de vérifier le scope avant toute modification.
|
||||
- **Humains** : Lire [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md) avant de coder.
|
||||
- **Humains** : Lire [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) avant de coder.
|
||||
- **En doute ?** Ouvrir une issue "Scope clarification" plutôt que de coder.
|
||||
|
|
|
|||
176
docs/V0_203_RELEASE_SCOPE.md
Normal file
176
docs/V0_203_RELEASE_SCOPE.md
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
# Scope v0.203 — Phase 2 Contenu (finalisation)
|
||||
|
||||
**Version cible** : v0.203 (X=2, Y=3)
|
||||
**Prérequis** : v0.202 taguée et mergée dans main
|
||||
**Objectif** : Finaliser Phase 2 — Queue collaborative, recherche enrichie, Social Trending
|
||||
**Dernière mise à jour** : 20 février 2026
|
||||
**Effort estimé** : 3-4 semaines de développement
|
||||
|
||||
---
|
||||
|
||||
## 1. Principe directeur
|
||||
|
||||
> **v0.203 = dernière version Phase 2 (Contenu) avant Phase 3 (Social).**
|
||||
>
|
||||
> Trois axes principaux :
|
||||
> 1. **Queue collaborative (D1)** : Partager une queue en session
|
||||
> 2. **Recherche enrichie (Lot K)** : Phonétique, opérateurs booléens
|
||||
> 3. **Social Trending (Lot L)** : API `/social/trending`, brancher l’UI existante
|
||||
|
||||
---
|
||||
|
||||
## 2. Contexte — État post v0.202
|
||||
|
||||
### 2.1 Livré en v0.202
|
||||
|
||||
| Lot | Feature | Statut |
|
||||
|-----|---------|--------|
|
||||
| G | Recherche avancée (musical_key, tri pertinence, autocomplete, facettes, historique) | ✅ |
|
||||
| H | Analytics créateur (stats, charts, completion rate, export) | ✅ |
|
||||
| F | Seller dashboard (GET /sell/stats, liste produits) | ✅ |
|
||||
| C | Player (crossfade, gapless, PiP) | ✅ |
|
||||
| D2 | Autoplay (GET /tracks/recommendations) | ✅ |
|
||||
|
||||
### 2.2 Fondation existante (à enrichir)
|
||||
|
||||
| Domaine | Existant | À ajouter v0.203 |
|
||||
|---------|----------|-------------------|
|
||||
| **Queue** | Queue sync, PlayerQueue, autoplay | D1 : session partagée, routes queue collaborative |
|
||||
| **Recherche** | GET /search, /tracks/search, suggestions, filters | Phonétique (fuzzy), opérateurs booléens (AND/OR/NOT) |
|
||||
| **Social** | Feed, posts, groups, SocialViewTrending (statique) | API GET /social/trending basée sur données réelles |
|
||||
|
||||
---
|
||||
|
||||
## 3. Features IN SCOPE v0.203
|
||||
|
||||
### 3.1 Lot D1 — Queue collaborative (priorité moyenne)
|
||||
|
||||
**Objectif** : Permettre à plusieurs utilisateurs de partager une queue en session.
|
||||
**Effort** : M (4-5 jours)
|
||||
**Référence** : Module 4.2, feature 134 (veza_full_features_list)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|-----------------|---------|----------|-------------------|
|
||||
| D1.1 | **Session queue** | Créer/joindre une session de queue partagée | Modèle `queue_session`, routes POST/GET/DELETE `/queue/session` | UI création / lien partage | Session créée, lien généré |
|
||||
| D1.2 | **Sync temps réel** | Participants voient la même queue | WebSocket ou polling ; extension queue API | PlayerQueue affiche queue partagée si session active | Ajout/suppression visible par tous |
|
||||
| D1.3 | **Contrôles** | Qui peut modifier la queue | Rôle créateur vs participant (optionnel v1) | Bouton « Passer la main » ou permissions | Au moins créateur peut modifier |
|
||||
|
||||
**Fichiers clés** :
|
||||
- Backend : `queue_service.go`, `queue_handler.go`, `routes_queue.go`, modèles queue_session
|
||||
- Frontend : `PlayerQueue.tsx`, `useQueueSync.ts`, queue API service
|
||||
- Chat/WebSocket : réutilisation ou extension pour sync queue (si pertinent)
|
||||
|
||||
---
|
||||
|
||||
### 3.2 Lot K — Recherche enrichie (priorité haute)
|
||||
|
||||
**Objectif** : Améliorer la pertinence et la flexibilité de la recherche.
|
||||
**Effort** : M (3-4 jours)
|
||||
**Référence** : Module 11, features 361, 363
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|-----------------|---------|----------|-------------------|
|
||||
| K1 | **Recherche phonétique** | Tolérance aux fautes de frappe, similarité sonore | Extension Postgres `pg_trgm` ou équivalent ; `similarity()` dans TrackSearchService | Aucun (transparent) | « synthewave » → résultats « synthwave » |
|
||||
| K2 | **Opérateurs booléens** | AND, OR, NOT, guillemets pour phrase exacte | Parser query dans SearchService / TrackSearchService ; mapping vers tsquery ou ILIKE | Option avancée ou syntaxe dans input | `rock AND jazz` → intersection ; `"love song"` → phrase exacte |
|
||||
|
||||
**Fichiers clés** :
|
||||
- Backend : `track_search_service.go`, `search_service.go`, migrations (pg_trgm si nécessaire)
|
||||
- Frontend : `SearchPageHeader.tsx`, aide contextuelle sur syntaxe booléenne (tooltip)
|
||||
|
||||
---
|
||||
|
||||
### 3.3 Lot L — Social Trending (priorité haute)
|
||||
|
||||
**Objectif** : Remplacer les tags statiques par des données réelles.
|
||||
**Effort** : S (2-3 jours)
|
||||
**Référence** : Module 6, feature 214 ; SocialViewTrending existant
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|-----------------|---------|----------|-------------------|
|
||||
| L1 | **API Trending** | Hashtags/posts/tracks tendance | Route GET `/social/trending` ; agrégation posts récents, comptage hashtags | Brancher SocialViewTrending sur l’API | Données dynamiques affichées |
|
||||
| L2 | **Cache / perf** | Éviter agrégation à chaque requête | Cache Redis 15–60 min ou matview | — | Latence < 500 ms |
|
||||
|
||||
**Fichiers clés** :
|
||||
- Backend : `social_handler.go` ou nouveau `trending_handler.go`, `routes_social.go`
|
||||
- Frontend : `SocialViewTrending.tsx`, service `socialService.ts` ou `trendingService.ts`
|
||||
|
||||
---
|
||||
|
||||
## 4. Récapitulatif par lot
|
||||
|
||||
| Lot | Nom | Priorité | Effort | Features |
|
||||
|-----|-----|----------|--------|----------|
|
||||
| **D1** | Queue collaborative | Moyenne | M (4-5j) | 3 |
|
||||
| **K** | Recherche enrichie | Haute | M (3-4j) | 2 |
|
||||
| **L** | Social Trending | Haute | S (2-3j) | 2 |
|
||||
| | **TOTAL** | | **9-12j** | **7** |
|
||||
|
||||
---
|
||||
|
||||
## 5. Features HORS SCOPE v0.203
|
||||
|
||||
| Feature | Raison | Version cible |
|
||||
|---------|--------|---------------|
|
||||
| Collaborative filtering (rec. ML) | Nécessite historique riche, complexité | v0.301+ |
|
||||
| Correction orthographique (K3) | Dépendance externe, effort | v0.301+ |
|
||||
| Recherches sauvegardées | UX secondaire | v0.301+ |
|
||||
| 2FA SMS, Passkeys | v0.104 dédié | v0.104 |
|
||||
| Go Live vidéo | v0.703 | v0.703 |
|
||||
|
||||
---
|
||||
|
||||
## 6. Ordre de livraison recommandé
|
||||
|
||||
| Semaine | Lots | Activités |
|
||||
|---------|------|-----------|
|
||||
| **S1** | L (Social Trending) | L1–L2 : API /social/trending, cache, brancher SocialViewTrending |
|
||||
| **S2** | K (Recherche) | K1–K2 : phonétique, booléens |
|
||||
| **S3** | D1 (Queue collaborative) | D1.1–D1.3 : session, sync, contrôles |
|
||||
| **S4** | Stabilisation | Tests, docs, polish Phase 2 |
|
||||
|
||||
---
|
||||
|
||||
## 7. Branche et workflow
|
||||
|
||||
- **Branche** : `release/v0.203`
|
||||
- **Format commit** : `feat(scope): description` (ex: `feat(search): add boolean operators`)
|
||||
- **Référence scope** : [SCOPE_CONTROL.md](SCOPE_CONTROL.md) → v0.203
|
||||
- **PR** : `gh pr create --base main --head release/v0.203 --title "Release v0.203"`
|
||||
|
||||
---
|
||||
|
||||
## 8. Critères de stabilité v0.203
|
||||
|
||||
### 8.1 Build & compilation
|
||||
- [ ] `go build ./...` — 0 erreur
|
||||
- [ ] `npm run build` — 0 erreur
|
||||
- [ ] `npx tsc --noEmit` — 0 erreur
|
||||
|
||||
### 8.2 Tests
|
||||
- [ ] `go test ./...` — pas de régression
|
||||
- [ ] Tests unitaires sur nouveaux services (search, trending, queue session)
|
||||
- [ ] E2E : recherche booléenne, trending (si applicable)
|
||||
|
||||
### 8.3 Documentation
|
||||
- [ ] FEATURE_STATUS.md mis à jour
|
||||
- [ ] CHANGELOG v0.203
|
||||
- [ ] MSW handlers pour `/social/trending`, `/queue/session` (si pertinent)
|
||||
|
||||
---
|
||||
|
||||
## 9. Transition vers Phase 3 (Social)
|
||||
|
||||
À l’issue de v0.203 :
|
||||
- Phase 2 Contenu est **complète** (~360 / 600 features)
|
||||
- Prochaine version : **v0.301** — Phase 3 Social (chat avancé, présence, social complet)
|
||||
- Document de scope : `V0_301_RELEASE_SCOPE.md` (à créer après tag v0.203)
|
||||
|
||||
---
|
||||
|
||||
## Références
|
||||
|
||||
- [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md) — Version précédente
|
||||
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus anti-scope-creep
|
||||
- [FEATURE_STATUS.md](FEATURE_STATUS.md) — Statut des features
|
||||
- [PROJECT_STATE.md](PROJECT_STATE.md) — État actuel du projet
|
||||
- [veza_full_features_list.md](archive/root-md/veza_full_features_list.md) — Cible v1.0 (600 features)
|
||||
Loading…
Reference in a new issue