2026-02-21 04:13:43 +00:00
# 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
2026-02-21 04:36:33 +00:00
- [x] Chat Server compile et démarre sans erreur
- [x] Typing indicators fonctionnels (frontend + Chat Server)
- [x] Read receipts et delivered status fonctionnels
- [x] Présence (online/away/offline) visible sur au moins un écran (profil ou chat)
- [x] Feed social avec pagination et posts enrichis (track inline)
- [x] Page ou onglet exploration avec trending + suggestions
- [x] Tests : `go test ./...` OK, `npm run build` OK
- [x] Documentation : FEATURE_STATUS, PROJECT_STATE, CHANGELOG mis à jour
2026-02-21 04:13:43 +00:00
---
## 8. Checklist pré-merge
2026-02-21 04:36:33 +00:00
- [x] Tous les lots IN SCOPE terminés ou reportés (avec ticket)
- [x] Pas de régression sur v0.203
- [x] SCOPE_CONTROL.md référence V0_301_RELEASE_SCOPE.md
- [x] FEATURE_STATUS.md mis à jour
- [x] CHANGELOG v0.301
- [x] MSW handlers pour nouvelles routes (si pertinent)
2026-02-21 04:13:43 +00:00
---
## 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