Files
ObsiGate/ROADMAP.md
T
bruno 027eab1368
CI / lint (push) Successful in 14s
CI / security (push) Successful in 9s
CI / test (push) Successful in 25s
CI / build (push) Successful in 1s
docs: refonte ROADMAP — numerotation, effort/impact, P3/P4 explosés en 15 items détaillés
2026-06-05 08:45:53 -04:00

19 KiB

ObsiGate — Roadmap

Version : 2.0.0-dev | Dernière mise à jour : 2026-06-05 Voir aussi CHANGELOG.md, AUDIT_TECHNIQUE.md


Légende

Icône Signification
✅ Terminé
🔵 En cours
⚪ Prévu / Backlog
🔴 Impact Critique / Bloquant
🟡 Impact Utile / Attendu
🟢 Impact Nice-to-have / Confort

✅ Complété (v1.0.0 → v2.0.0-dev)

Fondations (v1.0.0 → v1.4.0)

# Feature Effort Impact
1 FastAPI backend — CRUD fichiers, vaults, recherche full-text 5j 🔴
2 Moteur TF-IDF + stemming français (snowballstemmer) 2j 🔴
3 Watchdog — indexation temps réel avec debounce 1j 🟡
4 Interface SPA vanilla JS — sidebar, viewer, éditeur CodeMirror 8j 🔴
5 Sécurité : JWT + Argon2id, rate limiting, audit log, CSP headers 3j 🔴
6 Protection path traversal, utilisateur non-root Docker 0.5j 🔴
7 Compression GZip SSE-safe, Cache-Control immutable 0.5j 🟢
8 PWA : manifest, service worker, mode standalone 1j 🟡

UX & Productivité (v1.5.0 → v1.6.0)

# Feature Effort Impact
9 Publication publique de documents (lien partageable, token) 1j 🟡
10 Webhooks HTTP avec signature HMAC-SHA256 1j 🟡
11 Dashboard statistiques (fichiers, tags, taille, vaults) 0.5j 🟡
12 Gestion des conflits Syncthing 0.5j 🟢
13 Index inversé incrémental (hook pattern) 1j 🟡
14 Backlinks panel dans le viewer 0.5j 🟡
15 Fichiers non-supportés → UI download 0.3j 🟢
16 Redaction de secrets (secret_redactor.py) 0.5j 🟡
17 Backup automatique avant écriture, restauration 1j 🟡
18 Vue graphe — Barnes-Hut, focus, plein écran, export PNG 3j 🟡
19 Header flat design, sticky panels, navigation historique ← → ↑ 1j 🟢
20 Ctrl+survol → aperçu contenu formaté 0.5j 🟢

Architecture (v1.5.1)

# Feature Effort Impact
21 Split app.js (8 875 lignes) → 16 modules ES 3j 🔴
22 Validateur imports/exports CI + tests unitaires frontend Node.js 0.5j 🟡

CI/CD & Qualité (v1.6.0)

# Feature Effort Impact
23 Pipeline Gitea Actions : lint → test → security → build 1j 🔴
24 Ruff (0 erreur) + Mypy (0 erreur) + Bandit SAST + Pip-audit 0.5j 🟡
25 Pytest : 285 tests, 63% coverage 3j 🔴

AI Editor (v1.7.0)

# Feature Effort Impact
26 Toolbar : Edit, Tone, Translate, Generate, Rewrite, Toolbox 2j 🟡
27 Multi-provider : DeepSeek, OpenRouter, Gemini 1j 🟡
28 16 endpoints REST /api/ai/{action} + backend ai.py / ai_routes.py 2j 🟡
29 Auto-save silencieux (2s debounce), loading toasts 0.5j 🟢

Fonctionnalités avancées (v1.8.0 → v1.9.0)

