# 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 - [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 --- ## 8. Checklist pré-merge - [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) --- ## 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