176 lines
8.0 KiB
Markdown
176 lines
8.0 KiB
Markdown
# ObsiGate — Roadmap
|
||
|
||
> **Version :** 1.7.0 | **Dernière mise à jour :** 2026-06-02
|
||
> 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.7.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 (par priorité)
|
||
|
||
### ✅ 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
|
||
- WeasyPrint déjà intégré ✅
|
||
- Route API `/api/file/{vault_name}/pdf` ✅
|
||
- Bouton UI "PDF" dans les actions fichier ✅
|
||
- Export dans la vue publique `/s/{token}/pdf` ✅
|
||
- GTK/Pango installé dans le Dockerfile ✅
|
||
|
||
### ✅ 3. Palette de commandes (Ctrl+ALT+SPACE) — FAIT
|
||
- Navigation rapide fichiers + commandes (> prefix) ✅
|
||
- Module `frontend/js/palette.js` + intégré dans app.js ✅
|
||
|
||
### 4. Barre d'outils mobile + Palette fichiers/commandes 📱
|
||
- **Effort** : 3-5 jours
|
||
- **Impact** : 🟡 UX mobile — navigation rapide, productivité
|
||
- **Fichiers** : `frontend/js/mobile-toolbar.js`, `frontend/js/file-palette.js`, `frontend/js/command-palette.js`, `frontend/index.html`
|
||
|
||
#### Concept
|
||
Barre de navigation inférieure **toujours visible** en mode mobile, inspirée de VS Code / éditeurs modernes, avec :
|
||
|
||
#### Phase 1 — Barre de navigation persistante
|
||
- [ ] **Bottom bar fixe** : barre collée en bas de l'écran sur mobile/tablette (responsive, breakpoint < 768px)
|
||
- [ ] **Icônes** : palette fichiers 📁, palette commandes ⚡, onglets ouverts 📑, fermer ✕
|
||
- [ ] **Compteur d'onglets** : badge indiquant le nombre de fichiers ouverts
|
||
|
||
#### Phase 2 — Page d'accueil vault (quand aucun fichier ouvert)
|
||
- [ ] **Vault homepage** : page affichée quand l'utilisateur est dans un vault mais aucun fichier n'est ouvert
|
||
- [ ] **Bouton « Créer un nouveau fichier »** : ouvre un dialogue avec nom, emplacement, template optionnel
|
||
- [ ] **Bouton « Aller au fichier »** : ouvre la palette de fichiers pour naviguer rapidement
|
||
- [ ] **Affichage conditionnel** : cette page s'affiche uniquement si le focus est dans un vault spécifique (pas sur la page d'accueil multi-vaults)
|
||
|
||
#### Phase 3 — Palette de fichiers (Ctrl+P style)
|
||
- [ ] **Recherche rapide** : champ texte avec recherche floue (fuzzy matching) sur tous les fichiers du vault
|
||
- [ ] **Raccourci** : bouton dans la barre du bas pour ouvrir la palette
|
||
- [ ] **Résultats classés** : par pertinence + récence, avec preview du chemin
|
||
- [ ] **Navigation clavier** : flèches ↑↓ + Entrée pour ouvrir
|
||
|
||
#### Phase 4 — Palette de commandes (Ctrl+Shift+P style)
|
||
- [ ] **Liste des actions** : toutes les commandes disponibles dans ObsiGate
|
||
- `Nouveau fichier` → dialogue de création
|
||
- `Aller au fichier...` → palette fichiers
|
||
- `Rechercher...` → barre de recherche globale
|
||
- `Basculer le thème` → clair/sombre
|
||
- `Exporter en PDF` → export
|
||
- `Voir les tags` → onglet tags
|
||
- `Voir fichiers récents` → onglet récent
|
||
- `Fermer le fichier actif` → fermer
|
||
- `Paramètres` → page config
|
||
- [ ] **Raccourci** : bouton dans la barre du bas pour ouvrir la palette
|
||
- [ ] **Fuzzy search** : filtrer les commandes en tapant
|
||
|
||
#### Phase 5 — Gestion des fichiers ouverts (tabs)
|
||
- [ ] **Indicateur d'onglets** dans la barre du bas : icône avec compteur
|
||
- [ ] **Switcher rapide** : tap sur l'icône → liste des fichiers ouverts → swipe pour fermer
|
||
- [ ] **Fermeture** : bouton ✕ pour fermer le fichier actif, retour à la vault homepage si dernier fichier
|
||
|
||
### 5. Drag & drop de fichiers
|
||
- **Effort** : 1-2 jours | **Impact** : 🟡
|
||
- Déplacer/réorganiser dans l'arborescence
|
||
|
||
### 6. Diff viewer backups
|
||
- **Effort** : 1 jour | **Impact** : 🟢
|
||
- Comparer versions `.obsigate-backup/`
|
||
|
||
### 7. Fichiers récents par vault
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- Dashboard filtré par vault actif
|
||
|
||
### 8. Git tags semver
|
||
- **Effort** : 10 min | **Impact** : 🟢
|
||
- `git tag v1.7.0 && git push --tags`
|
||
|
||
### 9. Filtres search avancés
|
||
- **Effort** : 1 jour | **Impact** : 🟡
|
||
- Opérateurs `created:`, `modified:`, `size:`
|
||
|
||
### 10. Déduplication IGNORED_DIRS
|
||
- **Effort** : 0.5 jour | **Impact** : 🟢
|
||
- `indexer.py` et `watcher.py` ont des définitions séparées → mutualiser
|
||
|
||
### 11. Indicateur AI Actif
|
||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||
- Dans le bouton/indicateur à droite du titre, en cliquant il y a un panneau avec les statut de syncro. Ajouter un indicateur visuel dans ce panneau pour indiquer si l'IA est actif, configuré, et fonctionnelle. Durant la phase de traitement de l'IA, le bouton/indicateur devrait changer de couleur pour un blanc qui flashindiquant le statut de la tâche AI en cours.
|
||
|
||
### 11. Page d'accueil de voute
|
||
- **Effort** : 1 jour | **Impact** : 🟡
|
||
- Une page d'accueil qui affiche les fichiers de la voute actuelle dans l'ordre du plus récent au plus ancien. Si l'utilisateur change de répertoire dans cette voute, la liste devrait se mettre à jour automatiquement.
|
||
|
||
---
|
||
|
||
## 📋 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
|