# Feature Effort Impact
30 Export PDF via WeasyPrint (endpoint API + lien share public) 1j 🟡
31 Palette de commandes Ctrl+Alt+Space 1j 🟡
32 Barre d'outils mobile + palette fichiers/commandes 📱 1j 🟡
33 Drag & drop de fichiers 1j 🟡
34 Filtres recherche avancés : created:, modified:, size: 0.5j 🟡
35 Fichiers récents par vault 0.5j 🟡
36 Indicateur AI Actif (header + toast) 0.3j 🟢
37 Page d'accueil de vault (liste récursive par date, style recherche) 0.5j 🟡
38 Indexation non-bloquante (background thread) 0.5j 🟡
39 Git tags semver (v1.8.0, v1.9.0) 0.2j 🟢

Gestion des Backups (v1.9.0)

# Feature Effort Impact
40 Diff viewer : unifié + côte à côte, restauration depuis backup 1j 🟡
41 Gestionnaire de backups : page complète, filtre, suppression, purge 1.5j 🟡
42 Purge par vault avec confirmation, preview contenu (100 Ko) 0.5j 🟡
43 Compression gzip des vieux backups (niveau 6) 0.5j 🟢
44 Backup automatique périodique (POST /api/backups/auto) 1j 🟡
45 Restauration depuis le gestionnaire (extraction timestamp, confirmation) 0.5j 🟡
46 Auto-nettoyage : max_backups_per_file (défaut 10) 0.5j 🟡

Mermaid.js (v2.0.0-dev)

# Feature Effort Impact
47 CDN mermaid@11, securityLevel: strict, startOnLoad: false 0.5j 🟡
48 renderMermaidBlocks() — parse, rendu SVG, bloc d'erreur stylisé 1j 🟡
49 22 templates (flowchart → sankey-beta) 0.5j 🟡
50 Live preview dans l'éditeur (debounce 500ms, panneau #mermaid-live-preview) 1j 🟡
51 Thème dark/light synchronisé, export SVG + PNG 1j 🟡
52 Rendu inline dans le viewer Markdown 0.5j 🟡
53 Zoom molette + drag + boutons +/- 0.5j 🟢
54 Mode plein écran avec header bar (icônes zoom, copy, download, close) 0.5j 🟢
55 Focus mode — clic diagramme → panneau latéral 480px 0.3j 🟡
56 Pré-processeur Obsidian ([[liens]], ![[img]], ==highlight==) 0.3j 🟡
57 Header bar : type de diagramme + toggle Code/Preview + copy SVG + download PNG 1j 🟡

🔵 En cours (P1)

58. Tests E2E Playwright

  • Effort : 2-3 jours | Impact : 🔴
  • Description : Tests navigateur automatisés pour les flows critiques : login, navigation vault, recherche full-text, ouverture/édition/sauvegarde de fichier, rendu Mermaid, export PDF.
  • Sous-tâches :
    • Installation Playwright + config (playwright.config.ts)
    • Fixtures : vault de test avec 5-10 fichiers .md variés
    • Test : login admin → dashboard → liste vaults
    • Test : navigation sidebar → ouverture fichier → viewer Markdown
    • Test : recherche full-text → résultats triés par pertinence
    • Test : éditeur CodeMirror → modification → Ctrl+S → backup créé
    • Test : rendu Mermaid (flowchart + sequence) dans le viewer
    • Test : export PDF → téléchargement vérifié
    • Test : mode sombre → toggle → persistence localStorage
    • Test : responsive mobile → toolbar + sidebar repliée
    • Intégration CI : job e2e dans .gitea/workflows/ci.yml

⚪ Backlog — Priorité 3 (P3)

59. Mode hors-ligne PWA complet

  • Effort : 3-4 jours | Impact : 🟡
  • Description : Service worker avancé avec IndexedDB pour permettre la navigation et la recherche en mode hors-ligne, avec file de synchronisation au retour réseau.
  • Sous-tâches :
    • IndexedDB : stockage local de l'index des fichiers (paths, titles, tags)
    • Moteur de recherche offline via IndexedDB (cursor + filtre)
    • Cache des fichiers markdown récemment ouverts (derniers 50)
    • Stratégie de cache : Network First avec fallback IndexedDB
    • File de synchronisation : modifications offline → appliquées au retour réseau
    • UI indicateur : badge « Hors-ligne » + compteur de modifications en attente
    • Gestion des conflits : détection et résolution manuelle (choix version locale vs serveur)

