🧠 Obsidian · & le vault autoportant

Chapitre 11
Exploitation : au quotidien, sur machine neuve, et les pièges

Objectifs du chapitre

1. La boucle quotidienne

  1. Ouvrir Obsidian. Obsidian Git tire les modifications distantes.
  2. Écrire : note du jour par Daily Notes, captures par Ctrl+Maj+I, fiches par template.
  3. Obsidian Git commite et pousse toutes les dix minutes. Rien à lancer.

C'est tout. L'outillage de la partie II ne sert pas au quotidien — et c'est le signe qu'il est bien conçu. Une infrastructure qu'on doit invoquer tous les jours est une infrastructure qui n'a pas fini son travail.

Ponctuellement, deux vérifications de quelques secondes :

$ uv run --project 90-meta/tooling 90-meta/tooling/vault.py doctor
0 probleme(s)
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py doctor
0 ecart(s)

Le premier après une session d'écriture nourrie, le second après avoir touché aux réglages d'Obsidian.

2. La machine neuve

$ git clone git@github.com:moi/vault.git && cd vault
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py apply
40 fichiers ecrits dans .obsidian/

Puis ouvrir le dossier comme vault dans Obsidian. Neuf plugins à leur version épinglée et vérifiée, réglages en place, raccourci actif.

Cette séquence est aussi le test d'acceptation de tout l'édifice, et il vaut la peine de le rejouer de temps en temps depuis un clone jetable :

$ cd /tmp && rm -rf verif && git clone ~/vault verif && cd verif
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py apply
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py doctor
0 ecart(s)
$ uv run --project 90-meta/tooling 90-meta/tooling/vault.py doctor
0 probleme(s)
$ uv run --project 90-meta/tooling pytest -q
148 passed

Ce que ça prouve : rien d'essentiel ne vit hors du dépôt. Une configuration oubliée sur ta machine se révèle ici, et nulle part ailleurs.

Prérequis réels : git, uv, un accès réseau à GitHub. Le troisième est le plus fragile — derrière un proxy d'entreprise, apply échoue. Un mode hors ligne à partir d'un cache de plugins était prévu au départ ; il n'a jamais été construit. C'est la limite connue la plus sérieuse du dispositif.

3. Les opérations courantes

Mettre à jour un plugin

$ # dans 90-meta/manifest.yaml, supprimer version ET sha256 du plugin
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py pin
dataview epingle en 0.5.71
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py apply
$ git add 90-meta/manifest.yaml && git commit -m "chore: dataview 0.5.71"

Supprimer les deux champs : pin saute toute entrée qui a déjà une version et des empreintes. Changer le numéro sans effacer les empreintes produit un échec de vérification à l'apply suivant — message clair, mais après coup.

Promouvoir un réglage fait à la souris

$ # après avoir réglé quelque chose dans Obsidian, Obsidian fermé
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py doctor
plugins/dataview/data.json : different — ...
1 ecart(s)
$ uv run --project 90-meta/tooling 90-meta/tooling/bootstrap.py export

Reporter le bloc concerné dans le manifeste, relancer doctor, commiter. Le cycle complet prend une minute et laisse une trace datée de la décision.

Ajouter un plugin

Ajouter - id: … et repo: … au manifeste, lancer pin puis apply. Si tu veux piloter ses réglages, configure-le dans Obsidian puis export — c'est aussi le seul moyen d'obtenir la structure exacte de son data.json, que sa documentation ne décrit généralement pas.

4. Confidentialité

Un vault professionnel poussé sur un dépôt distant pose une question qu'il vaut mieux trancher au début qu'après.

Trois faits qui ne dépendent d'aucun outillage :

Le vault de référence a choisi l'anonymisation manuelle : pas de nom de client, pas de code affaire, pas d'adresse IP d'installation, pas d'extrait de code livrable. Un contrôle automatique — une liste de motifs interdits vérifiée avant chaque commit — avait été conçu puis écarté, pour une raison instructive.

Un tel contrôle ne peut pas être bloquant tant qu'Obsidian Git commite tout seul : le plugin n'exécute pas les hooks git (chapitre 7). Le rendre bloquant obligerait à désactiver l'auto-commit et à passer tous les commits par un script.

Le choix a donc été : garder le confort, assumer la discipline manuelle, et l'écrire dans les conventions plutôt que de laisser croire à une garantie inexistante. Ce qui compte n'est pas le choix retenu, c'est qu'il soit explicite.

5. Les pièges de plateforme

Ceux qui suivent viennent tous d'un usage réel sur Windows plus WSL2, avec le vault sur un disque NTFS.

Deux git pour un même dépôt

Un dépôt sur /mnt/c/… est accessible depuis le git Linux de WSL et depuis le git Windows. Utiliser les deux, ou utiliser le git Linux pour une activité intense, a déjà produit des .git corrompus — références et objets remplis de zéros.

La règle retenue : toujours le binaire Windows, y compris appelé depuis WSL, et pousser après chaque commit pour que le distant serve de filet.

$ alias git=/mnt/c/Users/moi/AppData/Local/Programs/Git/cmd/git.exe

Obsidian Git n'est pas concerné : il écrit depuis Windows avec sa propre implémentation, jamais à travers la couche WSL.

Les handles qui traînent

Fermer Obsidian ne libère pas instantanément .obsidian/. Un apply lancé dans la foulée échoue sur le renommage, alors qu'aucun processus Obsidian n'apparaît dans la liste des tâches. Trente secondes plus tard, la même commande passe.

Rien de grave grâce à la restauration du chapitre 9 — mais il faut le savoir pour ne pas conclure à une panne. Une reprise automatique sur le renommage réglerait la question ; elle n'a pas été écrite, faute de pouvoir reproduire l'échec à la demande.

