Files
ObsiGate/docs/ROADMAP.md
T
bruno 011ec84f23 feat: outils IA de lecture et d'edition des classeurs existants #153
A6 : list_xlsx_sheets (noms + dimensions + truncated), xlsx_to_markdown
(table bornee 100x20 pour le contexte LLM), update_xlsx_cells et
append_xlsx_rows (WRITE + confirmation, via edit_xlsx_cells : verrou,
ecriture atomique, neutralisation des formules, 409 lossy). Les lignes
ajoutees sont coercees comme dans le viewer (A10). Labels de step
ai.step.xlsx_* FR/EN ; update_xlsx_cells/append_xlsx_rows branches sur
MUTATING_TOOLS et FILE_WRITE_TOOLS (refresh viewer via obsigate:file-written).

Tests : test_spreadsheet_tools.py 17 (risque, confirmation, persistance,
garde formule heritee, coercion) + contre-preuve (cells vide -> 2 echecs).
ruff 0, mypy 0, i18n parity, validate-imports.

đŸ€– Generated with Codebuff
Co-Authored-By: Codebuff <[email protected]>
2026-09-28 12:05:16 -04:00

237 lines
26 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
> **Version :** 2.33.0 | **DerniĂšre mise Ă  jour :** 2026-09-28
> **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 — dĂ©cision confirmĂ©e le 2026-09-26** : livraison non signĂ©e + documentation SmartScreen (« ExĂ©cuter quand mĂȘme »). Alternatives Ă©cartĂ©es sauf retour utilisateur : 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)
---
## đŸ”” En cours — Visionneuse & Ă©dition Excel (P0/P1/P2)
### 153. Visionneuse & Ă©dition XLSX — complĂ©tude (fidĂ©litĂ©, recherche, IA, UX, formats)
- **Effort :** 8-13 jours (P0 ✅ 2-3 j · P1 : 4-6 j · P2 : 2-4 j) | **Impact :** 🟡
- **Statut :** đŸ”” en cours — **P0 livrĂ© le 2026-09-27** (BUG-085 → BUG-088), **A5/A10/A12 livrĂ©s le 2026-09-28** (avec BUG-089), **A8/A9/A9bis livrĂ©s le 2026-09-28** (avec BUG-090), reste A6-A7 puis A13-A17
- **Analyse, risques et critĂšres d'acceptation :** [features/xlsx-viewer.md](./features/xlsx-viewer.md)
- **Description :** #152 (visionneuse XLSX, 2.27.0) lit et édite correctement la **grille de
valeurs** d'un `.xlsx`, mais l'ensemble supporté est étroit : valeurs seulement (ni structure,
ni styles en écriture, ni formule recalculée), **écriture destructive** d'une partie du classeur,
tableurs **invisibles à la recherche** et **inutilisables par l'IA** au-delà de la création. Ce
lot suit ces ajouts ; les cases ci-dessous sont le **suivi de référence**, la fiche feature porte
le détail.
- **Constat (points de départ) :** `MAX_ROWS = 500` / `MAX_COLS = 40` sans indicateur (troncature
silencieuse) · `wb.save()` non atomique et sans verrou (concurrence) · saisie `=
` stockĂ©e comme
formule par openpyxl (injection DDE) · `content=""` à l'indexation (recherche TF-IDF et sémantique
aveugles) · aucun outil IA de lecture/édition d'un classeur existant · aucun test frontend ni
E2E sur le viewer.
- **PérimÚtre réel des pertes au round-trip (mesuré sur openpyxl 3.1.5, 2026-09-27) :** graphiques,
images, dessins **et** tableaux croisés sont préservés ; sont perdus les **valeurs calculées en
cache**, slicers/chronologies, contrĂŽles de formulaire, connexions/requĂȘtes, custom XML,
signature numérique, commentaires enrichis et macros.
- **Sous-tĂąches :**
- **P0 — garde-fous d'Ă©criture (🔮, 2-3 j) — 🟱 livrĂ©**
- [x] **A1** Alerte de fidĂ©litĂ© avant Ă©criture : `inspect_workbook()` → `xlsx_lossy_features` + bandeau FR/EN + **409** `xlsx_lossy_content` sans `force` (confirmation explicite puis reprise) — BUG-085
- [x] **A2** Écriture atomique (`wb.save(.tmp)` + `os.replace()`, backup inchangĂ©) — BUG-086
- [x] **A3** Verrou par fichier autour du read-modify-write (timeout 15 s + **409** `conflict`) — BUG-087
- [x] **A4** Neutralisation de l'injection de formule (`=`/`@` stockĂ©s en texte, opt-in `allow_formula` + bouton `f(x)`) — BUG-088
- **P1 — recherche, IA, UX (🟡, 4-6 j) — đŸ”” en cours**
- [x] **A5** Indexation du contenu des feuilles (noms de feuilles + 20 premiĂšres lignes, plafond 5 k caractĂšres) — les mots tapĂ©s dans une cellule rendent le fichier trouvable ; au passage **BUG-089** (reindex manuel ne reconstruisait pas l'index inversĂ©)
- [ ] **A6** Outils IA `update_xlsx_cells` / `append_xlsx_rows` / `xlsx_to_markdown` / `list_xlsx_sheets`
- [ ] **A7** Navigation clavier + barre de formule + nom de cellule (Tab/Entrée/flÚches, `Maj+Entrée`, copie de plage)
- [x] **A8** `thead` sticky + bandeau « feuille tronquĂ©e » (lĂšve la troncature silencieuse) — BUG-090
- [x] **A9** Chargement paresseux par feuille (`GET 
/xlsx/sheet?offset&limit`, défilement virtuel)
- [x] **A10** Types & formats de saisie (nombre/texte, booléens `TRUE`/`FAUX`, dates FR `JJ/MM/AAAA` jour-first)
- [ ] **A11** Tests frontend (`tests/frontend/xlsx-viewer.test.mjs`) + E2E (`tests/e2e/xlsx-viewer.spec.js`) au CI
- [x] **A12** Valeur calculĂ©e affichĂ©e sous la formule (2ᔉ lecture `data_only=True` seulement si l'archive contient un `<v>`, info-bulle FR/EN)
- **P2 — Ă©tendu (🟱, 2-4 j) — âšȘ Ă  faire**
- [ ] **A13** Tri / filtre / recherche dans la feuille + export CSV de la sélection
- [ ] **A14** CRUD de feuilles, lignes et colonnes (renommer, insérer, supprimer, dupliquer)
- [ ] **A15** Styles minimaux en écriture + lecture fidÚle (gras, fond, formats, fusions, volets figés)
- [ ] **A16** Formats additionnels (`.xlsm` avec `keep_vba`, `.xls`, `.ods`, `.csv` éditable)
- [ ] **A17** Vue « tableau de bord » (plages nommées, TCD, KPI par feuille, actions IA)
- **Convention de suivi :** chaque sous-tùche démarre par son ID stable (`#153-A<n>` dans cette
Roadmap) ; celles qui sont des **défauts** sont aussi ouvertes comme `BUG-NNN` dans
[ISSUES_TODOLIST.md](./ISSUES_TODOLIST.md) (A1→BUG-085, A2→BUG-086, A3→BUG-087, A4→BUG-088 ;
A8 le sera Ă  son tour).
---
## âšȘ Backlog — PrioritĂ© 4 (P4)
### 73. Synchronisation multi-appareils — Obsidian Sync compatible
- **Effort :** 6-8 jours | **Impact :** 🟱
- **DĂ©cision 2026-09-26 : reportĂ© (P4)** — axe prioritaire = dette & sĂ©curitĂ© (#85/#87) ; #73 hors chemin critique. Si rĂ©activĂ© : partir d'un MVP export/hash/LWW adossĂ© Ă  #59 (PWA offline) + #62 (collab Yjs/CRDT) plutĂŽt qu'un protocole parallĂšle.
- **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 — SĂ©curitĂ©, architecture & performance (P0/P1)
### 87. AmĂ©lioration continue — tests, CI/CD, revues de sĂ©curitĂ© (phase 4)
- **Effort :** 3-5 jours | **Impact :** 🟡 | **Zone :** `.gitea/workflows/`, `tests/`
- **Décision 2026-09-26 : prioritaire (axe Dette & sécurité).**
- **Statut :** đŸ”” en cours depuis 2026-09-26 — par tranches. **T1 livrĂ©e (v2.28.1) :** bandit bloquant (`nosec` justifiĂ©s B324/B404/B603/B607/B406, B105 exclu comme `pyproject`), `npm audit` bloquant (0 vulnĂ©rabilitĂ©), 5 suites frontend intĂ©grĂ©es au CI (`upload`, `pretty`, `media-viewer`, `mfa-settings`, `config-ai-keys`). pip-audit reste consultatif (montĂ©es starlette/weasyprint Ă  qualifier).
- **T6 livrĂ©e (v2.28.15) :** dĂ©pendances qualifiĂ©es — mistune 3.3.3, python-multipart 0.0.31, weasyprint 70, mcp 1.28.1, fastapi 0.141.1 + starlette 1.7.0, setuptools 84 (`cast` mistune 3 sites) — suite 1359 passed, ruff/mypy 0, **`pip-audit` bloquant, 0 vulnĂ©rabilitĂ©** (seule exception documentĂ©e : PYSEC-2026-1325 ecdsa, sans correctif upstream, JWT HS256 uniquement).
- **T7 livrée (v2.28.15) :** **semgrep bloquant** sur ruleset 100 % local `semgrep-rules/` (8 rÚgles, 0 finding, contrÎle négatif OK) ; trivy écarté (binaire + DB réseau, couche Python couverte).
- **T8 livrée (v2.28.15, fin BUG-034) :** cookies `Secure` auto (`true|false|auto`, `X-Forwarded-Proto` sous `TRUST_PROXY`, warning affiné, `TRUST_PROXY=true` en prod) ; `CORSMiddleware` same-origin explicite ; `style-src 'unsafe-inline'` conservé assumé (189 `style=` + 343 `el.style`, T5c ayant verrouillé `script-src`).
- **Description :** renforcer le pipeline (`.gitea/workflows/ci.yml`, `desktop-build.yml`) pour le rendre bloquant par dĂ©faut et accompagner les phases 1 → 3. Constat 2026-09-26 : job `security` non bloquant (`bandit`/`pip-audit` en `|| echo`, ni semgrep ni trivy), E2E limitĂ© Ă  `chromium-desktop`, 5 suites frontend hors CI.
- **Sous-tĂąches :**
- [ ] Jobs CI sĂ©curitĂ© **bloquants** (bandit/semgrep/trivy, audits pip/npm) + tests E2E XSS (page de partage + lecteur markdown) — **T4 livrĂ©e :** `tests/e2e/xss.spec.js` (BUG-021/022, 2/2 vert) + `scripts/e2e-server.ps1` (cycle de vie serveur E2E avec progression `start|stop|status|logs`) + validation locale projet `chromium-desktop` : **108/108 verts** (obsigate 44, split 37, viewers 24, xss/header 3), mobiles ciblĂ©s 10/10
- [ ] Tests de concurrence (`users.json`), fuzzing de timing regex, couverture des composants critiques ; intĂ©grer au CI les 5 suites frontend hors CI (`upload`, `pretty`, `media-viewer`, `mfa-settings`, `config-ai-keys`) — **T2 livrĂ©e (v2.28.2) :** `tests/test_hardening_concurrency.py` (users.json concurrent + budget temps regex) ; 5 suites au CI (T1)
- [ ] Finir BUG-034 (migration CSP **nonce**, conversion des handlers inline), `Secure` cookies Ă  `true` par dĂ©faut, politique CORS same-origin explicite ; confirmer la rotation de la clĂ© DeepSeek (BUG-006, clĂ© dans l'historique Git) — **T3 livrĂ©e (v2.28.3)** (helper + avertissement + CORS attestĂ©) ; **T5a livrĂ©e (v2.28.6)** (16 handlers inline → listeners, CSP inchangĂ©e) ; **T5b livrĂ©e :** nonce frais par rĂ©ponse (`backend/csp.py`, `script-src`), injection dans les 6 pages HTML (dont nouvelle route `/excalidraw-editor.html`), `unsafe-inline` conservĂ© (inerte) ; **T5c livrĂ©e (v2.28.13)** (`script-src` sans `unsafe-inline`) ; **T8 livrĂ©e (v2.28.15)** (fin BUG-034 : Secure auto + CORS explicite ; `style-src` rĂ©siduel assumĂ© ; rotation DeepSeek BUG-006 toujours cĂŽtĂ© utilisateur)
- [ ] Revue pĂ©riodique des dĂ©pendances ; documentation utilisateur FR/EN synchronisĂ©e ; contrĂŽle automatisĂ© de la conformitĂ© au DoD — **T6/T9 livrĂ©es (v2.28.15)** (`pip-audit` 0, `npm audit` 0, locales FR/EN 2213 clĂ©s paritĂ© testĂ©e `test_i18n_parity.py`, gardes `test_version.py` + `test_ci_workflow.py`)
- [ ] 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 |
|---|---|---|---|
| 152 | Viewer XLSX — affichage multi-feuilles, Ă©dition des cellules, tĂ©lĂ©chargement | 2.27.0 | [archive](./archive/COMPLETED_v1-v2.md) |
| 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) |
| 111 | Visionneuse d'images — navigation fluide : image ajustĂ©e au cadre, navigation en place (cache annuaire + prĂ©chargement), pellicule persistante, flĂšches latĂ©rales au survol | 2.20.0 | [features/image-navigation-111.md](./features/image-navigation-111.md) |
| 112 | En-tĂȘte allĂ©gĂ© & compte en sidebar — version dans le menu Options, retrait utilisateur/dĂ©connexion du header, section compte en bas de la sidebar, pellicule d'images dĂ©filable (molette + flĂšches) | 2.21.0 | [features/header-user-sidebar-112.md](./features/header-user-sidebar-112.md) |
| 113 | Configuration — ordre naturel des sections (Profil 1er, À propos dernier, TOC = page) & avatar utilisateur (import PNG/JPG/WEBP, persistance serveur, cercle sidebar) | 2.22.0 | [features/settings-order-avatar-113.md](./features/settings-order-avatar-113.md) |
| 114 | Configuration — refonte mobile-responsive (modale plein Ă©cran 100dvh, sommaire en drawer coulissant, cibles tactiles ≄ 44 px, inputs 16 px anti-zoom, sauvegarde sticky, MFA 1 colonne, purge i18n/HTML) | 2.23.0 | [features/settings-mobile-114.md](./features/settings-mobile-114.md) |
| BUG-078 | Fichiers de code — coloration syntaxique restaurĂ©e (feuilles highlight.js basculĂ©es sur le mode de thĂšme et non la clĂ©) | 2.25.0 | [features/viewer-toolbar-highlight-avatars.md](./features/viewer-toolbar-highlight-avatars.md) |
| 115 | Viewer — barre d'outils de lecture Ă©pinglĂ©e au dĂ©filement | 2.25.0 | [features/viewer-toolbar-highlight-avatars.md](./features/viewer-toolbar-highlight-avatars.md) |
| 117 | Configuration — avatars prĂ©dĂ©finis dans le profil utilisateur (12 images) | 2.25.0 | [features/viewer-toolbar-highlight-avatars.md](./features/viewer-toolbar-highlight-avatars.md) |
| 85 | Refonte architecturale — dĂ©coupage du monolithe (14 routers, `main.py` 4 827 → ~750 lignes), stores JSON verrouillĂ©s, rate-limit SQLite optionnel | 2.27.2→2.27.13 | [features/archi-refonte-85.md](./features/archi-refonte-85.md) |
---
## 📊 RĂ©sumĂ© des efforts
| Priorité | Items | Effort total estimé |
|---|---|---|
| ✅ ComplĂ©tĂ© | #1 → #59, #61–72, #74–76, #78–86, #88–93, #94–100, #102–115, #117, #92 | ~141 jours rĂ©alisĂ©s |
| đŸ”” Finitions | #77 Desktop : 6 tests E2E **manuels** ([protocole](./DESKTOP_E2E_CHECKLIST.md)) — signature Windows non retenue (dĂ©cision 2026-09-26) | ~0,5-1 jour |
| âšȘ P4 reportĂ© | #73 Sync — **reportĂ© (dĂ©cision 2026-09-26)**, hors chemin critique | 6-8 jours si rĂ©activĂ© |
| âšȘ P0/P1 prioritaire | #87 CI/CD (BUG-035 → BUG-040 corrigĂ©s, #86 livrĂ©) | ~3-5 jours |
| âšȘ P0/P1/P2 backlog | #153 Visionneuse & Ă©dition XLSX — complĂ©tude (P0 ✅ A1-A4 ; P1 ✅ A5, A8-A10, A12, A9bis — reste A6-A7 ; A13-A17 2-4 j) | 2-4 jours restants |
| **Total chemin critique** | **#77 fin + #87** | **~4-6 jours** |
---
## Notes
- **Décisions 2026-09-26 :** axe prioritaire = dette & sécurité (#85/#87) ; #73 Sync reporté (P4, hors chemin critique) ; desktop livré non signé + doc SmartScreen.
- **Ajout 2026-09-27 :** #153 ouvert Ă  la suite de l'audit de la visionneuse XLSX (limitations, risques de perte de donnĂ©es, pĂ©rimĂštre IA/recherche) — dĂ©tail et critĂšres dans [features/xlsx-viewer.md](./features/xlsx-viewer.md).
- **ClĂŽture #85 (v2.27.13) :** monolithe dĂ©coupĂ© (T1→T9), stores verrouillĂ©s + rate-limit SQLite (T10), fiche `docs/features/archi-refonte-85.md`.
- 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/<slug>.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).