207 lines
8.1 KiB
Markdown
207 lines
8.1 KiB
Markdown
# ObsiGate — Roadmap
|
||
|
||
> **Version :** 2.0.0-dev | **Dernière mise à jour :** 2026-06-04
|
||
> Voir aussi [CHANGELOG.md](./CHANGELOG.md), [docs/ROADMAP.md](./docs/ROADMAP.md), [AUDIT_TECHNIQUE.md](./docs/AUDIT_TECHNIQUE_2026-05-27.md)
|
||
|
||
---
|
||
|
||
## ✅ Complété (v1.0.0 → v1.9.0)
|
||
|
||
### AI Editor (v1.7.0)
|
||
- [x] Toolbar dropdown menus : Edit, Tone, Translate, Generate, Rewrite, Toolbox
|
||
- [x] Multi-provider : DeepSeek, OpenRouter, Gemini
|
||
- [x] 16 endpoints REST `/api/ai/{action}` + backend `ai.py` / `ai_routes.py`
|
||
- [x] Auto-save silencieux (2s debounce), loading toasts, cache toolbar si pas de clé API
|
||
- [x] Messages d'erreur clairs (401 → clé invalide, etc.)
|
||
|
||
### Vue graphe — Phases 3 & 4 (v1.6.0)
|
||
- [x] Filtre par type (dossier/fichier/.md/autre), mode focus, plein écran, export PNG
|
||
- [x] Barnes-Hut O(n log n), cache graphe
|
||
- [x] Header flat design, sticky panels, navigation historique ← → ↑
|
||
- [x] Ctrl+survol → aperçu contenu formaté
|
||
|
||
### Performance & CI/CD (v1.6.0)
|
||
- [x] `sortedcontainers` — O(log n) insert/remove dans l'index inversé
|
||
- [x] CI/CD Pipeline Gitea Actions (lint → test → security → build)
|
||
- [x] Ruff linting — 0 erreur
|
||
- [x] Mypy type checking — 0 erreur
|
||
- [x] Pytest — **284 tests, 70% coverage** (main.py 61%, router.py 67%, watcher.py 62%)
|
||
- [x] Tests API main.py (84 tests), Auth API (13 tests), Watcher mocké (14 tests)
|
||
- [x] Bandit SAST + Pip-audit + Docker build + coverage artifact
|
||
|
||
### Split app.js en modules ES (v1.5.1)
|
||
- [x] 8 875 lignes → 16 modules dans `frontend/js/`
|
||
- [x] Validateur imports/exports CI
|
||
- [x] Tests unitaires frontend (Node.js)
|
||
|
||
### Stemming français (v1.5.1)
|
||
- [x] `snowballstemmer` — recherche accent-insensitive et morphologique
|
||
- [x] Performance O(T) au lieu de O(S×T), crash guard IndexError
|
||
|
||
### Fonctionnalités avancées (v1.5.0)
|
||
- [x] Publication publique de documents (lien partageable avec token)
|
||
- [x] Webhooks HTTP avec signature HMAC-SHA256
|
||
- [x] Dashboard statistiques (fichiers, tags, taille, vaults)
|
||
- [x] Documentation OpenAPI enrichie (Swagger + Redoc)
|
||
- [x] Gestion des conflits Syncthing
|
||
- [x] Index inversé incrémental (hook pattern)
|
||
|
||
### Sécurité (v1.4.0)
|
||
- [x] JWT + Argon2id
|
||
- [x] Rate limiting login (IP + compte)
|
||
- [x] Audit log avec rotation
|
||
- [x] Backup automatique avant écriture
|
||
- [x] Redaction de secrets
|
||
- [x] Headers CSP
|
||
- [x] Protection path traversal
|
||
- [x] Utilisateur non-root Docker
|
||
|
||
### UX / Qualité
|
||
- [x] `.dockerignore`, `.env` → `.env.example`, Ruff config, Mypy config
|
||
- [x] Compression GZip (SSE-safe), Cache-Control immutable
|
||
- [x] Recherche sans I/O disque
|
||
- [x] Backlinks panel
|
||
- [x] Fichiers non-supportés (UI download)
|
||
|
||
---
|
||
|
||
## 🔜 Prochaines étapes (P1/P2)
|
||
|
||
### ✅ 1. Tests & Couverture — FAIT
|
||
- Coverage **49% → 70%** ✅
|
||
- ~~Cibles : main.py (26%), watcher.py (23%), router.py (37%)~~ — **FAIT**
|
||
- ~~Tests E2E Playwright (fondations)~~ — reste à faire
|
||
|
||
### ✅ 2. Export PDF — FAIT
|
||
|
||
### ✅ 3. Palette de commandes (Ctrl+ALT+SPACE) — FAIT
|
||
|
||
### ✅ 4. Barre d'outils mobile + Palette fichiers/commandes 📱 — FAIT
|
||
|
||
### ✅ 5. Drag & drop de fichiers — FAIT
|
||
|
||
### ✅ 6. Diff viewer backups — FAIT (v1.9.0)
|
||
- Comparer versions sauvegardées, diff unifié + côte à côte, restauration
|
||
- Backups créés uniquement sur sauvegarde manuelle (Ctrl+S), pas sur auto-save
|
||
- Gestionnaire de backups : page complète avec filtre, suppression, purge
|
||
- Auto-nettoyage : limite configurable `max_backups_per_file` (défaut 10)
|
||
|
||
### ✅ 7. Fichiers récents par vault — FAIT
|
||
|
||
### ✅ 8. Git tags semver — FAIT (v1.8.0, v1.9.0 à venir)
|
||
|
||
### ✅ 9. Filtres search avancés — FAIT
|
||
- Opérateurs `created:`, `modified:`, `size:`
|
||
|
||
### ✅ 10. Déduplication IGNORED_DIRS — FAIT
|
||
|
||
### ✅ 11. Indicateur AI Actif — FAIT
|
||
|
||
### ✅ 12. Page d'accueil de voute — FAIT (récursif)
|
||
|
||
### ✅ 13. Indexation non-bloquante — FAIT
|
||
|
||
---
|
||
|
||
## 📋 Reste à faire (P2/P3)
|
||
|
||
### ✅ 15. Visualisation backup dans le gestionnaire — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] Clic sur un backup → panneau latéral avec aperçu du contenu (limité à 100 Ko)
|
||
- [x] Endpoint `GET /api/backups/content?path=...`
|
||
- [x] Panneau refermable avec bouton X
|
||
|
||
### ✅ 16. Purge par vault dans le gestionnaire — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] Bouton rouge « Vider » par vault dans le gestionnaire
|
||
- [x] Confirmation avant suppression
|
||
|
||
### ✅ 17. Compression des backups — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟢
|
||
- [x] Endpoint `POST /api/backups/compress` avec params `older_than_days` et `dry_run`
|
||
- [x] Compression gzip niveau 6, suppression du .bak original si plus petit
|
||
- [x] Skip si la compression n'aide pas (fichier déjà petit)
|
||
|
||
### ✅ 18. Backup automatique périodique — FAIT
|
||
- **Effort** : 1 jour | **Impact** : 🟡
|
||
- [x] Endpoint `POST /api/backups/auto` avec param `since_hours` (défaut 24)
|
||
- [x] Backup de tous les fichiers modifiés depuis N heures, tous vaults
|
||
- [x] Utilisable via cron job externe ou appel manuel
|
||
|
||
### ✅ 19. Restauration depuis le gestionnaire — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] Bouton « Restaurer » (icône rotate-ccw) sur chaque backup dans le gestionnaire
|
||
- [x] Extraction automatique du timestamp depuis le nom du fichier backup
|
||
- [x] Confirmation avant restauration, toast de succès
|
||
|
||
---
|
||
|
||
## 📋 Reste à faire (P1/P2)
|
||
|
||
### ✅ 20. Mermaid.js — Initialisation et Sécurité — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] CDN mermaid@11 depuis jsdelivr
|
||
- [x] Module `mermaid-viewer.js` avec `securityLevel: 'strict'` et `startOnLoad: false`
|
||
|
||
### ✅ 21. Mermaid.js — Moteur de Rendu Dynamique — FAIT
|
||
- **Effort** : 1 jour | **Impact** : 🟡
|
||
- [x] `renderMermaidBlocks(container)` cible `<code class="language-mermaid">`
|
||
- [x] Validation via `mermaid.parse()` en try/catch
|
||
- [x] Succès → injection SVG, échec → bloc d'erreur stylisé
|
||
|
||
### ✅ 22. Mermaid.js — Templates — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] `MERMAID_TEMPLATES` avec 22 types (core + avancés + beta)
|
||
|
||
### ✅ 23. Mermaid.js — UX Éditeur — FAIT
|
||
- **Effort** : 1 jour | **Impact** : 🟡
|
||
- [x] Live preview avec debounce 500ms dans l'éditeur
|
||
- [x] Mise à jour automatique au changement de contenu
|
||
|
||
### ✅ 24. Mermaid.js — Thème, Export, Obsidian — FAIT
|
||
- **Effort** : 1 jour | **Impact** : 🟡
|
||
- [x] `updateMermaidTheme(isDark)` pour synchronisation dark/light
|
||
- [x] Export SVG + PNG (via canvas)
|
||
- [x] Pré-processeur Obsidian : `[[liens]]`, `![[img]]`, `==highlight==`
|
||
|
||
### ✅ 25. Mermaid.js — Rendu inline viewer — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] `renderMermaidBlocks()` appelé après rendu Markdown dans viewer.js
|
||
|
||
### ✅ 26. Mermaid.js — Live preview — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- [x] Panneau `#mermaid-live-preview` sous l'éditeur, debounce 500ms
|
||
- [x] Extraction auto des blocs ````mermaid` du contenu
|
||
|
||
### ✅ 27. Mermaid.js — Zoom et Pan — FAIT
|
||
- **Effort** : 0.5 jour | **Impact** : 🟢
|
||
- [x] Zoom molette, drag (grab/grabbing), boutons +/- et Reset
|
||
|
||
### ✅ 28. Mermaid.js — Mode plein écran — FAIT
|
||
- **Effort** : 0.3 jour | **Impact** : 🟢
|
||
- [x] Overlay plein écran, touche Échap, clic fond pour fermer
|
||
|
||
### ✅ 29. Mermaid.js — Mode focus — FAIT
|
||
- **Effort** : 0.3 jour | **Impact** : 🟡
|
||
- [x] `setupFocusMode()` — clic sur diagramme → panneau latéral 480px
|
||
- [x] Bouton X pour fermer, mise à jour au re-clic
|
||
|
||
### 14. Tests E2E Playwright
|
||
- **Effort** : 2-3 jours | **Impact** : 🟢
|
||
- Tests navigateur automatises (login, navigation, recherche, sauvegarde)
|
||
|
||
---
|
||
|
||
## 📋 Backlog (P3/P4 — Long terme)
|
||
|
||
- **Mode hors-ligne PWA complet** : IndexedDB pour recherche offline + synchro
|
||
- **OAuth2/OIDC** : Google, GitHub, authentification SSO
|
||
- **Plugins système** : Extensions utilisateur (custom renderers, search operators)
|
||
- **Collaboration temps réel** : WebSocket + CRDT (Yjs) pour édition simultanée
|
||
- **i18n** : Support anglais + français
|
||
- **MFA** : TOTP/WebAuthn
|
||
- **Thèmes personnalisés** : CSS variables exposées
|
||
- **Export multi-formats** : HTML, MD bundle, ePub
|
||
- **Notifications web** : Push API pour changements de vault
|
||
- **Health check enrichi** : État de l'index, mémoire, uptime, clients SSE
|