60. OAuth2 / OIDC — Authentification SSO

  • Effort : 2-3 jours | Impact : 🟡
  • Description : Support de fournisseurs OAuth2/OIDC externes pour permettre l'authentification via Google, GitHub, ou tout provider compatible. Complément à l'auth JWT existante (pas de remplacement).
  • Sous-tâches :
    • Configuration par provider : OBSIGATE_OAUTH_GOOGLE_CLIENT_ID, OBSIGATE_OAUTH_GITHUB_CLIENT_ID, etc.
    • Endpoint GET /api/auth/oauth/login?provider=google → redirection
    • Endpoint GET /api/auth/oauth/callback → échange code → token OIDC → création/liaison compte local
    • Mapping roles : config OBSIGATE_OAUTH_DEFAULT_ROLE (défaut user)
    • UI : boutons « Se connecter avec Google / GitHub » sur la page login
    • Sécurité : state parameter anti-CSRF, PKCE, nonce validation
    • Stockage : liaison oauth_provider + oauth_sub dans users.json

61. Plugins système — Extensions utilisateur

  • Effort : 4-5 jours | Impact : 🟢
  • Description : Système de plugins permettant aux utilisateurs d'étendre ObsiGate avec des renderers personnalisés, des opérateurs de recherche, et des hooks d'UI. Inspiré du modèle de plugins Obsidian.
  • Sous-tâches :
    • Spécification du format de plugin : plugin.json (name, version, hooks, permissions)
    • API de hooks : onFileRender, onSearchFilter, onEditorAction, onSidebarItem
    • Sandbox d'exécution : Web Worker isolé pour le code plugin
    • UI : page « Plugins » dans les paramètres (installer, activer/désactiver, désinstaller)
    • Distribution : dépôt de plugins communautaire (fichier JSON index)
    • Hot-reload : activation/désactivation sans rechargement de page
    • Sécurité : manifest de permissions, validation de signature, CSP restrictif

