feat: collaboration temps reel - edition simultanee (#62)
CI / lint (push) Successful in 1m1s
CI / security (push) Successful in 41s
CI / test (push) Successful in 1m47s
CI / build (push) Successful in 1m20s
CI / e2e (push) Successful in 10m36s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s

WebSocket /ws/collab/{vault}/{path} (rooms par fichier), relais Yjs/CRDT, awareness (curseurs colores + presence), persistance serveur debounce 2s, auth WS + check_vault_access, reconnexion automatique. Frontend frontend/js/collab.js, backend backend/collab.py. Tests: 17 backend (5 clients simultanes) + 10 frontend. Docs: CHANGELOG, ROADMAP, fiche features/collaboration.md, README FR/EN.
This commit is contained in:
2026-09-11 23:27:22 -04:00
parent 3f7b7847a5
commit 063b02e996
19 changed files with 1741 additions and 33 deletions
+14
View File
@@ -14,6 +14,20 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Ajouté
- **#62 Collaboration temps réel — Édition simultanée** — plusieurs utilisateurs peuvent éditer le
même document markdown en même temps, façon Google Docs. **WebSocket** : nouvel endpoint
`/ws/collab/{vault}/{path}` (une *room* par fichier) qui relaie les changements instantanément ;
authentification manuelle (cookie `access_token` ou paramètre `token`) + `check_vault_access` et
`resolve_safe_path` par connexion. **Yjs/CRDT** côté client : `Y.Doc`/`Y.Text` fusionnent les
modifications concurrentes sans conflit ni perte. **Awareness** : curseurs distants colorés et
sélections dans CodeMirror, indicateur de présence (avatars + statut) dans l'en-tête de l'éditeur.
**Persistance serveur** : le dernier texte reçu est écrit sur disque avec un debounce de 2 s
(`backend/collab.py`). **Reconnexion** automatique avec backoff exponentiel et merge de l'état au
retour. Nouveau module frontend `frontend/js/collab.js` (provider + liaison Y.Text↔CodeMirror +
curseurs distants) et `backend/collab.py` (`CollabManager`). Tests : `tests/test_collab.py`
(17 tests, dont 5 clients simultanés) et `tests/frontend/collab.test.mjs`. Détail :
[docs/features/collaboration.md](./docs/features/collaboration.md).
- **#79 Phase F — Durcissement & documentation (rate limiting, redaction, OpenAPI/MCP, E2E)** —
clôture de la feature #79. **Rate limiting** par jeton et par outil
(`backend/tools/ratelimit.py`, fenêtre glissante ; identité = JTI du jeton sinon id/username ;