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:
parent
96eb2063b3
commit
e8750df475
5 changed files with 241 additions and 21 deletions
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
207
docs/V0_301_RELEASE_SCOPE.md
Normal file
207
docs/V0_301_RELEASE_SCOPE.md
Normal 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
|
||||
Loading…
Reference in a new issue