docs: update ROADMAP — added backup management items #14-19 + reorganized
This commit is contained in:
+41
-102
@@ -5,7 +5,7 @@
|
||||
|
||||
---
|
||||
|
||||
## ✅ Complété (v1.0.0 → v1.7.0)
|
||||
## ✅ Complété (v1.0.0 → v1.9.0)
|
||||
|
||||
### AI Editor (v1.7.0)
|
||||
- [x] Toolbar dropdown menus : Edit, Tone, Translate, Generate, Rewrite, Toolbox
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Prochaines étapes (par priorité)
|
||||
## 🔜 Prochaines étapes (P1/P2)
|
||||
|
||||
### ✅ 1. Tests & Couverture — FAIT
|
||||
- Coverage **49% → 70%** ✅
|
||||
@@ -73,126 +73,65 @@
|
||||
- ~~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 📱 — FAIT
|
||||
- **Effort** : 3-5 jours | **Impact** : 🟡 UX mobile
|
||||
- **Fichiers** : `frontend/js/mobile-toolbar.js`, `frontend/index.html`, `frontend/style.css`, `frontend/js/app.js`
|
||||
|
||||
#### ✅ Phase 1 — Barre de navigation persistante
|
||||
- [x] **Bottom bar fixe** : barre collée en bas de l'écran sur mobile/tablette (responsive, breakpoint < 768px)
|
||||
- [x] **Icônes** : explorateur 📂, recherche 🔍, palette ⌨️, onglets 📑
|
||||
- [x] **Compteur d'onglets** : badge indiquant le nombre de fichiers ouverts
|
||||
- [x] **safe-area-inset-bottom** pour les iPhone avec notch
|
||||
- [x] **backdrop-filter blur** pour l'effet vitré
|
||||
|
||||
#### ✅ Phase 2 — Page d'accueil vault (quand aucun fichier ouvert)
|
||||
- [x] **Dashboard existant** réutilisé : showWelcome() affiche stats + récents + bookmarks
|
||||
- [x] **Palette accessible** depuis la barre pour ouvrir/créer des fichiers
|
||||
|
||||
#### ✅ Phase 3 — Palette de fichiers (Ctrl+P style)
|
||||
- [x] **Recherche rapide** via `/api/suggest` avec opérateurs +include -exclude
|
||||
- [x] **Raccourci** : bouton ⌨️ dans la barre du bas + tap pour fichiers, long-press pour commandes
|
||||
- [x] **Résultats** avec preview du chemin (vault/path)
|
||||
- [x] **Navigation clavier** : flèches ↑↓ + Entrée pour ouvrir, browse répertoires
|
||||
|
||||
#### ✅ Phase 4 — Palette de commandes (Ctrl+Shift+P style)
|
||||
- [x] **Liste des actions** : 12 commandes (créer/supprimer fichier/dossier, thème, réindex, etc.)
|
||||
- [x] **Long-press** sur le bouton palette → palette de commandes
|
||||
- [x] **Clic droit** sur le bouton palette → palette de commandes
|
||||
- [x] **Fuzzy search** : filtrer les commandes en tapant
|
||||
|
||||
#### ✅ Phase 5 — Gestion des fichiers ouverts (tabs)
|
||||
- [x] **Indicateur d'onglets** dans la barre du bas : badge compteur
|
||||
- [x] **Switcher rapide** : bottom sheet animé avec liste des fichiers ouverts
|
||||
- [x] **Fermeture** : bouton ✕ par onglet dans le switcher
|
||||
- [x] **Overlay** : tap à l'extérieur pour fermer le sheet
|
||||
|
||||
### ✅ 5. Drag & drop de fichiers — FAIT
|
||||
- **Effort** : 1-2 jours | **Impact** : 🟡
|
||||
- Déplacer/réorganiser dans l'arborescence ✅
|
||||
- **Fichiers** : `backend/main.py` (endpoint `POST /api/move/{vault_name}`), `frontend/js/dragdrop.js`, `frontend/js/app.js`, `frontend/style.css`
|
||||
- [x] **Endpoint backend** : `POST /api/move/{vault_name}` — déplace fichiers et dossiers vers un autre répertoire parent, même vault
|
||||
- [x] **Drag & drop frontend** : glisser-déposer les `.tree-item` (fichiers et dossiers) vers les dossiers ou la racine d'un vault
|
||||
- [x] **Indicateurs visuels** : opacité réduite sur l'élément source, outline en pointillé sur les cibles valides, surbrillance sur la cible active
|
||||
- [x] **Protection** : pas de drop sur soi-même, pas de drop dans un enfant, pas de cross-vault
|
||||
- [x] **SSE + index** : mise à jour de l'index et broadcast SSE après move
|
||||
|
||||
### ✅ 6. Diff viewer backups — FAIT
|
||||
- **Effort** : 1 jour | **Impact** : 🟢
|
||||
- Comparer versions sauvegardées dans `.obsigate-backup/` ✅
|
||||
- **Fichiers** : `backend/main.py` (3 endpoints + helpers), `frontend/js/backups.js`, `frontend/js/ui.js`, `frontend/style.css`
|
||||
- [x] **`GET /api/file/{vault}/backups`** — liste tous les backups horodatés d'un fichier (triés plus récent d'abord)
|
||||
- [x] **`GET /api/file/{vault}/diff`** — diff unifié entre deux versions (backup vs backup, ou backup vs actuel)
|
||||
- [x] **`POST /api/file/{vault}/restore`** — restaure une version backup (backup automatique de la version actuelle avant restauration)
|
||||
- [x] **UI modale** : panneau avec sélecteur gauche (backup) / droite (version actuelle ou autre backup), diff coloré (vert/rouge), bouton Restaurer avec confirmation
|
||||
- [x] **Menu contextuel** : clic droit sur un fichier → "Backups / Versions"
|
||||
- [x] **Coloration syntaxique diff** : lignes ajoutées en vert, supprimées en rouge, en-têtes hunk en accent
|
||||
### ✅ 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
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||||
- Dashboard filtré par vault actif ✅
|
||||
- [x] **Section « Récents » dans la page d'accueil vault** : affiche les 5 derniers fichiers ouverts dans le vault via `/api/recent?vault=...`
|
||||
- [x] **Style compact** : liste en haut de la page racine du vault, avec titre, sous-dossier, et temps relatif
|
||||
- [x] **Click → preview, double-click → ouvrir**
|
||||
|
||||
### ✅ 8. Git tags semver — FAIT
|
||||
- **Effort** : 10 min | **Impact** : 🟢
|
||||
- [x] `git tag v1.8.0 && git push --tags` ✅
|
||||
### ✅ 8. Git tags semver — FAIT (v1.8.0, v1.9.0 à venir)
|
||||
|
||||
### ✅ 9. Filtres search avancés — FAIT
|
||||
- **Effort** : 1 jour | **Impact** : 🟡
|
||||
- Opérateurs `created:`, `modified:`, `size:` ✅
|
||||
- **Fichiers** : `frontend/js/search.js` (QueryParser, SearchChips, performAdvancedSearch), `backend/search.py` (helpers + filters), `backend/main.py` (endpoint params)
|
||||
- [x] **`created:>2024-01-01`** / **`created:2024-01-01..2024-06-01`** — filtre par date de création
|
||||
- [x] **`modified:<7d`** / **`modified:>2024-01-01`** — filtre par date de modification (relatif ou absolu)
|
||||
- [x] **`size:>1MB`** / **`size:100KB..2MB`** — filtre par taille de fichier
|
||||
- [x] **Chips visuels** dans la barre de recherche pour chaque opérateur actif
|
||||
- [x] **Filtrage backend** via `_parse_date_range`, `_parse_size_range` avec support unités (B, KB, MB, GB) et dates relatives (7d, 30d, 24h)
|
||||
- Opérateurs `created:`, `modified:`, `size:`
|
||||
|
||||
### ✅ 10. Déduplication IGNORED_DIRS — FAIT
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟢
|
||||
- `indexer.py`, `watcher.py` et `main.py` avaient des définitions séparées → mutualisé ✅
|
||||
- [x] **Source unique** : `IGNORED_DIRS` dans `backend/indexer.py` (configurable via `OBSIGATE_IGNORED_DIRS`)
|
||||
- [x] **`watcher.py`** : importe `IGNORED_DIRS` depuis `backend.indexer` (supprime ~20 lignes dupliquées)
|
||||
- [x] **`main.py`** : importe `IGNORED_DIRS` depuis `backend.indexer` (supprime la copie inline)
|
||||
|
||||
### ✅ 11. Indicateur AI Actif — FAIT
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||||
- Dans le bouton/indicateur à droite du titre, en cliquant il y a un panneau avec les statuts de syncro. Ajouter un indicateur visuel dans ce panneau pour indiquer si l'IA est active, configurée, et fonctionnelle. Durant la phase de traitement de l'IA, le bouton/indicateur devrait changer de couleur pour un blanc qui flash indiquant le statut de la tâche AI en cours.
|
||||
- **Fichiers** : `backend/main.py` (`/api/ai/status`), `frontend/js/ai.js`, `frontend/js/sync.js`, `frontend/style.css`
|
||||
- [x] **Badge header flash blanc** : le `#sync-badge` devient blanc avec animation flash quand une tâche AI est en cours
|
||||
- [x] **Événements** : `ai-processing-start` / `ai-processing-end` dispatchés depuis `ai.js`
|
||||
- [x] **Section IA dans panneau sync** : statut (configurée/non configurée/traitement en cours) avec icône et couleur
|
||||
- [x] **Endpoint `/api/ai/status`** : vérifie si au moins un provider AI est configuré
|
||||
|
||||
### 12. Page d'accueil de voute — FAIT (récursif)
|
||||
- **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, récursivement (répertoire + tous les sous-répertoires). Si l'utilisateur change de répertoire dans cette voute, la liste se met à jour automatiquement. ✅
|
||||
- **Fichiers** : `backend/main.py` (`/api/vault/{vault}/files`), `frontend/js/vaulthome.js`, `frontend/js/sidebar.js`, `frontend/style.css`
|
||||
- [x] **Endpoint `/api/vault/{vault}/files?dir=...&recursive=true`** : liste les fichiers d'un répertoire et de tous ses sous-répertoires récursivement (`rglob`), triés par date de modification décroissante
|
||||
- [x] **Champ `rel_dir`** : chaque fichier indique son sous-répertoire relatif pour afficher le chemin dans les résultats
|
||||
- [x] **Affichage style résultats de recherche** : chaque fichier utilise le même look `.search-result-item` (extension, icône, titre, métadonnées avec `sous-dossier/ · date · taille`)
|
||||
- [x] **Badge « récursif »** : indicateur visuel dans le header confirmant le mode récursif
|
||||
- [x] **Breadcrumb navigable** : fil d'Ariane cliquable (vault → dossier → sous-dossier)
|
||||
- [x] **Mise à jour automatique** : quand on clique sur un dossier dans l'arborescence, la page se met à jour
|
||||
- [x] **Déclenchement** : affiché automatiquement quand un vault spécifique est sélectionné
|
||||
### ✅ 12. Page d'accueil de voute — FAIT (récursif)
|
||||
|
||||
### ✅ 13. Indexation non-bloquante — FAIT
|
||||
|
||||
---
|
||||
|
||||
## 📋 Reste à faire (P2/P3)
|
||||
|
||||
### 14. Tests E2E Playwright
|
||||
- **Effort** : 2-3 jours | **Impact** : 🟢
|
||||
- Tests navigateur automatisés (login, navigation, recherche, sauvegarde)
|
||||
|
||||
### 15. Visualisation backup dans le gestionnaire
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||||
- L'étape "Building inverted index..." au démarrage bloquait l'event loop asyncio, empêchant le serveur de répondre aux requêtes HTTP (navigation, refresh) jusqu'à la fin de l'indexation.
|
||||
- **Fichiers** : `backend/main.py`, `backend/search.py`
|
||||
- [x] **`init_inverted_index()` dans `run_in_executor`** : exécuté dans le `ThreadPoolExecutor` au lieu de la boucle asyncio principale
|
||||
- [x] **`get_inverted_index()` sans rebuild auto** : ne déclenche plus de rebuild bloquant — retourne l'index vide si pas encore prêt (les recherches retournent 0 résultats jusqu'à la fin de l'indexation)
|
||||
- [x] **Navigation + refresh fonctionnels immédiatement** : le serveur répond aux requêtes HTTP dès le démarrage, même pendant l'indexation
|
||||
- Dans la page de gestion des backups, cliquer sur un backup → preview du contenu
|
||||
- Permet de vérifier le contenu avant de décider de supprimer
|
||||
|
||||
### 16. Purge par vault dans le gestionnaire
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||||
- Bouton "Supprimer tous les backups" par vault dans le gestionnaire
|
||||
|
||||
### 17. Compression des backups
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟢
|
||||
- Compresser les backups en `.bak.gz` après N jours pour économiser l'espace disque
|
||||
- Décompresser automatiquement à la lecture
|
||||
|
||||
### 18. Backup automatique périodique
|
||||
- **Effort** : 1 jour | **Impact** : 🟡
|
||||
- Cron job optionnel : backup automatique des fichiers modifiés toutes les X heures
|
||||
- Configurable par vault (certains vaults plus importants que d'autres)
|
||||
|
||||
### 19. Restauration depuis le gestionnaire
|
||||
- **Effort** : 0.5 jour | **Impact** : 🟡
|
||||
- Dans la page de gestion, bouton "Restaurer" sur chaque backup
|
||||
- Évite de devoir passer par le menu contextuel → Backups/Versions
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user