# ObsiGate — Roadmap > **Version :** 2.19.2 | **Dernière mise à jour :** 2026-09-23 > **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact > vers les fonctionnalités livrées. > - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)** > - Historique des versions : [CHANGELOG.md](../CHANGELOG.md) > - Détail des fonctionnalités livrées : [docs/archive/COMPLETED_v1-v2.md](./archive/COMPLETED_v1-v2.md) > - Fiches détaillées par feature : [docs/features/](./features/) > - Bugs / TODO : [ISSUES_TODOLIST.md](./ISSUES_TODOLIST.md) --- ## Légende | Icône | Signification | |---|---| | ✅ | Terminé | | 🔵 | En cours | | ⚪ | Prévu / Backlog | | 🔴 Impact | Critique / Bloquant | | 🟡 Impact | Utile / Attendu | | 🟢 Impact | Nice-to-have / Confort | > **Convention :** chaque item porte un **ID stable `#NN`** (clé de jointure entre roadmap, > changelog et commits). Une fonctionnalité livrée sort de ce fichier et entre dans l'index > « Complété » ci-dessous, avec son détail dans `docs/features/` ou l'archive. --- ## 🔵 En cours ### 77. Application Desktop native — Tauri (Windows / Linux / macOS) - **Effort :** 8-12 jours | **Impact :** 🟡 | **Framework :** Tauri v2 (Rust + Webview) - **Statut :** livré (A→F) — projet Tauri, backend Python embarqué, fonctionnalités natives, jumplist vaults, bannière 1er lancement, build CI, UX, 24 tests Rust. Détail complet : [features/desktop-tauri.md](./features/desktop-tauri.md) - **Reste à faire :** - [x] **Signature de l'updater Tauri** (gratuit) : paire de clés générée, `pubkey` renseignée, `createUpdaterArtifacts` activé, secrets CI câblés - [x] **Manifeste `latest.json`** généré par `scripts/updater_manifest.py` (intégré à `publish_release.py`), endpoint updater pointé sur `main` - [ ] **Signature de code Windows** : non retenue (pas de certificat) — alternatives : livrer non signé, SignPath.io (OSS gratuit), Certum OSS, Azure Trusted Signing, certificat EV - [ ] Exécuter les 6 tests E2E **manuels** — protocole documenté : [DESKTOP_E2E_CHECKLIST.md](./DESKTOP_E2E_CHECKLIST.md) --- ## ⚪ Backlog — Priorité 4 (P4) ### 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 --- ## ⚪ Backlog — Priorité 2 (P2) ### 83. Barre d'outils d'édition mobile — style Obsidian Android - **Effort :** 3-5 jours | **Impact :** 🟡 | **Zone :** frontend (mobile) - **Statut :** ✅ livré — ruban horizontal défilable ancré au-dessus du clavier, commandes étendues et personnalisation persistée. Détail : [archive/COMPLETED_v1-v2.md](./archive/COMPLETED_v1-v2.md) (section #83). - **Description :** remplacer la barre de mise en forme Markdown actuelle par un **ruban horizontal défilable** ancré juste au-dessus du clavier virtuel, reprenant l'ergonomie de l'app Android Obsidian : fond anthracite aux coins arrondis, insertion/enrobage de la syntaxe au curseur ou sur la sélection, et personnalisation des commandes via une icône clé à molette. - **Sous-tâches :** - [x] Ruban horizontal défilable (glissement tactile gauche/droite) ancré au-dessus du clavier - [x] Actions rapides : annuler, refaire, `[[ ]]` (lien interne), modèle/fichiers, tag `#`, pièce jointe - [x] Formatage : H1–H6, gras, italique, barré (`~~`), surligné (`==`), code en ligne/bloc, citation (`>`) - [x] Liens externes, listes à puces/numérotées, case à cocher (`- [ ]`), indenter / désindenter - [x] Personnalisation (clé à molette) : ajouter / supprimer / réordonner les commandes - [x] i18n FR/EN + tests frontend (helpers purs) + E2E mobile --- ## ⚪ Backlog — Sécurité, architecture & performance (P0/P1) ### 84. Consolidation & sécurité — revue statique 2026-09-13 (phase 1) - **Effort :** 6-9 jours | **Impact :** 🔴 | **Zone :** backend + frontend | **Référence :** [ISSUES_TODOLIST.md](./ISSUES_TODOLIST.md) BUG-021 → BUG-034 - **Statut :** 🟢 livré (phase 1) — sanitizer XSS, rate-limit/lockout MFA, isolation vaults, ReDoS, SSRF webhooks, cycle de vie des sessions, politique de mot de passe, verrous `users.json`, audits IP, rate-limit par compte, symlinks, recherche via inverted index, token en cookie HttpOnly. Détail : [archive/COMPLETED_v1-v2.md](./archive/COMPLETED_v1-v2.md) (section #84). - **Description :** traiter toutes les vulnérabilités critiques et importantes issues de la revue statique : XSS markdown (`escape=False`) et page publique de partage, brute-force MFA, isolation des vaults (`resolve_safe_path`), ReDoS, SSRF webhooks, cycle de vie des sessions, politique de mot de passe, races `users.json`, audits IP, rate-limit partagé, indexation symlinks. - **Sous-tâches :** - [x] Assainir le rendu markdown (sanitizer serveur en whitelist) et la page de partage (échappement `title`/frontmatter) — *DOMPurify client non ajouté (défense en profondeur serveur suffisante)* - [x] Rate-limit + lockout sur les endpoints MFA (`totp/verify`, `recovery`, `webauthn/verify`) - [x] Corriger `resolve_safe_path` (comparaison de chemin stricte par segment) + test de régression - [x] Rotation du refresh token, révocation de l'access token au logout, persistance des JTI révoqués - [x] Valider la politique de mot de passe à la création ; bloquer le SSRF des webhooks et externaliser les secrets - [x] Verrous sur les mutations `users.json` ; consigner l'adresse IP réelle dans les audits - [x] Ignorer les symlinks de l'index ; caps CPU/timeout regex (ReDoS) - [~] Durcir la CSP — *partiel* : directives `object-src`/`base-uri`/`form-action`/`frame-ancestors` ajoutées et token retiré de `sessionStorage` ; migration **nonce** restante (nécessite la conversion des gestionnaires d'événements inline) ### 85. Refonte architecturale — découpage du monolithe & persistance d'état (phase 2) - **Effort :** 8-12 jours | **Impact :** 🟡 | **Zone :** backend - **Description :** extraire le monolithe `backend/main.py` (~4 260 lignes) en routers FastAPI par domaine et rendre persistant l'état qui ne l'est pas (index de recherche, JTI révoqués, compteurs de rate-limit) pour préparer le multi-nœuds. - **Sous-tâches :** - [ ] Routers par domaine : files, search, share, webhooks, plugins, collab, admin, ai - [ ] Centraliser le contrat d'outils IA sur `tools/registry.py` (permissions, quotas, redaction) - [ ] Persister index, JTI révoqués et compteurs de rate-limit (SQLite/Redis) - [ ] Verrous asyncio autour de l'index global et des stores JSON ; service de partage public (expiration, révocation, quotas) ### 87. Amélioration continue — tests, CI/CD, revues de sécurité (phase 4) - **Effort :** 3-5 jours | **Impact :** 🟡 | **Zone :** `.gitea/workflows/`, `tests/` - **Description :** renforcer le pipeline (`.gitea/workflows/ci.yml`, `desktop-build.yml`) pour le rendre bloquant par défaut et accompagner les phases 1 → 3. - **Sous-tâches :** - [ ] Jobs CI sécurité (bandit/semgrep/trivy, audits pip/npm) + tests E2E XSS (page de partage + lecteur markdown) - [ ] Tests de concurrence (`users.json`), fuzzing de timing regex, couverture des composants critiques - [ ] Revue périodique des dépendances ; documentation utilisateur FR/EN synchronisée ; contrôle automatisé de la conformité au DoD --- ## ✅ Complété — index > Détail complet dans [docs/archive/COMPLETED_v1-v2.md](./archive/COMPLETED_v1-v2.md) et > [docs/features/](./features/). Cette table est la seule source de navigation ; ne pas > re-détailler les items livrés ici. | # | Domaine / fonctionnalité | Version | Détails | |---|---|---|---| | BUG-047 | Versionnage — source unique `VERSION` + bump SemVer automatique au commit (hooks + tag) | 2.3.0 | [DEVELOPMENT_AND_RELEASES.md](./DEVELOPMENT_AND_RELEASES.md) | | 90 | Barre d'actions du document — regroupement fonctionnel + spacers | 2.3.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 89 | Drag & drop complet de fichiers/dossiers & intégration Assistant IA | 2.3.0 | [features/drag-and-drop-ai.md](./features/drag-and-drop-ai.md) | | 1–8 | Fondations (FastAPI, TF-IDF + stemming, watchdog, SPA, sécurité, path traversal, gzip, PWA) | 1.0.0→1.4.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 9–20 | UX & productivité (share, webhooks, dashboard, conflits, backlinks, redaction, backups, graphe, header, aperçu) | 1.5.0→1.6.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 21–22 | Architecture (split `app.js` → 16 modules, validateur imports CI) | 1.5.1 | [archive](./archive/COMPLETED_v1-v2.md) | | 23–25 | CI/CD & qualité (Gitea Actions, Ruff/Mypy/Bandit/Pip-audit, pytest) | 1.6.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 26–29 | AI Editor (toolbar, multi-provider, 16 endpoints, auto-save) | 1.7.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 30–39 | Fonctionnalités avancées (export PDF, palette, mobile, drag & drop, filtres, indexation non-bloquante) | 1.8.0→1.9.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 40–46 | Gestion des backups (diff, gestionnaire, purge, auto, rétention) | 1.9.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 47–57 | Mermaid.js (22 templates, live preview, thèmes, zoom, plein écran, pré-processeur Obsidian) | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 58 | Tests E2E Playwright (44 desktop + 12 mobile, CI) | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 59 | Mode hors-ligne PWA complet (IndexedDB, file de synchro, conflits) | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 63 | Internationalisation i18n FR/EN | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 65 | Thèmes personnalisés (light/dark/high-contrast/sepia, import/export) | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 66 | Export multi-formats (HTML, MD bundle, ePub) | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 71 | Tableau de bord administrateur | 2.0.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 64 | MFA (TOTP + WebAuthn + recovery codes) | 2.1.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 74 | Support complet des documents PDF | 2.1.0 | [features/pdf.md](./features/pdf.md) | | 75 | Éditeur multi-panneaux (Split View) | 2.1.0 | [features/split-view.md](./features/split-view.md) | | 61 | Plugins système (sandbox Web Worker, hooks, 9 endpoints) | 2.2.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 67 | Notifications web — Push API | 2.2.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 68 | Health check enrichi | 2.2.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 72 | API publique documentée — OpenAPI 3.1 | 2.2.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 76 | BooksLM — Console AI contextuelle par répertoire | 2.2.0 | [features/bookslm.md](./features/bookslm.md) | | 78 | Éditeur Excalidraw | 2.2.0 | [features/excalidraw.md](./features/excalidraw.md) | | 62 | Collaboration temps réel — Édition simultanée (Yjs/CRDT, WebSocket, awareness) | 2.3.0 | [features/collaboration.md](./features/collaboration.md) | | 79 | Assistant IA — Outils (function calling) & serveur MCP | 2.3.0 | [features/ai-tools-mcp.md](./features/ai-tools-mcp.md) | | 80 | Assistant IA — Rendu Markdown, liens fichiers/paths & sessions | 2.3.0 | [features/ai-assistant-ux.md](./features/ai-assistant-ux.md) | | 81 | Assistant IA — Commandes (`@`, `/`), skills, images & capacités des modèles | 2.3.0 | [features/ai-assistant-commands.md](./features/ai-assistant-commands.md) | | 82 | Assistant IA — Section « Fournisseur & modèle » compacte (recherche modèle + info capacités, BUG-043) | 2.3.0 | [features/ai-provider-picker.md](./features/ai-provider-picker.md) | | 69 | Éditeur mobile natif — Interface tactile optimisée | 2.3.0 | [features/mobile-editor.md](./features/mobile-editor.md) | | 70 | Recherche sémantique — Embeddings vectoriels (hybride TF-IDF + RRF) | 2.3.0 | [features/semantic-search.md](./features/semantic-search.md) | | 77 | Application Desktop native — Tauri | 🔵 en cours | [features/desktop-tauri.md](./features/desktop-tauri.md) | | 84 | Consolidation & sécurité — revue statique 2026-09-13 (phase 1, BUG-021→034) | 2.3.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 83 | Barre d'outils d'édition mobile — ruban style Obsidian Android | 2.3.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 88 | Assistant IA — contexte applicatif (documents ouverts, répertoire, recherche, fichiers récents) & liens de fichiers fiables (BUG-041, BUG-042) | 2.3.0 | [features/ai-app-context.md](./features/ai-app-context.md) | | 91 | Assistant IA — Zone de discussion façon Notion : post ancré en haut, fournisseur/modèle discret & barre d'actions | 2.3.0 | [features/ai-assistant-conversation-ux.md](./features/ai-assistant-conversation-ux.md) | | 93 | Édition inline — « Editer » et « Forge » remplacent la vue lecture (assistant IA qui met le document à jour) | 2.3.0 | [features/editeur-inline.md](./features/editeur-inline.md) | | 94 | Assistant IA — Bouton de soumission arrondi + icône renouvelée (arrow-up) | 2.4.0 | [features/ai-assistant-history.md](./features/ai-assistant-history.md) | | 95 | Assistant IA — Historique permanent des conversations (persistance backend) | 2.4.0 | [features/ai-assistant-history.md](./features/ai-assistant-history.md) | | 96 | Assistant IA — Accès rapide à l'historique depuis la sidebar de navigation | 2.4.0 | [features/ai-assistant-history.md](./features/ai-assistant-history.md) | | 97 | Assistant IA — Panneau « + » extensible (fichiers, Deep Research, contextes, skills…) | 2.4.0 | [features/ai-assistant-history.md](./features/ai-assistant-history.md) | | 98 | Assistant IA — Filtre de recherche dans la sidebar « Historique IA » | 2.5.0 | [features/ai-assistant-history.md](./features/ai-assistant-history.md) | | 99 | Sidebar — Filtrage des vues « Récents » et « Sauvegardes » | 2.6.0 | [features/sidebar-filters.md](./features/sidebar-filters.md) | | 100 | Assistant IA — Deep Research en pastille (au lieu du texte injecté) | 2.6.0 | [features/ai-assistant-history.md](./features/ai-assistant-history.md) | | 101 | Forge — Assistant IA partagé (bouton AI Panel = assistant, fournisseur/modèle configuré, autocomplétion) + plein écran Forge/Editer | 2.8.0 | [features/forge-assistant.md](./features/forge-assistant.md) | | BUG-057 | Assistant IA — bouton « Ajouter » fonctionnel dans l'éditeur Forge (en plus d'« Editer ») | 2.9.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 102 | Assistant IA — bouton « Ajouter la section » par bloc de code (insertion du bloc seul) | 2.9.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 92 | Assistant IA — Écosystème d'outils phase 2 (recherche à clé, cache/retry, Playwright, crawl, Gitea/GitHub, documents XLSX/DOCX/CSV/PDF) | 2.10.0 | [features/ai-tools-roadmap.md](./features/ai-tools-roadmap.md) | | 103 | Configuration — clés utilisateur des sources connectées & recherche à clé (page Configurations, `data/api_keys.json`, priorité sur l'env) | 2.11.0 | [features/ai-tools-roadmap.md](./features/ai-tools-roadmap.md) | | 104 | Configuration — Redesign UI de la section « Clés API IA » : recherche fournisseurs, carte défaut 2 colonnes + badges de capacités, cartes dépliables, footer d'actions sticky | 2.12.0 | [features/ai-keys-ui.md](./features/ai-keys-ui.md) | | 105 | Guide d'utilisation — audit de couverture complet, téléchargement Markdown/PDF, guide desktop élargi, section Architecture (Mermaid) + BUG-067 | 2.13.0 | [features/guide-coverage-105.md](./features/guide-coverage-105.md) | | 106 | Assistant IA — Actions instantanées contextuelles, catalogue « Toutes les actions » & frontmatter complet | 2.14.0 | [features/ai-quick-actions.md](./features/ai-quick-actions.md) | | 107 | Configuration — Gestion des clés API & MCP : création/révocation de jetons longue durée (1 j, 1 mois, 6 mois, 1 an, sans fin), une seule clé pour l'API REST et le serveur MCP, « dernière utilisation », store `data/api_tokens.json` sans secret persisté | 2.15.0 | [features/api-mcp-tokens-107.md](./features/api-mcp-tokens-107.md) | | 86 | Optimisation globale des performances (phase 3) — scan différentiel, excalidraw différé, garde-fou `replace` (inverted index / PDF lazy / caps regex déjà livrés via BUG-033/040/025) | 2.16.0 | [features/perf-phase3-86.md](./features/perf-phase3-86.md) | | 108 | Support complet des images — arborescence, visionneuse (zoom/pan/navigation/miniatures), indexation nom+métadonnées, `media_types.py`, filtre `ext:`, SVG sandbox | 2.17.0 | [features/image-support.md](./features/image-support.md) | | 109 | Support audio & vidéo — lecteurs HTML5 intégrés, streaming HTTP Range (`/api/media`), fallback codec/taille | 2.18.0 | [features/media-viewers-109.md](./features/media-viewers-109.md) | | 110 | Lecteur média persistant « Now Playing » — élément partagé téléporté (inline ⇄ dock), Media Session, mini-vidéo PiP, mobile, reprise | 2.19.0 | [features/media-viewers-109.md](./features/media-viewers-109.md) | --- ## 📊 Résumé des efforts | Priorité | Items | Effort total estimé | |---|---|---| | ✅ Complété | #1 → #59, #61–72, #74–76, #78–84, #86, #88–93, #94–100, #102–110, #92 | ~130 jours réalisés | | 🔵 P2 restant | #77 Desktop : signature de code (non retenue), 6 tests E2E **manuels** ([protocole](./DESKTOP_E2E_CHECKLIST.md)) | ~0,5-1 jour | | ⚪ P4 restant | #73 Sync (6-8j) | 6-8 jours | | ⚪ P0/P1 restant | #85, #87 Refonte architecturale, CI/CD (BUG-035 → BUG-040 corrigés, #86 livré) | ~11-17 jours | | **Total restant** | **6 items + finitions** | **~23-38 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. - **Maintenance de ce fichier :** quand un item passe à ✅, déplacer son détail vers `docs/features/.md` (grosse feature) ou `docs/archive/COMPLETED_v1-v2.md` (item court), ajouter une ligne dans l'index « Complété », et consigner la version dans le [CHANGELOG](../CHANGELOG.md).