62. Collaboration temps réel — Édition simultanée

  • Effort : 5-7 jours | Impact : 🟢
  • Description : Édition collaborative de fichiers markdown via WebSocket + CRDT (Yjs). Plusieurs utilisateurs peuvent éditer le même fichier simultanément avec résolution automatique des conflits.
  • Sous-tâches :
    • Serveur WebSocket : endpoint /ws/collab/{vault}/{path} avec gestion des rooms
    • Intégration Yjs : Y.Doc partagé, Y.Text pour le contenu markdown
    • Awareness : curseurs colorés par utilisateur, sélections visibles
    • Synchro backend : persistance périodique du document (debounce 2s)
    • Gestion des droits : vérification check_vault_access par connexion WS
    • UI : indicateur de présence (avatars dans la barre d'outils éditeur)
    • UI : curseurs distants dans CodeMirror (extension collaborative)
    • Gestion des déconnexions : reconnexion automatique, merge state au retour
    • Tests de charge : 5+ utilisateurs simultanés sur le même fichier

63. Internationalisation (i18n) — Multilingue

  • Effort : 2-3 jours | Impact : 🟡
  • Description : Support de l'anglais et du français via un système de clés de traduction. L'interface est actuellement en français uniquement. L'anglais est nécessaire pour une adoption plus large.
  • Sous-tâches :
    • Extraction des chaînes : inventaire de toutes les chaînes UI (~300)
    • Format : JSON fr.json + en.json dans frontend/locales/
    • Fonction t(key, fallback) → détection navigator.language
    • Sélecteur de langue dans les paramètres (persisté localStorage)
    • Traduction des messages backend (erreurs API, toasts)
    • Documentation multilingue (README.fr.md, README.md)

64. MFA — Authentification multi-facteurs

  • Effort : 2 jours | Impact : 🟡
  • Description : Ajout de TOTP (Time-based One-Time Password) et WebAuthn (clés de sécurité) comme second facteur d'authentification pour les comptes admin.
  • Sous-tâches :
    • TOTP : génération de secret, QR code, vérification code 6 chiffres
    • WebAuthn : enregistrement de clé, assertion, attestation
    • UI : page « Sécurité du compte » avec activation/désactivation MFA
    • Flow login : mot de passe → challenge TOTP si activé
    • Recovery codes : 8 codes de backup à usage unique
    • Stockage : totp_secret + webauthn_credential_id dans users.json

65. Thèmes personnalisés — CSS variables

  • Effort : 1-2 jours | Impact : 🟢
  • Description : Exposition de variables CSS pour permettre aux utilisateurs de créer des thèmes personnalisés. Presets inclus : light, dark, high-contrast, sepia.
  • Sous-tâches :
    • Audit des variables CSS existantes → liste des 30+ variables
    • Fichier themes.json avec presets (light, dark, high-contrast, sepia)
    • UI : sélecteur de thème dans les paramètres (aperçu live)
    • Import/export de thème personnalisé (JSON)
    • Application dynamique sans rechargement (document.documentElement.style.setProperty)

66. Export multi-formats

  • Effort : 1-2 jours | Impact : 🟢
  • Description : Export de notes individuelles ou de vaults entiers en HTML standalone, bundle Markdown (.zip), et ePub pour liseuses.
  • Sous-tâches :
    • Export HTML standalone : CSS inliné, images en base64, navigation inter-fichiers
    • Export MD bundle : ZIP du vault avec structure préservée
    • Export ePub : conversion markdown → ePub via markdown + ebooklib
    • UI : bouton « Exporter » dans le viewer (fichier unique) + dans le menu vault (export complet)
    • Endpoints : GET /api/export/html, GET /api/export/md-bundle, GET /api/export/epub

⚪ Backlog — Priorité 4 (P4)

67. Notifications web — Push API

  • Effort : 2 jours | Impact : 🟢
  • Description : Notifications push navigateur pour les changements de vault (fichier modifié, ajouté, supprimé). Utilise la Push API et le service worker existant.
  • Sous-tâches :
    • Souscription Push : endpoint POST /api/push/subscribe (stockage subscription + vault)
    • Envoi : webhook interne on_file_change → dispatch notification via Web Push
    • Configuration VAPID : clés publique/privée dans config.json
    • UI : permission navigateur + toggle activer/désactiver par vault
    • Payload : titre du fichier, vault, action (created/modified/deleted)
    • Clic sur notification → ouvre le fichier dans ObsiGate

68. Health check enrichi

  • Effort : 1 jour | Impact : 🟢
  • Description : Endpoint /api/health étendu avec métriques détaillées : état de l'index, consommation mémoire, uptime, connexions SSE actives, nombre de backups, dernière indexation.
  • Sous-tâches :
    • Métriques index : nombre de fichiers, nombre de tokens, génération courante
    • Métriques mémoire : RSS, heap used (via psutil ou /proc/self/status)
    • Métriques uptime : time.time() - server_start_time
    • Métriques backups : nombre total, âge du plus vieux, espace disque
    • Format réponse JSON structuré : { status, uptime, index, memory, backups, connections }
    • Endpoint séparé GET /api/health/detailed (protégé admin)

69. Éditeur mobile natif — Interface tactile optimisée

  • Effort : 2-3 jours | Impact : 🟢
  • Description : Refonte de l'expérience mobile pour l'édition : barre d'outils contextuelle, presse-papiers optimisé, gestes tactiles (swipe pour actions rapides), mode lecture plein écran.
  • Sous-tâches :
    • Barre d'outils mobile flottante : bold, italic, code, liste, lien (inspirée de l'éditeur Obsidian mobile)
    • Raccourcis swipe : gauche → backlinks, droite → table des matières
    • Mode lecture : cache sidebar + header, plein écran, swipe horizontal pour page suivante
    • Presse-papiers : bouton « Coller » persistant (iOS contourne restriction clipboard)
    • Adaptation CodeMirror : hauteur ajustable, police agrandissable (pinch zoom)

