From ccfcb58ed1ababd18d75ff9f5c7362693de2567c Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Tue, 8 Sep 2026 06:25:46 -0400 Subject: [PATCH] =?UTF-8?q?docs(roadmap):=20corrections=20cases=20#74/#75/?= =?UTF-8?q?#76/#78=20=E2=80=94=20optionnels=20non=20retenus=20de-coches,?= =?UTF-8?q?=20reels=20coches,=20dedup=20I2/I3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ROADMAP.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 7cb56fd..c522af9 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -288,7 +288,7 @@ ##### D. Frontend — Arborescence de fichiers (0.5 jour) - [x] **D1. Icône et filtre** : L'icône PDF (`file-text` de Lucide) est déjà mappée dans `EXT_ICONS` (`frontend/js/utils.js:129`). Une fois `.pdf` dans `SUPPORTED_EXTENSIONS`, les PDFs apparaissent automatiquement dans l'arborescence via l'API `list_directory`. Aucun changement UI nécessaire. - - [x] **D2. Distinction visuelle** (optionnel) : Sous-titre léger sous le nom du fichier dans l'arborescence indiquant le nombre de pages (ex: « 12 pages ») pour différencier rapidement les PDF des MD. Donnée disponible via l'API `pdf/info`. + - [ ] **D2. Distinction visuelle** (optionnel — non retenu) : Sous-titre léger sous le nom du fichier dans l'arborescence indiquant le nombre de pages (ex: « 12 pages ») pour différencier rapidement les PDF des MD. Donnée disponible via l'API `pdf/info`. - [x] **D3. Drag & drop et upload** : Le mécanisme d'upload existant (`POST /api/file/{vault}/upload`) fonctionne déjà pour tout type de fichier. Vérifier que le MIME type `application/pdf` est correctement détecté et que le watcher réindexe automatiquement. ##### E. Frontend — Viewer PDF (1 jour) @@ -306,7 +306,7 @@ - Bouton « Plein écran » — ouvre le PDF dans un nouvel onglet en plein écran - Badge « N pages » indiquant le nombre de pages - Bouton « pop-out » — gardé, ouvre le viewer PDF dans une popup séparée - - [x] **E4. Thème (optionnel, non retenu)** : L'iframe PDF est en dehors du DOM applicatif donc pas affecté par le thème dark/light. Ajouter un message discret « Le PDF s'affiche avec le thème de votre navigateur » si `_currentTheme === 'dark'` (les PDFs en fond blanc dans un thème sombre peuvent surprendre). + - [ ] **E4. Thème (optionnel, non retenu)** : L'iframe PDF est en dehors du DOM applicatif donc pas affecté par le thème dark/light. Ajouter un message discret « Le PDF s'affiche avec le thème de votre navigateur » si `_currentTheme === 'dark'` (les PDFs en fond blanc dans un thème sombre peuvent surprendre). - [x] **E5. Responsive** : L'iframe s'adapte à la largeur du content-area. En mode mobile, hauteur ajustée à la viewport. La toolbar mobile existante fonctionne avec les actions PDF. ##### F. Frontend — Recherche (0.5 jour) @@ -406,17 +406,17 @@ ##### ✅ I. Tests - [x] **I1.** 22 tests statiques (structure, CSS, brace balance, régression backend) - [x] **I4.** 307 tests de régression passent - - [ ] **I2.** Tests d'intégration frontend (JS DOM) - - [ ] **I3.** Tests E2E Playwright (#58) + - [x] **I2.** Tests d'intégration frontend (JSDOM) — `tests/frontend/pane-manager.test.mjs` (9 tests) + - [ ] **I3.** Tests E2E Playwright (#58) — le split view n'est pas couvert par les 44 tests e2e -##### Reste à faire (0) +##### Reste à faire - [x] **C1b.** Sous-menu « Déplacer vers... » dans le menu contextuel des onglets - [x] **D2.** Drag & drop depuis l'arborescence vers un panneau spécifique - [x] **E3.** Rendu paresseux (mémoire) — contenu masqué via `display:none` sur panneaux inactifs - [x] **E4.** Verrouillage éditeur multi-panneau — même fichier ouvert dans 2 panneaux → focus le panneau existant - [x] **G3.** Bouton reset dans la palette de commandes (🔄 Réinitialiser les panneaux) - - [ ] **I2.** Tests d'intégration frontend (JSDOM ou similaire) — **FAIT** : `tests/frontend/pane-manager.test.mjs` (9 tests, 100% verts) - - [ ] **I3.** Tests E2E Playwright + - [x] **I2.** Tests d'intégration frontend (JSDOM) — `tests/frontend/pane-manager.test.mjs` (9 tests, 100% verts) + - [ ] **I3.** Tests E2E Playwright (split view non couvert) --- @@ -436,7 +436,7 @@ - [x] **A1. Nouvel endpoint `POST /api/ai/bookslm/context`** : Reçoit `{vault, directory}` → parcourt récursivement le répertoire → lit tous les fichiers supportés → retourne un objet `{files: [{path, title, content, type: "md"|"pdf"}], total_chars, file_count, directory_tree}` - [x] **A2. Limites configurables** : `BOOKSLM_MAX_FILES` (défaut 200), `BOOKSLM_MAX_TOTAL_CHARS` (défaut 200 000), `BOOKSLM_MAX_FILE_CHARS` (défaut 30 000 par fichier). Les fichiers au-delà sont tronqués avec un message `[... continue dans le fichier]`. - [x] **A3. Filtrage intelligent** : Ignorer les fichiers cachés (`.` préfixe), les dossiers `_attachments/`, les fichiers binaires non-supportés. Respecter `.gitignore` ou `.obsigate-ignore` si présent. - - [x] **A4. Streaming du contexte (non retenu — collecte rapide, indicateur simple côté UI)** : Pour les très gros répertoires, l'endpoint supporte le streaming SSE pour informer l'UI de la progression (« Indexation de 45/127 fichiers... »). + - [ ] **A4. Streaming du contexte (non retenu — collecte rapide, indicateur simple côté UI)** : Pour les très gros répertoires, l'endpoint supporte le streaming SSE pour informer l'UI de la progression (« Indexation de 45/127 fichiers... »). ##### B. Backend — Endpoint chat BooksLM (1 jour) — ✅ livré - [x] **B1. Endpoint `POST /api/ai/bookslm/chat`** : Reçoit `{vault, directory, message, conversation_history: [{role, content}]}` → construit le contexte système à partir des fichiers du répertoire → appelle le provider AI configuré → stream la réponse via SSE. @@ -551,7 +551,7 @@ ``` Version épinglée (`@0.18.0`) pour la stabilité. Mise à jour manuelle testée. - [x] **A3. Configuration du chemin d'assets** : Définir `window.EXCALIDRAW_ASSET_PATH` pour pointer vers le CDN des fonts/polices d'Excalidraw (nécessaire pour le rendu des polices handwriting). - - [ ] **A4. Initialisation React** : Excalidraw nécessite React + ReactDOM. Les importer depuis esm.sh également : + - [x] **A4. Initialisation React** (import map esm.sh → React 18.3.1 épinglé) : Excalidraw nécessite React + ReactDOM. Les importer depuis esm.sh également : ```html