106 lines
4.1 KiB
Markdown
106 lines
4.1 KiB
Markdown
# ObsiGate — Roadmap
|
||
|
||
## ✅ Complété
|
||
|
||
### 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
|
||
- [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
|
||
|
||
### Sécurité
|
||
- [x] JWT + Argon2id
|
||
- [x] Rate limiting
|
||
- [x] Audit log
|
||
- [x] Backup automatique
|
||
- [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
|
||
|
||
---
|
||
|
||
## 🔜 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)
|
||
|
||
### 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
|
||
|
||
### 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%)
|
||
|
||
### 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
|
||
|
||
### 3. Vue graphe des wikilinks ✅ FAIT
|
||
|
||
**Base existante** : API `/api/graph/{vault}` + `GraphViewManager` (canvas force-directed)
|
||
→ **Amélioration d'une feature existante**, pas création from scratch
|
||
|
||
#### 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`
|
||
|
||
#### 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
|
||
|
||
#### 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)
|
||
|
||
---
|
||
|
||
## 📋 Backlog
|
||
|
||
- **Filtres de recherche avancés** : created:, modified:, size:
|
||
- **Mode hors-ligne** : Service Worker + cache IndexedDB
|
||
- **API publique documentée** : OpenAPI/Swagger amélioré
|
||
- **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)
|