70. Recherche sémantique — Embeddings vectoriels

  • Effort : 4-5 jours | Impact : 🟢
  • Description : Moteur de recherche sémantique utilisant des embeddings (sentence-transformers) pour trouver des notes par similarité de sens, au-delà des mots-clés exacts.
  • Sous-tâches :
    • Génération d'embeddings : modèle all-MiniLM-L6-v2 via sentence-transformers (Python) ou appel API externe
    • Stockage : index vectoriel avec numpy + faiss (ou usearch pour performance)
    • Indexation : embedding par chunk de 512 tokens avec recouvrement
    • Recherche hybride : combinaison TF-IDF + similarité cosinus (RRF — Reciprocal Rank Fusion)
    • UI : toggle « Recherche sémantique » dans la barre de recherche
    • UI : score de similarité dans les résultats

71. Tableau de bord administrateur

  • Effort : 2 jours | Impact : 🟢
  • Description : Page d'administration dédiée avec monitoring en temps réel, gestion des utilisateurs avancée, et logs d'audit visualisables.
  • Sous-tâches :
    • Widgets temps réel : CPU, mémoire, espace disque, requêtes/min (rafraîchissement SSE)
    • Gestion utilisateurs : tableau triable, création/édition/suppression, filtre par rôle
    • Logs d'audit : visualisation des 500 dernières entrées, filtre par utilisateur/action/date
    • Backup stats : graphique d'évolution (taille totale, nombre par vault, âge moyen)
    • Protection : accès restreint au rôle admin uniquement

72. API publique documentée — OpenAPI 3.1

  • Effort : 1-2 jours | Impact : 🟢
  • Description : Documentation OpenAPI complète et interactive (Swagger UI + Redoc) pour l'API REST, avec exemples de requêtes, descriptions en anglais, et schémas Pydantic exposés.
  • Sous-tâches :
    • Audit des endpoints existants → compléter les docstrings manquants
    • Ajout de response_model sur tous les endpoints (40+ actuellement, ~15 sans modèle)
    • Exemples dans les schémas : examples=[...] pour les endpoints clés
    • Tagging des endpoints par catégorie (Files, Vaults, Search, Auth, AI, Backups)
    • Serveur mock : prism ou openapi-generator pour tests sans backend
    • Page de documentation intégrée : lien dans le menu header (« API »)

73. Synchronisation multi-appareils — Obsidian Sync compatible

  • Effort : 6-8 jours | Impact : 🟢
  • Description : Synchronisation des vaults entre plusieurs instances d'ObsiGate via un protocole de synchronisation décentralisé ou compatible Obsidian Sync. Alternative self-hosted à Obsidian Sync.
  • Sous-tâches :
    • Protocole : évaluation CRDT vs OT vs diff/patch pour fichiers markdown
    • Transport : WebSocket ou polling HTTPS avec compression
    • Merge strategy : LWW (Last Writer Wins) avec historique des deux versions
    • Détection de changements : hash SHA-256 par fichier, journal des modifications
    • UI : page « Synchronisation » avec statut par appareil, historique des syncs
    • Conflits : UI de résolution manuelle (diff côte à côte entre version locale et distante)
    • Chiffrement : optionnel, chiffrement AES-256-GCM avant transmission
    • Pairing : échange de clé publique + code QR pour appairage des appareils

📊 Résumé des efforts

Priorité Items Effort total estimé
✅ Complété #1 → #57 ~65 jours
🔵 P1 #58 (Playwright) 2-3 jours
⚪ P3 #59 → #66 (8 items) 20-27 jours
⚪ P4 #67 → #73 (7 items) 18-23 jours
Total restant 16 items 40-53 jours

Notes

  • Les items P3/P4 ne sont pas ordonnés par priorité interne — à raffiner selon les retours utilisateurs.
  • L'effort inclut le développement + tests unitaires + intégration CI, mais pas la documentation utilisateur.
  • Les items marqués 🟢 (nice-to-have) sont de bons candidats pour des contributions externes.
  • Le mode hors-ligne (#59) et l'i18n (#63) sont les P3 ayant le meilleur rapport effort/valeur.