docs: prepare v0.301 Phase 3 Social implementation

- Add V0_301_RELEASE_SCOPE.md: P0 (Chat Server fix), C1 (typing, read receipts),
  P1 (presence), S1 (social enrichi)
- Update SCOPE_CONTROL.md to reference v0.301
- Update PROJECT_STATE.md and FEATURE_STATUS.md
- Update .cursorrules scope to v0.301
This commit is contained in:
senke 2026-02-21 05:13:43 +01:00
parent 96eb2063b3
commit e8750df475
5 changed files with 241 additions and 21 deletions

View file

@ -1,10 +1,10 @@
# Règles de Développement UI - Projet SaaS
## 0. Scope v0.203 (priorité absolue)
## 0. Scope v0.301 (priorité absolue)
- **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)
- **Référence** : `docs/V0_301_RELEASE_SCOPE.md` et `docs/SCOPE_CONTROL.md`
- Avant toute modification : vérifier si le changement est **dans le scope v0.301**
- **Autorisé v0.301** : lots P0, C1, P1, S1 (Chat Server fix, typing/read receipts, présence, social enrichi)
- **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.

View file

@ -73,6 +73,17 @@ Ce document décrit le statut réel des fonctionnalités par rapport au code.
Voir [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) pour le détail.
## Prévu en v0.301 (Phase 3 Social)
| Lot | Feature |
|-----|---------|
| P0 | Chat Server : correction SQLx, compilation, auth WebSocket |
| C1 | Chat avancé : typing indicators, read receipts, delivered status |
| P1 | Présence : statut online/away/offline, last seen, liste en ligne |
| S1 | Social enrichi : feed pagination, posts avec track, exploration, réactions |
Voir [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md) pour le détail.
---
## Projets abandonnés

View file

@ -43,8 +43,8 @@
## 3. Prochaines étapes
### Immédiat (post v0.203)
1. **Préparer Phase 3** : Créer `V0_301_RELEASE_SCOPE.md` (chat avancé, présence, social complet)
2. **Branche** : Créer `release/v0.301` pour la prochaine itération
1. **Phase 3 prête** : `V0_301_RELEASE_SCOPE.md` créé (chat avancé, présence, social complet)
2. **Branche** : Créer `release/v0.301` pour démarrer l'implémentation
---
@ -52,7 +52,8 @@
| Document | Usage |
|----------|-------|
| [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) | Scope détaillé v0.203 |
| [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md) | Scope détaillé v0.301 (Phase 3 Social) |
| [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) | Scope v0.203 (archivé) |
| [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 |

View file

@ -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_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md)
**Version précédente** : [V0_202_RELEASE_SCOPE.md](V0_202_RELEASE_SCOPE.md)
**Référence active** : [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md)
**Version précédente** : [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md)
---
## 1. Règle d'or
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.203.**
> **Avant d'ajouter quoi que ce soit : vérifier si c'est dans le scope v0.301.**
> Si non → ne pas ajouter. Créer un ticket pour une version ultérieure.
---
## 2. Pendant la phase v0.203 (jusqu'au tag)
## 2. Pendant la phase v0.301 (jusqu'au tag)
### 2.1 Autorisé
@ -26,7 +26,7 @@
### 2.2 Interdit
- **Nouvelles features** hors scope v0.203
- **Nouvelles features** hors scope v0.301
- **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.203.
- Nouvelle route, nouveau composant, nouveau service → **STOP.** Hors scope v0.301.
- 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.203 (voir [V0_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md))
- [ ] Le changement est dans le scope v0.301 (voir [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md))
- [ ] Aucune nouvelle feature ajoutée
- [ ] Aucune régression sur les flows critiques
- [ ] Les tests passent
@ -104,7 +104,7 @@ Une PR sera rejetée si :
Utiliser le template [Feature request](.github/ISSUE_TEMPLATE/feature_request.md) avec :
- **Alignement scope** : cocher "Hors scope v0.203 — pour v0.301+"
- **Alignement scope** : cocher "Hors scope v0.301 — pour v0.302+"
- **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.203 n'est pas taguée
3. Une fois v0.203 stable, prioriser les issues "v0.301" dans V0_301_RELEASE_SCOPE.md
2. **Ne pas implémenter** tant que v0.301 n'est pas taguée
3. Une fois v0.301 stable, prioriser les issues "v0.302" dans V0_302_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_203_RELEASE_SCOPE.md si le scope est étendu (exception rare)
- Mise à jour de V0_301_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_301_RELEASE_SCOPE.md`)
1. **Créer** le document de scope de la version suivante (ex: `V0_302_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,12 +158,13 @@ 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
- v0.203 : Phase 2 Contenu — D1, K, L (queue collaborative, recherche enrichie, Social Trending) — taguée
- v0.301 : Phase 3 Social — P0, C1, P1, S1 (Chat Server fix, typing, read receipts, présence, social enrichi) — 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_203_RELEASE_SCOPE.md](V0_203_RELEASE_SCOPE.md) avant de coder.
- **Humains** : Lire [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md) avant de coder.
- **En doute ?** Ouvrir une issue "Scope clarification" plutôt que de coder.

