A17 — nouveau endpoint GET /api/file/{vault}/xlsx/dashboard (read_workbook_
dashboard : plages nommees avec portee depuis defined_names read_only,
comptage graphiques/TCD par parts OPC, stats par feuille bornées 500x40 :
cellules/lignes/colonnes/formules/numerique + 8 premieres valeurs en cartes
KPI) et panneau frontend toggled depuis la toolbar (table des plages,
cartes KPI par feuille, hint actions IA). Bouton absent pour .csv et
formats en lecture seule ; le menu structure est saute quand le bouton
n'existe pas. i18n FR/EN (xlsx.dashboard_*), 8 tests backend + 2 tests
JSDOM + contre-preuve (5 echecs sur neutralisation), ruff/mypy 0.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected]>
26 KiB
26 KiB
ObsiGate — Roadmap
Version : 2.39.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
- Historique des versions : CHANGELOG.md
- Détail des fonctionnalités livrées : docs/archive/COMPLETED_v1-v2.md
- Fiches détaillées par feature : docs/features/
- Bugs / TODO : 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 dansdocs/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
- Reste à faire :
- Signature de l'updater Tauri (gratuit) : paire de clés générée,
pubkeyrenseignée,createUpdaterArtifactsactivé, secrets CI câblés - Manifeste
latest.jsongénéré parscripts/updater_manifest.py(intégré àpublish_release.py), endpoint updater pointé surmain - 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
- Signature de l'updater Tauri (gratuit) : paire de clés générée,
🔵 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
- 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 = 40sans 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é
- A1 Alerte de fidélité avant écriture :
inspect_workbook()→xlsx_lossy_features+ bandeau FR/EN + 409xlsx_lossy_contentsansforce(confirmation explicite puis reprise) — BUG-085 - A2 Écriture atomique (
wb.save(.tmp)+os.replace(), backup inchangé) — BUG-086 - A3 Verrou par fichier autour du read-modify-write (timeout 15 s + 409
conflict) — BUG-087 - A4 Neutralisation de l'injection de formule (
=/@stockés en texte, opt-inallow_formula+ boutonf(x)) — BUG-088
- A1 Alerte de fidélité avant écriture :
- P1 — recherche, IA, UX (🟡, 4-6 j) — 🔵 en cours
- 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) - A8
theadsticky + bandeau « feuille tronquée » (lève la troncature silencieuse) — BUG-090 - A9 Chargement paresseux par feuille (
GET …/xlsx/sheet?offset&limit, défilement virtuel) - A10 Types & formats de saisie (nombre/texte, booléens
TRUE/FAUX, dates FRJJ/MM/AAAAjour-first) - A11 Tests frontend (
tests/frontend/xlsx-viewer.test.mjs) + E2E (tests/e2e/xlsx-viewer.spec.js) au CI - A12 Valeur calculée affichée sous la formule (2ᵉ lecture
data_only=Trueseulement 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 (
.xlsmaveckeep_vba,.xls,.ods,.csvéditable) - A17 Vue « tableau de bord » (plages nommées, TCD, KPI par feuille, actions IA)
- P0 — garde-fous d'écriture (🔴, 2-3 j) — 🟢 livré
- 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 commeBUG-NNNdans 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 (
nosecjustifiés B324/B404/B603/B607/B406, B105 exclu commepyproject),npm auditbloquant (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 (
castmistune 3 sites) — suite 1359 passed, ruff/mypy 0,pip-auditbloquant, 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
Secureauto (true|false|auto,X-Forwarded-ProtosousTRUST_PROXY, warning affiné,TRUST_PROXY=trueen prod) ;CORSMiddlewaresame-origin explicite ;style-src 'unsafe-inline'conservé assumé (189style=+ 343el.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 : jobsecuritynon bloquant (bandit/pip-auditen|| 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 progressionstart|stop|status|logs) + validation locale projetchromium-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),
Securecookies àtruepar 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-inlineconservé (inerte) ; T5c livrée (v2.28.13) (script-srcsansunsafe-inline) ; T8 livrée (v2.28.15) (fin BUG-034 : Secure auto + CORS explicite ;style-srcré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-audit0,npm audit0, locales FR/EN 2213 clés parité testéetest_i18n_parity.py, gardestest_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
- Jobs CI sécurité bloquants (bandit/semgrep/trivy, audits pip/npm) + tests E2E XSS (page de partage + lecteur markdown) — T4 livrée :
✅ Complété — index
Détail complet dans docs/archive/COMPLETED_v1-v2.md et docs/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 |
| BUG-047 | Versionnage — source unique VERSION + bump SemVer automatique au commit (hooks + tag) |
2.3.0 | DEVELOPMENT_AND_RELEASES.md |
| 90 | Barre d'actions du document — regroupement fonctionnel + spacers | 2.3.0 | archive |
| 89 | Drag & drop complet de fichiers/dossiers & intégration Assistant IA | 2.3.0 | 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 |
| 9–20 | UX & productivité (share, webhooks, dashboard, conflits, backlinks, redaction, backups, graphe, header, aperçu) | 1.5.0→1.6.0 | archive |
| 21–22 | Architecture (split app.js → 16 modules, validateur imports CI) |
1.5.1 | archive |
| 23–25 | CI/CD & qualité (Gitea Actions, Ruff/Mypy/Bandit/Pip-audit, pytest) | 1.6.0 | archive |
| 26–29 | AI Editor (toolbar, multi-provider, 16 endpoints, auto-save) | 1.7.0 | archive |
| 30–39 | Fonctionnalités avancées (export PDF, palette, mobile, drag & drop, filtres, indexation non-bloquante) | 1.8.0→1.9.0 | archive |
| 40–46 | Gestion des backups (diff, gestionnaire, purge, auto, rétention) | 1.9.0 | archive |
| 47–57 | Mermaid.js (22 templates, live preview, thèmes, zoom, plein écran, pré-processeur Obsidian) | 2.0.0 | archive |
| 58 | Tests E2E Playwright (44 desktop + 12 mobile, CI) | 2.0.0 | archive |
| 59 | Mode hors-ligne PWA complet (IndexedDB, file de synchro, conflits) | 2.0.0 | archive |
| 63 | Internationalisation i18n FR/EN | 2.0.0 | archive |
| 65 | Thèmes personnalisés (light/dark/high-contrast/sepia, import/export) | 2.0.0 | archive |
| 66 | Export multi-formats (HTML, MD bundle, ePub) | 2.0.0 | archive |
| 71 | Tableau de bord administrateur | 2.0.0 | archive |
| 64 | MFA (TOTP + WebAuthn + recovery codes) | 2.1.0 | archive |
| 74 | Support complet des documents PDF | 2.1.0 | features/pdf.md |
| 75 | Éditeur multi-panneaux (Split View) | 2.1.0 | features/split-view.md |
| 61 | Plugins système (sandbox Web Worker, hooks, 9 endpoints) | 2.2.0 | archive |
| 67 | Notifications web — Push API | 2.2.0 | archive |
| 68 | Health check enrichi | 2.2.0 | archive |
| 72 | API publique documentée — OpenAPI 3.1 | 2.2.0 | archive |
| 76 | BooksLM — Console AI contextuelle par répertoire | 2.2.0 | features/bookslm.md |
| 78 | Éditeur Excalidraw | 2.2.0 | features/excalidraw.md |
| 62 | Collaboration temps réel — Édition simultanée (Yjs/CRDT, WebSocket, awareness) | 2.3.0 | features/collaboration.md |
| 79 | Assistant IA — Outils (function calling) & serveur MCP | 2.3.0 | features/ai-tools-mcp.md |
| 80 | Assistant IA — Rendu Markdown, liens fichiers/paths & sessions | 2.3.0 | features/ai-assistant-ux.md |
| 81 | Assistant IA — Commandes (@, /), skills, images & capacités des modèles |
2.3.0 | 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 |
| 69 | Éditeur mobile natif — Interface tactile optimisée | 2.3.0 | features/mobile-editor.md |
| 70 | Recherche sémantique — Embeddings vectoriels (hybride TF-IDF + RRF) | 2.3.0 | features/semantic-search.md |
| 77 | Application Desktop native — Tauri | 🔵 en cours | features/desktop-tauri.md |
| 84 | Consolidation & sécurité — revue statique 2026-09-13 (phase 1, BUG-021→034) | 2.3.0 | archive |
| 83 | Barre d'outils d'édition mobile — ruban style Obsidian Android | 2.3.0 | archive |
| 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 |
| 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 |
| 93 | Édition inline — « Editer » et « Forge » remplacent la vue lecture (assistant IA qui met le document à jour) | 2.3.0 | 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 |
| 95 | Assistant IA — Historique permanent des conversations (persistance backend) | 2.4.0 | 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 |
| 97 | Assistant IA — Panneau « + » extensible (fichiers, Deep Research, contextes, skills…) | 2.4.0 | features/ai-assistant-history.md |
| 98 | Assistant IA — Filtre de recherche dans la sidebar « Historique IA » | 2.5.0 | features/ai-assistant-history.md |
| 99 | Sidebar — Filtrage des vues « Récents » et « Sauvegardes » | 2.6.0 | features/sidebar-filters.md |
| 100 | Assistant IA — Deep Research en pastille (au lieu du texte injecté) | 2.6.0 | 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 |
| BUG-057 | Assistant IA — bouton « Ajouter » fonctionnel dans l'éditeur Forge (en plus d'« Editer ») | 2.9.0 | archive |
| 102 | Assistant IA — bouton « Ajouter la section » par bloc de code (insertion du bloc seul) | 2.9.0 | archive |
| 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 |
| 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 |
| 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 |
| 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 |
| 106 | Assistant IA — Actions instantanées contextuelles, catalogue « Toutes les actions » & frontmatter complet | 2.14.0 | 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 115 | Viewer — barre d'outils de lecture épinglée au défilement | 2.25.0 | 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 |
| 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 |
📊 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) — 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.
- 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) oudocs/archive/COMPLETED_v1-v2.md(item court), ajouter une ligne dans l'index « Complété », et consigner la version dans le CHANGELOG.