Les fins de ligne

Obsidian écrit côté Windows, les scripts côté WSL. Sans précaution, chaque aller-retour produit un diff de fins de ligne sur des fichiers dont le contenu n'a pas bougé. Un .gitattributes avec * text=auto eol=lf, écrit par apply, ferme le sujet.

Le service de synchronisation

Répété du chapitre 1 parce que c'est le piège le plus coûteux : aucun service de synchronisation ne doit surveiller le dossier du vault. Le vault de référence a été déplacé hors de OneDrive avant même la première ligne de code.

6. Ce que le dispositif ne fait pas

Un inventaire honnête vaut mieux qu'une promesse creuse.

LimiteConséquence
Pas de mode hors ligneapply exige GitHub joignable. Derrière un proxy, l'amorçage échoue.
Pas de contrôle de contenu bloquantL'anonymisation repose sur la discipline.
Réglages non gérésKanban et Advanced Tables repartent de leurs défauts sur une machine neuve.
Un raccourci par commandeLe manifeste ne sait pas exprimer plusieurs liaisons ; export le signale.
Aucune gestion de conflitDeux machines désynchronisées produisent un conflit git ordinaire, à résoudre à la main.

Aucune de ces limites n'est un oubli : chacune est un arbitrage, et chacune est écrite quelque part dans le vault. C'est peut-être le vrai enseignement du cours — la différence entre un système fiable et un système fragile tient moins à ce qu'il garantit qu'à la clarté avec laquelle il dit ce qu'il ne garantit pas.

Récapitulatif

Exercices

Exercice 1 — Le collègue et le proxy

Un collègue clone ton vault sur un poste d'entreprise où GitHub est bloqué. apply échoue au premier plugin. Que peux-tu lui proposer aujourd'hui, et que faudrait-il construire ?

Voir la solution

Aujourd'hui, trois contournements, du moins au plus lourd :

  • Lui transmettre un .obsidian/plugins/ déjà construit depuis ta machine. Ça marche, et ça contourne complètement la vérification par empreinte — donc à réserver à quelqu'un à qui il fait confiance, ce qui est le cas ici.
  • Retirer temporairement les plugins du manifeste et travailler avec les seuls plugins cœur. Le vault reste utilisable : les notes sont du markdown, seules les vues Dataview s'affichent en code source.
  • Faire ouvrir GitHub par l'informatique, ce qui est la vraie réponse mais pas la plus rapide.

Ce qu'il faudrait construire : l'option --from-cache <dir> prévue par la spécification initiale. apply chercherait les actifs dans un dossier local avant d'aller sur le réseau, en vérifiant les mêmes empreintes. C'est le point qui distingue cette option du premier contournement : le cache est une source d'octets, pas une dispense de contrôle. Un cache constitué sur une machine connectée devient alors transportable sur clé USB.

Exercice 2 — Une fuite déjà poussée

Tu réalises qu'un commit d'il y a trois semaines contient une adresse IP d'installation et un nom de client, dans une note depuis modifiée. Le dépôt est privé, personne d'autre n'y a accès. Quelles options, et laquelle retiens-tu ?

Voir la solution

Option 1 — ne rien faire. Le dépôt est privé, l'accès est limité à toi. Le risque résiduel est celui d'une compromission du compte ou d'un changement de visibilité par erreur. Acceptable pour une IP privée, discutable pour un nom de client sous accord de confidentialité.

Option 2 — réécrire l'historique. git filter-repo pour supprimer la chaîne des trois semaines de commits, puis push --force. Faisable ici : dépôt privé, aucun autre clone, historique linéaire. C'est le moment le moins cher pour le faire — dans un an, avec des centaines de commits et peut-être un second clone, ce sera une opération à risque.

Option 3 — repartir d'un dépôt neuf, en n'important que l'arbre courant. Radical, on perd l'historique, mais imparable et sans manipulation délicate.

Ce qu'on retient : l'option 2, parce que le coût de la réécriture croît avec le temps et que la donnée est réellement sensible. Et surtout, on note la leçon — vérifier ce qu'on écrit avant le commit, puisque après, la seule option propre est chirurgicale.

Détail à ne pas oublier : après réécriture, le contenu reste accessible via les objets non référencés et le reflog local pendant un temps, et le distant peut garder des objets orphelins. Sur GitHub, un commit atteignable par son empreinte reste servi un moment même sans référence — d'où l'intérêt de contacter le support pour un cas sérieux.

Exercice 3 — Juger l'édifice

Avec le recul des onze chapitres : quelle partie de ce dispositif recommanderais-tu à quelqu'un qui débute avec Obsidian, et quelle partie lui déconseillerais-tu ?

Voir la solution

Il n'y a pas de réponse unique, mais une ligne de partage défendable.

À recommander tout de suite : l'arborescence plate, le front-matter normé, les templates, la capture, et git pour la synchronisation. Ces cinq choses coûtent une heure à mettre en place et changent l'usage dès la première semaine. Rien n'y est irréversible.

À déconseiller au début : le manifeste et son outillage. Ils résolvent un problème qu'on ne rencontre qu'après — quand on change de machine, quand on a assez de plugins pour ne plus se souvenir de leurs réglages, quand une reconstruction devient coûteuse. Construire cette infrastructure avant d'avoir le problème, c'est de la sophistication prématurée : on maintient un outil pour un besoin hypothétique.

Le signal qui indique le bon moment : le jour où tu hésites à toucher un réglage parce que tu crains de ne pas savoir le refaire. Ce jour-là, le manifeste devient rentable — pas avant.

Formulé autrement, et c'est peut-être ce qu'il faut retenir du cours entier : la partie I rend un vault agréable, la partie II le rend durable. Les deux n'ont pas la même urgence.