View file

@ -0,0 +1,207 @@
# Scope v0.301 — Phase 3 Social
**Version cible** : v0.301 (X=3, Y=1)
**Prérequis** : v0.203 taguée et mergée dans main
**Objectif** : Phase 3 Social — Chat avancé, Présence, Social complet
**Dernière mise à jour** : 20 février 2026
**Effort estimé** : 5-7 semaines de développement
---
## 1. Principe directeur
> **v0.301 = première version Phase 3 (Social).**
>
> Trois axes principaux :
> 1. **Chat avancé (Lot C1)** : Typing indicators, read receipts, delivered status
> 2. **Présence (Lot P1)** : Statut en ligne/hors ligne, last seen, liste utilisateurs en ligne
> 3. **Social enrichi (Lot S1)** : Feed amélioré, posts enrichis, groupes, exploration
---
## 2. Contexte — État post v0.203
### 2.1 Livré en v0.203
| Lot | Feature | Statut |
|-----|---------|--------|
| L | Social Trending (GET /social/trending, cache Redis) | ✅ |
| K | Recherche enrichie (pg_trgm, AND/OR/NOT) | ✅ |
| D1 | Queue collaborative (sessions partagées, polling) | ✅ |
### 2.2 Fondation existante (à enrichir)
| Domaine | Existant | À ajouter v0.301 |
|---------|----------|-------------------|
| **Chat** | WebSocket (veza-chat-server), DM, rooms, messages | Typing, read receipts, delivered — Chat Server doit compiler |
| **Présence** | PresenceManager (Rust, i32 user_id), non exposé | API REST ou WS, UUID, last_seen, statut |
| **Social** | Feed, posts, groups, follows, blocks, trending | Enrichissement feed, posts audio/vidéo, exploration |
### 2.3 Blocage technique — Chat Server Rust
| Composant | État | Action v0.301 |
|-----------|------|---------------|
| veza-chat-server | ⚠️ Erreurs SQLx | **P0** : Corriger compilation avant Lot C1 |
| veza-stream-server | ⚠️ Imports manquants | Optionnel (hors scope chat) |
**Référence** : [AUDIT_CHAT_SERVER_RUST.md](../veza-chat-server/AUDIT_CHAT_SERVER_RUST.md)
---
## 3. Features IN SCOPE v0.301
### 3.1 Lot P0 — Correction Chat Server (prérequis Lot C1)
**Objectif** : Rendre le Chat Server compilable et opérationnel.
**Effort** : M (3-5 jours)
**Référence** : AUDIT_CHAT_SERVER_RUST.md, erreurs SQLx
| # | Feature | Tâche détaillée | Critère de sortie |
|---|---------|-----------------|-------------------|
| P0.1 | **SQLx** | Corriger requêtes SQLx (types UUID vs i32, colonnes manquantes) | `cargo build --release` OK |
| P0.2 | **Migrations** | Aligner schéma DB avec code (conversations, messages, read_receipts) | Migrations appliquées sans erreur |
| P0.3 | **Auth WebSocket** | Token JWT en header ou body, pas en query params | Token non exposé dans URL |
| P0.4 | **Tests** | Démarrer Chat Server, connexion WS fonctionnelle | Connexion établie, messages échangés |
**Fichiers clés** :
- `veza-chat-server/src/**/*.rs`, `veza-chat-server/migrations/`
---
### 3.2 Lot C1 — Chat avancé (typing, read receipts)
**Objectif** : Indicateurs de frappe et statuts de lecture.
**Effort** : M (4-5 jours)
**Prérequis** : Lot P0 terminé
**Référence** : Module 5.2, features 174-175 ; CHAT_DELIVERED_AND_TYPING.md
| # | Feature | Tâche détaillée | Chat Server | Frontend | Critère de sortie |
|---|---------|-----------------|-------------|----------|-------------------|
| C1.1 | **Typing indicators** | Broadcast UserTyping sur WS | IncomingMessage::Typing, broadcast OutgoingMessage::UserTyping | TypingIndicator.tsx connecté, debounce 300ms | « X est en train d'écrire... » affiché |
| C1.2 | **Read receipts** | Marquer message comme lu | Handler MarkAsRead, table read_receipts, types UUID | Envoyer MarkAsRead à réception, afficher « Vu à HH:mm » | Statut lu visible |
| C1.3 | **Delivered status** | Message reçu (pas encore lu) | Table delivered_status, broadcast MessageDelivered | Envoyer Delivered à réception, afficher « Livré » | Statut livré visible |
**Fichiers clés** :
- Chat Server : `typing_indicator.rs`, `read_receipts.rs`, `websocket/handler.rs`
- Frontend : `TypingIndicator.tsx`, `useChatInterface.ts`, `chatStore.ts`, types websocket
---
### 3.3 Lot P1 — Présence (statut, last seen)
**Objectif** : Afficher qui est en ligne et dernière activité.
**Effort** : M (3-4 jours)
**Référence** : Module 5.3, features 176-181
| # | Feature | Tâche détaillée | Backend / Chat | Frontend | Critère de sortie |
|---|---------|-----------------|----------------|----------|-------------------|
| P1.1 | **API Présence** | GET /users/:id/presence ou via WebSocket | Backend Go : table user_presence, route REST ; ou Chat Server broadcast | Composant PresenceBadge | Statut (online/away/offline) affiché |
| P1.2 | **Last seen** | Dernière activité utilisateur | Champ last_seen_at, mise à jour à chaque action | Affichage « Vu il y a X min » | Last seen visible sur profil/chat |
| P1.3 | **Liste en ligne** | Utilisateurs en ligne par salon/conversation | Chat Server : get_room_users ou équivalent | Liste dans ChatSidebar ou conversation | Liste utilisateurs en ligne affichée |
**Option A** : Backend Go — table `user_presence`, route REST, mise à jour via middleware ou jobs.
**Option B** : Chat Server — PresenceManager existant, exposer via WebSocket ou API proxy.
**Fichiers clés** :
- Backend : `user_presence` model, `presence_handler.go`, `routes_users.go`
- Chat Server : `presence.rs` (UUID au lieu de i32)
- Frontend : `PresenceBadge.tsx`, `UserAvatar.tsx`, `ChatSidebar.tsx`
---
### 3.4 Lot S1 — Social enrichi (feed, posts, exploration)
**Objectif** : Enrichir le feed social et l'exploration.
**Effort** : L (5-7 jours)
**Référence** : Module 6, features 201-215
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|---|---------|-----------------|---------|----------|-------------------|
| S1.1 | **Posts enrichis** | Posts avec track audio, image, vidéo | Vérifier modèles posts (attachments, track_id) | SocialViewFeedItem : afficher player inline si track | Post avec track jouable |
| S1.2 | **Feed pagination** | Curseur ou offset, infinite scroll | GET /social/feed?cursor=&limit=20 | useInfiniteQuery, IntersectionObserver | Scroll infini fonctionnel |
| S1.3 | **Exploration** | Page découverte (tendances, suggestions) | GET /social/explore (trending + suggested users) | Page /explore ou onglet Social | Page exploration avec trending + suggestions |
| S1.4 | **Réactions posts** | Like, comment, repost | Routes existantes (likes, comments) ; repost si manquant | Boutons like/comment/repost sur SocialViewFeedItem | Interactions fonctionnelles |
| S1.5 | **Filtres feed** | Tous / Abonnements / Groupes | Paramètre type dans GET /social/feed | Onglets ou filtre dans SocialView | Filtrage feed par source |
**Fichiers clés** :
- Backend : `social_handler.go`, `social/service.go`, routes `/social/feed`, `/social/explore`
- Frontend : `SocialViewFeed.tsx`, `SocialViewFeedItem.tsx`, `SocialViewSidebar.tsx`, `useSocialView.ts`
---
## 4. Récapitulatif par lot
| Lot | Priorité | Effort | Dépendances |
|-----|----------|--------|-------------|
| P0 | Critique | M (3-5 j) | Aucune |
| C1 | Haute | M (4-5 j) | P0 |
| P1 | Haute | M (3-4 j) | Optionnel P0 (si via Chat Server) |
| S1 | Haute | L (5-7 j) | Aucune (Backend Go) |
**Ordre recommandé** : P0 → C1, P1, S1 (P1 et S1 en parallèle possible).
---
## 5. Features HORS SCOPE v0.301
| Feature | Raison | Version cible |
|---------|--------|---------------|
| Appels audio/vidéo | Complexité, WebRTC | v0.302+ |
| Chiffrement E2E messages | Effort majeur | v0.303+ |
| Notifications push (FCM/APNs) | Infra externe | v0.302+ |
| Mode invisible avancé | P1.3 suffit pour v0.301 | v0.302 |
| Rich presence (track en cours) | Dépend player sync | v0.302 |
---
## 6. Migrations et schémas
| Migration | Description |
|-----------|-------------|
| 088 | `user_presence` (user_id, status, last_seen_at, status_message) — si Option A Lot P1 |
| — | Chat Server : migrations 001, 002 existantes ; corrections si nécessaire |
---
## 7. Critères de livraison v0.301
- [ ] Chat Server compile et démarre sans erreur
- [ ] Typing indicators fonctionnels (frontend + Chat Server)
- [ ] Read receipts et delivered status fonctionnels
- [ ] Présence (online/away/offline) visible sur au moins un écran (profil ou chat)
- [ ] Feed social avec pagination et posts enrichis (track inline)
- [ ] Page ou onglet exploration avec trending + suggestions
- [ ] Tests : `go test ./...` OK, `npm run build` OK
- [ ] Documentation : FEATURE_STATUS, PROJECT_STATE, CHANGELOG mis à jour
---
## 8. Checklist pré-merge
- [ ] Tous les lots IN SCOPE terminés ou reportés (avec ticket)
- [ ] Pas de régression sur v0.203
- [ ] SCOPE_CONTROL.md référence V0_301_RELEASE_SCOPE.md
- [ ] FEATURE_STATUS.md mis à jour
- [ ] CHANGELOG v0.301
- [ ] MSW handlers pour nouvelles routes (si pertinent)
---
## 9. Transition vers v0.302
À l'issue de v0.301 :
- Phase 3 Social démarre (~390 / 600 features)
- Prochaine version : **v0.302** — Chat (appels, notifications push), Social (groupes avancés)
- Document de scope : `V0_302_RELEASE_SCOPE.md` (à créer après tag v0.301)
---
## Références
- [V0_203_RELEASE_SCOPE.md](V0_203_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)
- [AUDIT_CHAT_SERVER_RUST.md](../veza-chat-server/AUDIT_CHAT_SERVER_RUST.md) — État Chat Server
- [CHAT_DELIVERED_AND_TYPING.md](../veza-chat-server/docs/CHAT_DELIVERED_AND_TYPING.md) — Spec typing/receipts