docs: CHANGELOG.md + README v1.7.0 + ROADMAPs mis à jour

This commit is contained in:
2026-06-02 09:27:11 -04:00
parent c74c2444d5
commit 8f3e602869
5 changed files with 475 additions and 427 deletions
+89 -73
View File
@@ -1,105 +1,121 @@
# ObsiGate — Roadmap
## ✅ Complété
> **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)
### CI/CD Pipeline (Gitea Actions)
- [x] Ruff linting — 0 erreur
- [x] Mypy type checking — 0 erreur (28 erreurs pré-existantes corrigées)
- [x] Pytest — 175 tests, 49% coverage
- [x] Bandit SAST — scan de sécurité
- [x] Pip-audit — vulnérabilités des dépendances (advisory)
- [x] Docker build — vérification image
- [x] Coverage artifact — uploadé via `actions/upload-artifact@v3` (natif Gitea)
- [x] Runner Gitea auto-hébergé — `gitea/act_runner:0.2.11` sur Alpine/Proxmox
---
### Performance
## ✅ 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] Compression GZip (SSE-safe)
- [x] Cache-Control immutable
- [x] Recherche sans I/O disque
- [x] CI/CD Pipeline Gitea Actions (lint → test → security → build)
- [x] Ruff linting — 0 erreur
- [x] Mypy type checking — 0 erreur
- [x] Pytest — 180 tests collectés, 175 passés, 49% coverage
- [x] Bandit SAST + Pip-audit + Docker build + coverage artifact
### Sécurité
### 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
- [x] Audit log
- [x] Backup automatique
- [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
### DX / Qualité
- [x] `.dockerignore`
- [x] `.env` → `.env.example` migration
- [x] Ruff config — 0 erreur
- [x] Mypy config — 0 erreur
### 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. Stemming français 🇫🇷 ✅
- **Effort** : 30 min — **FAIT**
- **Impact** : 🟡 Améliore la recherche ×2 pour les termes fléchis
- **Module** : `snowballstemmer` (stemmer français)
- **Fichiers** : `backend/search.py` (tokenizer)
### 1. Tests & Couverture
- **Effort** : 2-3 jours | **Impact** : 🟢
- Coverage 49% → 70%+
- Cibles : `main.py` (26%), `watcher.py` (23%), `router.py` (37%), `create_admin.py` (0%)
- Tests E2E Playwright (fondations)
### 2. Split `app.js` en modules ES ✅
- **Effort** : 3-4h — **FAIT**
- **Impact** : 🟡 Dette technique, maintenabilité
- **Fichiers** : `frontend/app.js` (~8875 lignes → 12 modules dans `frontend/js/`)
- **Modules** : state, utils, auth, search, sidebar, viewer, ui, dashboard, config, sync, graph, legacy
### 2. Export PDF
- **Effort** : 1 jour | **Impact** : 🟡
- WeasyPrint déjà intégré (requirement), manque route API + UI
- Alternative : Markdown → HTML → PDF via headless Chrome
### 4. Tests d'intégration
- **Effort** : 3-5 jours
- **Impact** : 🟢 Couverture 49% → 70%+
- **Cibles** : `main.py` (26%), `watcher.py` (23%), `router.py` (37%), `create_admin.py` (0%), `image_processor.py` (15%)
### 3. Palette de commandes (Ctrl+P)
- **Effort** : 1 jour | **Impact** : 🟡
- Navigation rapide style VS Code dans l'interface
### 5. Export PDF
- **Effort** : 1 jour
- **Impact** : 🟡 WeasyPrint déjà intégré (lazy import), manque GTK sur certaines plateformes
- **Alternative** : Markdown → HTML → PDF via headless Chrome
### 4. Drag & drop de fichiers
- **Effort** : 1-2 jours | **Impact** : 🟡
- Déplacer/réorganiser dans l'arborescence
### 3. Vue graphe des wikilinks ✅ FAIT
### 5. Diff viewer backups
- **Effort** : 1 jour | **Impact** : 🟢
- Comparer versions `.obsigate-backup/`
**Base existante** : API `/api/graph/{vault}` + `GraphViewManager` (canvas force-directed)
→ **Amélioration d'une feature existante**, pas création from scratch
### 6. Fichiers récents par vault
- **Effort** : 0.5 jour | **Impact** : 🟡
- Dashboard filtré par vault actif
#### Phase 1 — Backend API
- [x] **Full-vault view** : paramètre `scope=full` pour grapher tout le vault
- [x] **Filtre par tag** : `?tag=recette` pour n'afficher que les fichiers taggés
- [x] **Backlinks entrants** : edge `relation: "backlink"` en plus du wikilink sortant
- [x] **Métriques de nœud** : `incoming_count`, `outgoing_count`, `tag_count`
### 7. Filtres search avancés
- **Effort** : 1 jour | **Impact** : 🟡
- Opérateurs `created:`, `modified:`, `size:`
#### Phase 2 — Frontend rendu
- [x] **Recherche visuelle** : barre de recherche qui surligne les nœuds matchants
- [x] **Tooltips au survol** : nom complet, tags, nombre de liens, chemin
- [x] **Couleurs adaptatives** : `var(--bg-primary)` etc. au lieu de hardcodées
- [x] **Slider de profondeur** : contrôle depth 0-3 dans l'UI
### 8. Déduplication IGNORED_DIRS
- **Effort** : 0.5 jour | **Impact** : 🟢
- `indexer.py` et `watcher.py` ont des définitions séparées → mutualiser
#### Phase 3 — Contrôles avancés
- [x] **Filtre par type** : checkbox dossier/fichier/.md/autre
- [x] **Mode focus** : centrer la vue sur un nœud spécifique
- [x] **Vue plein écran** : bouton pour passer la modale en fullscreen
- [x] **Export PNG** : bouton pour sauvegarder le graphe en image
#### Phase 4 — Performance
- [x] **Barnes-Hut** : O(n log n) au lieu de O(n²) pour >200 nœuds
- [x] **Cache graphe** : ne pas refetch si mêmes paramètres
- [ ] ~~Lazy loading~~ : non nécessaire avec le cache (les wikilinks sont déjà dans l'API)
- **Effort** : 2-3 jours
- **Fichiers** : `backend/main.py` (API), `frontend/js/graph.js` (rendu), `frontend/index.html` (UI)
### 9. CHANGELOG.md + version tagging git
- **Effort** : 0.5 jour | **Impact** : 🟢
- ✅ CHANGELOG.md créé — tags git restent à faire (`git tag v1.7.0` etc.)
---
## 📋 Backlog
## 📋 Backlog (P3/P4 — Long terme)
- **Filtres de recherche avancés** : created:, modified:, size:
- **Mode hors-ligne** : Service Worker + cache IndexedDB
- **API publique documentée** : OpenAPI/Swagger amélioré
- **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
- **Multi-langue i18n** : Interface traduisible
- **Plugins système** : Extensions utilisateur (similaire Obsidian)
- **Health check enrichi** : État de l'index, mémoire, uptime, clients SSE