From 879980ccadd711540c3b17514dcd06774cb64591 Mon Sep 17 00:00:00 2001 From: senke Date: Fri, 20 Feb 2026 18:31:29 +0100 Subject: [PATCH] chore(release): create branch release/v0.203 --- .cursorrules | 8 +- docs/FEATURE_STATUS.md | 15 +-- docs/PROJECT_STATE.md | 11 ++- docs/SCOPE_CONTROL.md | 29 +++--- docs/V0_203_RELEASE_SCOPE.md | 176 +++++++++++++++++++++++++++++++++++ 5 files changed, 210 insertions(+), 29 deletions(-) create mode 100644 docs/V0_203_RELEASE_SCOPE.md diff --git a/.cursorrules b/.cursorrules index 047c3486d..36da17357 100644 --- a/.cursorrules +++ b/.cursorrules @@ -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. diff --git a/docs/FEATURE_STATUS.md b/docs/FEATURE_STATUS.md index 8e7142066..419fbf0b2 100644 --- a/docs/FEATURE_STATUS.md +++ b/docs/FEATURE_STATUS.md @@ -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. --- diff --git a/docs/PROJECT_STATE.md b/docs/PROJECT_STATE.md index 96c7715cc..5c0fe0e5e 100644 --- a/docs/PROJECT_STATE.md +++ b/docs/PROJECT_STATE.md @@ -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 | diff --git a/docs/SCOPE_CONTROL.md b/docs/SCOPE_CONTROL.md index 919f35e49..a446832ea 100644 --- a/docs/SCOPE_CONTROL.md +++ b/docs/SCOPE_CONTROL.md @@ -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. diff --git a/docs/V0_203_RELEASE_SCOPE.md b/docs/V0_203_RELEASE_SCOPE.md new file mode 100644 index 000000000..9a617959e --- /dev/null +++ b/docs/V0_203_RELEASE_SCOPE.md @@ -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)