ObsiGate/ROADMAP.md
Bruno Charest e995f727bd
All checks were successful
CI / lint (push) Successful in 11s
CI / security (push) Successful in 8s
CI / test (push) Successful in 39s
CI / build (push) Successful in 3s
docs: graph view — 15/16 done, marked complete
2026-05-28 14:52:52 -04:00

106 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)