4.1 KiB
4.1 KiB
ObsiGate — Roadmap
✅ Complété
CI/CD Pipeline (Gitea Actions)
- Ruff linting — 0 erreur
- Mypy type checking — 0 erreur (28 erreurs pré-existantes corrigées)
- Pytest — 175 tests, 49% coverage
- Bandit SAST — scan de sécurité
- Pip-audit — vulnérabilités des dépendances (advisory)
- Docker build — vérification image
- Coverage artifact — uploadé via
actions/upload-artifact@v3(natif Gitea) - Runner Gitea auto-hébergé —
gitea/act_runner:0.2.11sur Alpine/Proxmox
Performance
sortedcontainers— O(log n) insert/remove dans l'index inversé- Compression GZip (SSE-safe)
- Cache-Control immutable
- Recherche sans I/O disque
Sécurité
- JWT + Argon2id
- Rate limiting
- Audit log
- Backup automatique
- Redaction de secrets
- Headers CSP
- Protection path traversal
- Utilisateur non-root Docker
DX / Qualité
.dockerignore.env→.env.examplemigration- Ruff config — 0 erreur
- 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 dansfrontend/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 🔄 EN COURS
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
- Full-vault view : paramètre
scope=fullpour grapher tout le vault - Filtre par tag :
?tag=recettepour n'afficher que les fichiers taggés - Backlinks entrants : edge
relation: "backlink"en plus du wikilink sortant - Métriques de nœud :
incoming_count,outgoing_count,tag_count
Phase 2 — Frontend rendu
- Recherche visuelle : barre de recherche qui surligne les nœuds matchants
- Tooltips au survol : nom complet, tags, nombre de liens, chemin
- Couleurs adaptatives :
var(--bg-primary)etc. au lieu de hardcodées - Slider de profondeur : contrôle depth 0-3 dans l'UI
Phase 3 — Contrôles avancés
- Filtre par type : checkbox dossier/fichier/.md/autre
- Mode focus : centrer la vue sur un nœud spécifique
- Vue plein écran : bouton pour passer la modale en fullscreen
- Export PNG : bouton pour sauvegarder le graphe en image
Phase 4 — Performance
-
Barnes-Hut : O(n log n) au lieu de O(n²) pour >200 nœuds
-
Lazy loading : charger les wikilinks à la demande (pas tous au start)
-
Cache graphe : ne pas refetch si mêmes paramètres
-
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)