Skip to content

History / 1.14 Obsidian Vault Guide

Revisions

  • docs(wiki): RC4 — notes de version, et 23 defauts documentes qui n'existent plus Le wiki citait 23 issues comme ouvertes. Toutes sont fermees : chaque « voir issue #N » decrivait donc un defaut corrige, et le wiki decrivait une application qui n'existe plus. Nouvelles notes de version (3.4), sur le modele des RC3 : orientees utilisateur, ordonnees par ce qu'on perdait ou voyait de faux plutot que par famille technique. La section 1 s'ouvre sur les deux defauts qui retiraient du texte d'un livre exporte, parce que c'est ce qu'un auteur doit lire en premier. Dix-huit pages corrigees. Le plus souvent, un long paragraphe decrivant un bug verifie dans le code est remplace par sa resolution — d'ou un diff qui retire plus de lignes qu'il n'en ajoute. Les affirmations les plus trompeuses etaient : - les reglages d'ouvrage « n'ont aucune UI » (ils en ont une depuis la RC4) - l'export Word d'un livre cite « sort vide » (corrige) - le corpus manuscrit sans interface (elle existe) - le compresseur de contexte « jamais appele » (cable, et ses trois distorsions corrigees) - `embeddingProvider` sans controle (section Embeddings) - le filtre par collection absent, le bouton OCR manuel injoignable, le toggle des noeuds auteurs desactive en dur Home annonce la RC4 ; Features passe en 1.0.0-rc.4 et gagne deux sections — corpus manuscrit et accessibilite — qui n'avaient nulle part ou vivre. Les limitations connues des notes RC4 sont argumentees, pas subies : pdfjs-dist renvoie a #77, et le mode de detection seule de l'inspecteur explique pourquoi une source primaire contenant des imperatifs ne doit pas etre tronquee. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @inactinique inactinique committed Jul 26, 2026
  • docs(wiki): corriger la prémisse fausse de l'issue #29 (busy timeout) Une contre-vérification adversariale des 40 issues filées par l'audit a réfuté la prémisse centrale de l'issue #29 : better-sqlite3 applique par défaut un timeout de 5000 ms à toute connexion (database.js : `'timeout' in options ? options.timeout : 5000`) — le « 0 ms par défaut » affirmé ne vaut que pour SQLite brut. L'issue a été retitrée et déclassée sur GitHub ; les deux pages du wiki qui portaient cette affirmation sont corrigées en conséquence : - Obsidian Vault Guide : l'encadré « SQLITE_BUSY immédiat » devient un risque résiduel étroit — seule une transaction d'écriture tenant le verrou plus de 5 secondes (grosse réindexation par lot) peut encore pousser un écrivain concurrent en SQLITE_BUSY ; la recommandation qui survit est d'aligner les 3 écrivains sans WAL sur ObsidianVaultStore. - Tropy Integration Guide : même correction sur l'encadré de concurrence de l'auto-resync, et la note de conception sur la connexion non fermée ne cite plus « l'absence de busy_timeout » comme facteur aggravant. C'est le seul faux positif trouvé par la passe de re-vérification : les 39 autres issues de l'audit tiennent, et les 7 issues utilisateur anciennes (#1, #2, #3, #9, #10, #11, #12) sont toutes confirmées contre le code avec leur cause racine. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    @inactinique inactinique committed Jul 24, 2026
  • docs(wiki): quinzième passe — course Zotero inter-projets, watcher Tropy orphelin, BibTeX perd les entrées sans auteur Six nouveaux bugs applicatifs réels trouvés et filés cette passe, la plupart via un angle « que se passe-t-il si on change de projet pendant une opération en cours » appliqué systématiquement à chaque intégration : - issue #33 (le plus sérieux) : une synchronisation Zotero relit le vectorStore du projet ACTUELLEMENT ouvert après son await réseau, pas celui qui a démarré la synchronisation — changer de projet pendant une synchronisation en cours écrit les collections du projet A dans le projet B. Corruption de données inter-projets réelle, pas juste une fuite ou un glitch d'affichage. - issue #34 : TropyService.init() remplace this.watcher sans jamais appeler .unwatch() sur l'ancien (contrairement au registre LLM juste à côté, qui a son disposePreviousRegistry() explicite) — un watcher orphelin peut déclencher une resynchronisation du mauvais projet. - issue #35 : le canal de progression d'indexation Obsidian (fusion:vault:progress) ne porte aucun identifiant de projet — affichage seulement, aucune corruption de données puisque l'écriture elle-même reste bien scopée. - issue #31 : l'événement d'expiration d'une proposition IA lors d'un changement de chapitre est journalisé sous le chemin du chapitre qu'on vient de rejoindre, pas celui qu'on quitte — la destruction de la vue CodeMirror se produit après que le store ait déjà basculé son filePath. - issue #32 : l'import BibTeX rejette silencieusement toute entrée sans champ author (pas de repli sur editor), perdant les volumes collectifs et travaux anonymes courants en bibliographie historique — seul un console.warn, aucun signal côté interface. - issue #36 : npm run lint échoue immédiatement, aucune configuration ESLint n'existe dans le dépôt (déjà su et documenté dans le commentaire du workflow CI, mais jamais remonté dans le wiki ni retiré du script). Autre trouvaille notable (pass fusionné après un traçage de bout en bout du pipeline Tropy) : l'ordre de priorité des transcriptions était mal documenté depuis le début (notes Tropy > transcription externe type Transkribus > OCR — pas « notes > OCR > manuel » comme l'affirmait une version antérieure), et le chunking des sources primaires est en réalité figé en taille fixe (DocumentChunker), jamais le chunker adaptatif utilisé par les PDF — corrigé sur Technical Architecture. Cluster meta & notes de version entièrement converti en lecture vide cette passe : Ethics.md a enfin eu sa première lecture véritablement approfondie (aucune affirmation factuelle vérifiable trouvée, page confirmée inerte plutôt que simplement non examinée) et un nouvel échantillon de notes de version RC2/RC3 vérifié contre les tags git réels a tenu sans exception.

    @inactinique inactinique committed Jul 24, 2026
  • docs(wiki): quatorzième passe — brain.db sans busy_timeout, course export/renumérotation, affirmation de confidentialité incomplète Deux nouveaux bugs applicatifs réels trouvés et filés cette passe : - issue #29 : aucune des quatre classes qui écrivent dans le brain.db partagé (VectorStore, PrimarySourcesVectorStore, HistoryManager, ObsidianVaultStore) ne définit de busy_timeout — seul le module Obsidian active le mode WAL. Le journal.db séparé a déjà ce correctif exact (WAL + busy_timeout=3000, avec un commentaire explicite sur l'écriture concurrente) mais il n'a jamais été appliqué au fichier partagé, qui a pourtant plus d'écrivains concurrents. Documenté dans les guides Obsidian et Tropy. - issue #30 : la renumérotation des notes à l'échelle du livre écrit chapitre par chapitre sur le disque sans verrou — un export déclenché pendant la boucle peut assembler un manuscrit à moitié renuméroté, silencieusement. Le rollback en cas d'échec protège contre les échecs internes de l'opération, pas contre une lecture concurrente par l'export. Documenté dans Books-and-Chapters. Autres corrections : - Build and Deployment Guide : l'affirmation de confidentialité « aucune donnée envoyée sauf Zotero » se contredisait avec la phrase juste au-dessus mentionnant les fournisseurs cloud — réécrite pour lister les trois catégories réelles de sortie de données optionnelle (Zotero, fournisseur LLM cloud, connecteurs d'archives). - Technical Architecture : traçage complet d'un scénario de bout en bout (PDF de 200 pages → indexation → récupération Brainstorm) a révélé un mécanisme jamais documenté en 13 passes — l'extraction PDF tourne dans un processus enfant Node système isolé (contournement d'un crash pdfjs-dist), avec un timeout de 120s, une file d'attente séquentielle globale (un PDF à la fois, jamais en parallèle), et une exigence de binaire Node système séparé d'Electron. Documentation aussi d'un second filet de sécurité (EMBED_CHAR_CAP=6000 caractères dans PdfIndexer.ts, indépendant de la troncature côté Ollama). - Features.md : la bascule automatique Ollama→embarqué est en réalité asymétrique entre génération (toujours) et embeddings (seulement si les dimensions correspondent) — précision ajoutée, déjà documentée ailleurs mais pas ici. - Logging System : la table « comportement par défaut » laissait penser à un mécanisme unique de filtrage alors que celui du renderer n'est jamais réellement actif (aucun `process` global) — précision ajoutée après trois passes de corrections successives sur cette même page qui n'avaient jamais été reconciliées entre elles. Meta & notes de version : une seule correction mineure de cohérence interne sur Logging System, rien d'autre trouvé sur les notes de version elles-mêmes malgré la recherche de contradictions avec les pages actuelles.

    @inactinique inactinique committed Jul 24, 2026
  • docs(wiki): onzième passe — Unlink Obsidian écrase brain.db, compression de contexte jamais câblée Deux bugs applicatifs sérieux trouvés et filés cette passe, en changeant de méthode sur le cluster brainstorm/intégrations (deux passes propres consécutives, donc recherche de contradictions inter-pages et de collisions sur des ressources partagées plutôt que répéter les mêmes vérifications) : - issue #27 : le bouton « Unlink » d'un carnet Obsidian supprime le fichier .cliodeck/brain.db tout entier via fs.unlink, pas seulement l'index du carnet — obsidianStorePath() pointe vers le même fichier partagé que les vecteurs PDF, l'index Tropy et le journal de recherche depuis la consolidation. Documenté dans 1.14-Obsidian-Vault-Guide.md. - issue #28 : le système de compression de contexte RAG (ContextCompressor.ts) n'est appelé nulle part dans le vrai chemin de requête — retrieval-service.ts ne renseigne jamais le champ `compression` que chat-engine.ts vérifie en aval. Tout contexte récupéré part vers le LLM sans compression, quelle que soit sa taille. Documenté dans 2.-Technical-Architecture.md (section renommée « declared but dead »). Autres corrections : - Brainstorm Mode Guide + MCP Integration Guide : une vraie UI de bascule par outil existe désormais (bannière MCP, classification lecture/écriture avec opt-in explicite pour les outils d'écriture) — la note « UI minimale » était périmée, remplacée par une section complète. - Keyboard Shortcuts : nuances plateforme sur F11 (plein écran) et F12 (DevTools) sur macOS, même classe de lacune que Cmd+W (passe 10). - Logging System : dernière formulation trop large sur les DevTools et les variables d'environnement corrigée (seul CLIODESK_DEBUG/DEBUG ouvre les DevTools, pas CLIODESK_LOG_LEVEL ; les logs renderer révélés n'existent de toute façon plus dans le bundle de production). - RC2 Release Notes : le « problème connu » sur l'étape export des recipes était factuellement faux (document_id était déjà honoré à ce tag) — remplacé par la vraie limitation de l'époque (projectType 'article' figé), corrigée avant RC3. - Features.md : tableau de bord statistiques a 5 onglets, pas 4 (onglet Tags manquant). - Installation Linux : bibliothèques système manquantes dans le résumé (libsecret-1, libgbm) alors que présentes dans la commande d'installation réelle. - Build and Deployment Guide : build:all ne construit que pour la plateforme hôte, pas toutes les plateformes ; stockage des clés API documenté avec son repli en clair non signalé ailleurs quand le chiffrement OS n'est pas disponible.

    @inactinique inactinique committed Jul 24, 2026
  • docs(wiki): champ TITRE mal décrit, diagnostic de note ignorée invérifiable - TITRE : la page donnait le chemin relatif complet comme exemple typique. En réalité (retrieval-service.ts : h.note.title || h.note.relativePath), le titre normal vient du frontmatter, du premier H1, ou du nom de fichier nu (ObsidianMarkdownParser.ts) — le chemin relatif n'est qu'un repli de dernier recours. - « Consultez les logs de l'indexeur dans DevTools » pour savoir pourquoi une note a été ignorée : aucun console.log dans tout le dossier obsidian/, et le handler IPC ne renvoie que des compteurs agrégés — aucune raison par note n'est exposée nulle part.

    @inactinique inactinique committed Jul 23, 2026
  • docs(wiki): troisième passe — Obsidian et Tropy, encore, avec de nouvelles erreurs Ces deux pages ont produit des erreurs distinctes à chacune des trois passes — signe qu'elles avaient été rédigées sans confrontation systématique au code dès le départ. Obsidian Vault Guide : - « champ frontmatter connu pour être ignorable » : fabriqué. Le vrai SkipReason (scan-report.ts:24-32) a huit variantes structurelles (fichier caché, note vide, contenu binaire, erreur de parsing frontmatter, trop volumineux, exclu par motif, illisible, wikilinks cassés) — aucun réglage utilisateur n'existe pour exclure une note. - Tableau des combinaisons de filtres de récupération : la combinaison « Biblio + Primary sans notes » manquait, vérifiée dans resolveRetrievalArgs (fusion-chat-service.ts). - Libellé du bouton corrigé (« Link a vault… », pas « Link vault »). Tropy Integration Guide : - Ordre de priorité des transcriptions inversé : la page plaçait l'OCR avant Transkribus, mais TropySync.ts:235-279 cherche Transkribus en second (avant l'OCR, qui n'est tenté qu'en dernier recours). - Section « Surveillance automatique » entièrement fabriquée : la page décrivait une notification proposant la resynchronisation. Vérifié dans tropy-service.ts et primarySourcesStore.ts — la resynchronisation est automatique et silencieuse, sans aucune alerte affichée ; une erreur du watcher n'a même aucun relais côté interface aujourd'hui.

    @inactinique inactinique committed Jul 23, 2026
  • docs(wiki): deuxième passe — corriger une erreur dans ma propre réécriture, et un vrai manque d'UI **Erreur dans ma propre correction précédente** : - Guide des LLM embarqués : j'avais écrit que embeddingProvider se règle « dans Paramètres → LLM » au même titre que generationProvider. Faux — vérifié frais : grep sur tout src/renderer/ pour "embeddingProvider" ne retourne aucun fichier ; RAGSettingsPanel.tsx n'écrit jamais que generationProvider ; EmbeddedLLMSection.tsx ne contient aucune occurrence du mot "embedding". Le moteur sait faire des embeddings embarqués, mais rien dans l'interface ne permet de les sélectionner ou de télécharger le modèle — seule l'édition manuelle du fichier de configuration le permet aujourd'hui. Corrigé à quatre endroits de la page, et signalé comme un vrai manque produit en issue #18 (https://github.com/cliodeck/cliodeck-app/issues/18), pas seulement un défaut de documentation. **Erreur dans ma réécriture du guide Word Templates** : le découpage en trois routes d'export était faux. Vérifié frais dans word-export.ts — mergeWithTemplate() (fusion par {placeholders}) ne dépend que de templatePath, pas du tout de useEnginePipeline. Il n'y a que deux mécanismes réels : pandoc+reference-doc (styles, uniquement si bibliographie + pandoc + moteur de citation non demandé), et native+docxtemplater (placeholders, dans tous les autres cas — y compris bibliographie + moteur de citation demandé, que ma première version traitait à tort comme une troisième route « à base de styles »). **Erreurs ratées par la première passe** : - Corpus Analysis Guide : langue par défaut du topic modeling annoncée « Français », en réalité « multilingual » (main.py:54-56, useCorpusData.ts:145). - Journal and History : une « icône History dans le panneau de chat » fabriquée — AssistantChat.tsx n'a aucune référence à l'historique ; le vrai composant de navigation (ChatHistoryView.tsx) ne vit que dans le panneau Journal. Reformulé pour dire que c'est la même donnée, pas une fonctionnalité séparée. - Technical Architecture : la section Primary Sources (Tropy) décrivait encore un vector store autonome (sources.db/sources.hnsw) alors que PrimarySourcesVectorStore utilise le brain.db partagé depuis la fusion — contradiction interne avec la section Key Architecture Files déjà corrigée sur cette même page. L'étape « Dense Search » appelait encore ollamaClient.generateEmbedding(), contredisant l'étape Embedding Generation juste au-dessus, déjà corrigée elle aussi. - Obsidian Vault Guide : « alongside the other workspace databases (vectors.db, primary-sources.db) » — ces deux noms sont pré-fusion, le vrai voisin est brain.db.

    @inactinique inactinique committed Jul 23, 2026
  • docs(wiki): deuxième passe — corriger vectors.db, une régression de numérotation, et deux erreurs de sécurité factuelle Cette repasse adversariale a trouvé des erreurs que la première n'avait pas vues, y compris deux que j'ai moi-même introduites en corrigeant autre chose. **Régression introduite par mes propres corrections précédentes** : - Les arborescences de projet réécrites dans les guides Linux/macOS citaient `vectors.db` comme fichier d'index PDF. Vérifié frais contre backend/core/workspace/layout.ts:67 — le nom réel est `brain.db`, store partagé (PDF + Tropy + historique) depuis la fusion. `vectors.db` n'est qu'un nom pré-fusion, uniquement pertinent pour la migration d'anciens projets. Corrigé dans 1.-ClioDeck-Installation.md, 1.1-Linux, 1.2-macOS, et 2.1-Build-and-Deployment-Guide.md (cette dernière portait la même erreur, présente avant mes modifications). - Numérotation cassée dans « Option B: Installation from Source » (Linux et macOS) : la suppression d'une étape lors de ma correction precedente avait laissé un saut 3 → 5 sans renuméroter. Corrigé dans les deux fichiers. **Erreurs à impact utilisateur réel, ratées par la première passe** : - Obsidian Vault Guide : la page affirmait qu'« Unlink » laisse l'index en place et qu'un re-lien le réutilise. Vérifié contre fusion-handlers.ts:619-631 — le handler fait `fs.unlink(dbPath)`, l'index est bien supprimé ; se relier déclenche une reconstruction complète. Un utilisateur suivant l'ancienne description perdrait du temps à croire son index intact. Champ TITLE → TITRE corrigé au passage (vérifié fusion-chat-service.ts:838). - Tropy Integration Guide : un raccourci clavier Ctrl+Shift+S pour la synchronisation n'existe nulle part (grep sur menu.ts et les composants PrimarySources, aucune occurrence) — retiré. La page décrivait aussi les embeddings comme figés sur nomic-embed-text ; tropy-service.ts:98 utilise le provider configuré, comme partout ailleurs dans l'app. Chemins de stockage corrigés vers brain.db + primary-hnsw.index (vérifiés dans PrimarySourcesVectorStore.ts:125-126). - MCP Integration Guide : la troncature des réponses (4000 caractères, 2000 pour Gallica/HAL) n'était pas documentée alors qu'elle est visible dans les réglages de l'app elle-même ; ajoutée. Libellés des onglets alignés sur l'UI réelle (« Claude Code CLI », « Generic MCP (stdio) »). Build-and-Deployment-Guide.md : la section « User Installation » citait encore des noms de fichiers 1.0.0 sans suffixe arm64, alors que les guides Linux/macOS avaient déjà été corrigés dans le même sens la première fois — incohérence entre pages, maintenant alignée.

    @inactinique inactinique committed Jul 23, 2026
  • docs: RC2 wiki — Brainstorm, MCP, Archives, Obsidian + Home rewrite Rewrites Home.md (was almost empty) as a navigable TOC and adds four new user guides covering the features introduced by the ClioBrain fusion and the surrounding RC2 work: - 1.11 Brainstorm Mode — the chat mode that absorbed ClioBrain (agent loop, `.cliohints`, source grounding, retrieval scope toggles). - 1.12 MCP Integration — both directions: MCP clients consumed from ClioDeck, and ClioDeck's own MCP server exposed to Claude Desktop / Claude Code. Includes ready-to-paste snippets and the 9-tool catalog. - 1.13 Archive Connectors — Gallica, HAL, Europeana. API key flow for Europeana (Electron safeStorage). - 1.14 Obsidian Vault — pointing the app at a vault folder, indexing, use as a RAG source. Plus 3.2 RC2 Release Notes, and the pre-RC2 release artefacts move to `_archive/` (BETA 2 notes and the v1.0 implementation plan). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    @inactinique inactinique committed May 17, 2026