<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kouamé Maïzan Alain Serge Kossonou</title>
    <description>The latest articles on DEV Community by Kouamé Maïzan Alain Serge Kossonou (@museigen).</description>
    <link>https://dev.to/museigen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3916247%2Fd4098dc1-fa8e-4ab8-9305-0159296850ed.jpeg</url>
      <title>DEV Community: Kouamé Maïzan Alain Serge Kossonou</title>
      <link>https://dev.to/museigen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/museigen"/>
    <language>en</language>
    <item>
      <title>Capturer la décision à l'instant du commit, ou la perdre à jamais</title>
      <dc:creator>Kouamé Maïzan Alain Serge Kossonou</dc:creator>
      <pubDate>Thu, 07 May 2026 08:45:00 +0000</pubDate>
      <link>https://dev.to/museigen/capturer-la-decision-a-linstant-du-commit-ou-la-perdre-a-jamais-16hm</link>
      <guid>https://dev.to/museigen/capturer-la-decision-a-linstant-du-commit-ou-la-perdre-a-jamais-16hm</guid>
      <description>&lt;p&gt;Combien de fois t'es-tu retrouvé face à du code que personne ne comprend plus ?&lt;/p&gt;

&lt;p&gt;Un choix d'architecture étrange. Un TTL de cache à 17 minutes que personne ne sait justifier. Un worker désactivé avec un &lt;code&gt;// ne pas toucher — ça casse tout&lt;/code&gt; qui ne dit pas &lt;em&gt;pourquoi&lt;/em&gt;. Tu cherches. Tu ne trouves rien. La personne qui savait est partie. Les commits disent &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;wip&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ou pire encore : tu trouves de la documentation. Mais elle se contredit. Une page dit que l'authentification passe par OAuth. Une autre, écrite six mois plus tard, parle de JWT. Aucune ne dit laquelle est obsolète. Aucune ne dit pourquoi le choix a changé.&lt;/p&gt;

&lt;p&gt;Tu ne sais plus à quelle doc faire confiance. L'absence de documentation devient parfois moins handicapante qu'une documentation qui ment sans le savoir.&lt;/p&gt;

&lt;p&gt;Ce n'est pas un problème de discipline. C'est un problème d'outil. Documenter coûte du temps, casse le flow, et finit toujours en bas de la pile des priorités.&lt;/p&gt;

&lt;p&gt;J'ai construit un outil pour résoudre ça. Il s'appelle Lore.&lt;/p&gt;

&lt;p&gt;Et le plus troublant, c'est qu'on n'est pas négligents. On fonctionne juste sur le postulat tranquille qu'on se souviendra. Le cerveau ment de cette façon. Au moment de la décision, le raisonnement est vif, porteur, évident. Un mois plus tard, c'est une esquisse. Six mois plus tard, c'est une rumeur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pourquoi les outils que j'avais déjà ne résolvaient rien
&lt;/h2&gt;

&lt;p&gt;Ce n'est pas faute d'avoir essayé.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Outil&lt;/th&gt;
&lt;th&gt;Ce que ça m'a donné&lt;/th&gt;
&lt;th&gt;Ce qui manquait&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conventional Commits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Le &lt;em&gt;quoi&lt;/em&gt; (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;refactor:&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Le &lt;em&gt;pourquoi&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ADR tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Les 5 décisions par trimestre assez "architecturales" pour mériter une cérémonie&lt;/td&gt;
&lt;td&gt;Les cent micro-décisions par semaine qui &lt;em&gt;deviennent&lt;/em&gt; l'architecture une fois cumulées&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wikis / Confluence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pages polies, découplées du code&lt;/td&gt;
&lt;td&gt;La vérité à jour — chaque équipe a son cimetière de wiki quelque part&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Commentaires de code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Le pourquoi inline&lt;/td&gt;
&lt;td&gt;La pression du reviewer : &lt;em&gt;"ce commentaire explique le quoi — supprime-le"&lt;/em&gt; est un cliché pour une raison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Swimm / GitBook / SaaS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Belles UI&lt;/td&gt;
&lt;td&gt;Le couplage à une infrastructure propriétaire que je ne possède pas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Le diagnostic auquel j'ai fini par arriver : &lt;strong&gt;c'est un problème de timing, pas un problème d'outil.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Toutes les solutions existantes me demandaient de documenter &lt;em&gt;après&lt;/em&gt; — dans un autre moment, avec un autre outil, moyennant une autre friction. Or le seul moment où je me souviens vraiment du pourquoi, c'est le moment où je décide. Rate ce moment, et aucun outil ne me le rendra.&lt;/p&gt;

&lt;h2&gt;
  
  
  L'hypothèse
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Capturer la décision à l'instant du commit, ou la perdre à jamais.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si la capture n'a pas lieu dans le même souffle que le travail, elle n'aura pas lieu. Et le seul battement régulier que Git te donne, c'est le commit.&lt;/p&gt;

&lt;p&gt;Alors j'ai commencé à construire.&lt;/p&gt;

&lt;h2&gt;
  
  
  À quoi ressemble "à l'instant du commit"
&lt;/h2&gt;

&lt;p&gt;Le design final est d'une simplicité presque gênante.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Un hook post-commit.&lt;/li&gt;
&lt;li&gt;Trois questions.&lt;/li&gt;
&lt;li&gt;Un fichier Markdown à côté de ton code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Voici à quoi ressemble un commit, maintenant :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add rate limiter to /api/login"&lt;/span&gt;
&lt;span class="go"&gt;  [1/3] Type [feature]:
  [2/3] What [add rate limiter to /api/login]:
  [3/3] Why? Token bucket — sliding window trop gourmand en mémoire à 5k req/s
  ✓ Capturé : feature-add-rate-limiter-to-api-login.md
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy1tlzjqjjt5t01qynwt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy1tlzjqjjt5t01qynwt.gif" alt="" width="760" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Les deux premières questions sont pré-remplies depuis le message de commit. Tu tapes juste Entrée. La troisième — le &lt;em&gt;Pourquoi&lt;/em&gt; — c'est celle que je dois vraiment taper. C'est celle qui compte.&lt;/p&gt;

&lt;p&gt;Le fichier produit est du Markdown simple avec front-matter, dans &lt;code&gt;.lore/docs/&lt;/code&gt; à la racine de ton repo :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;feature&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-02-14&lt;/span&gt;
&lt;span class="na"&gt;commit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;a3f9c2e&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# feat: add rate limiter to /api/login&lt;/span&gt;

&lt;span class="gu"&gt;## What&lt;/span&gt;
Add rate limiter to /api/login

&lt;span class="gu"&gt;## Why&lt;/span&gt;
Token bucket — sliding window trop gourmand en mémoire à 5k req/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voilà. Pas de plateforme. Pas de sync. Pas de compte. Du Markdown dans ton repo, commit à côté de ton code, cherchable avec &lt;code&gt;grep&lt;/code&gt; ou avec &lt;code&gt;lore show &amp;lt;mot-clé&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  À quoi ça ressemble dans un vrai repo
&lt;/h3&gt;

&lt;p&gt;Ne me crois pas sur parole. Voici une entrée réelle du &lt;code&gt;.lore/docs/&lt;/code&gt; de lore lui-même — capturée au commit, polie par Angela ensuite, commit dans le repo :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;feature&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-04-10"&lt;/span&gt;
&lt;span class="na"&gt;commit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;606cb47ae4807b725d7824dada67314311f20792&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;draft&lt;/span&gt;
&lt;span class="na"&gt;generated_by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pending&lt;/span&gt;
&lt;span class="na"&gt;angela_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;polish&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Enable Chocolatey Package Distribution and Embedded Logo&lt;/span&gt;

&lt;span class="gu"&gt;## Why&lt;/span&gt;

Lore currently requires manual installation via GitHub releases or
building from source. This creates friction for Windows developers
who expect &lt;span class="sb"&gt;`choco install lore`&lt;/span&gt; to work.

&lt;span class="gu"&gt;## What Changed&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Chocolatey package**&lt;/span&gt;: Windows package manager integration
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Embedded logo**&lt;/span&gt;: Binary includes logo assets for notifications

&lt;span class="gu"&gt;## How It Works&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;mermaid
&lt;/span&gt;&lt;span class="sb"&gt;graph TD
    A[Build Process] --&amp;gt; B[Embed Logo Assets]
    A --&amp;gt; C[Generate Chocolatey Package]
    B --&amp;gt; D[Binary with Icons]
    C --&amp;gt; E[choco install lore]&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le diagramme Mermaid là-dedans ? Suggéré par l'étape polish d'Angela. Le SHA &lt;code&gt;commit:&lt;/code&gt; dans le front matter ? Une ancre vivante — tu peux faire &lt;code&gt;git show&lt;/code&gt; dessus. Clone le repo si tu veux voir le reste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comment le hook décide quoi faire
&lt;/h2&gt;

&lt;p&gt;Avant qu'une seule question ne s'affiche, lore évalue une chaîne de règles contextuelles. Merge, rebase, cherry-pick, run CI — aucun de ces cas ne devrait t'embarquer dans un "Pourquoi ?". La décision tient en quelques millisecondes, et la première règle qui matche gagne :&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Diagramme source (rendu en direct sur GitHub, où Mermaid est natif) : &lt;a href="https://github.com/GreyCoderK/lore/blob/main/docs/guides/contextual-detection.md" rel="noopener noreferrer"&gt;contextual-detection.md&lt;/a&gt;. Clique pour lire les portes en détail — &lt;code&gt;doc-skip&lt;/code&gt;, gestion rebase/merge/cherry-pick, le scoring du Decision Engine, et la cascade de fallback VS Code IPC pour les contextes non-TTY.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;C'est cette porte qui garde lore ambiant. Le hook ne sort de l'ombre que quand une vraie décision se présente — fix-fix-fix, merges mécaniques et commits CI restent invisibles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce que j'ai trouvé après avoir dogfoodé sur mon propre projet
&lt;/h2&gt;

&lt;p&gt;Je fais tourner lore sur le codebase de lore lui-même. Pas six mois — les sept dernières semaines d'usage réel. Plusieurs choses m'ont surpris.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La plupart des commits ne méritent pas d'entrée lore, et c'est très bien.&lt;/strong&gt; Je pensais finir avec un mur de bruit. Au lieu de ça, le tag &lt;code&gt;[doc-skip]&lt;/code&gt; est devenu mon ami. Les commits de type fix-fix-fix passent au travers. Le ratio m'a surpris : sept semaines plus tard, mon repo a ~130 commits et deux entrées lore substantielles qui couvrent les décisions majeures — pas 130 entrées pour 130 commits. Le hook se déclenche souvent ; les docs ne tiennent que quand il y a vraiment un &lt;em&gt;pourquoi&lt;/em&gt; à capturer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La question "Pourquoi ?" est inconfortable de la meilleure des façons.&lt;/strong&gt; Taper une phrase sur ce qu'on vient de faire oblige à remarquer les moments où on n'a pas de raison — où on commit en pilotage automatique. Deux fois dans la première semaine, j'ai bloqué devant la question, réalisé que j'avais copié un pattern sans réfléchir. Les deux fois, j'ai rouvert le code et je l'ai changé.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La recherche dans l'historique des décisions a battu "demander à un collègue" pour la plupart des questions.&lt;/strong&gt; Je suis solo sur ce projet, donc la comparaison est biaisée — mais &lt;code&gt;lore show "rate limit"&lt;/code&gt; ou &lt;code&gt;lore show "config cascade"&lt;/code&gt; m'a donné la réponse en moins d'une seconde pour chaque question où la réponse existait. Plus rapide que redéduire depuis le code. Plus rapide que fouiller &lt;code&gt;git log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Le corpus a commencé à produire une valeur de second ordre que je n'avais pas prévue.&lt;/strong&gt; Les release notes s'assemblent toutes seules depuis le journal de décisions. L'onboarding devient "lis les 20 dernières entrées". Les audits trails viennent gratuitement. Aucun de ces bénéfices n'était l'objectif initial. Ils sont tombés en plus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce que j'ai raté (et ce que je continue de corriger)
&lt;/h2&gt;

&lt;p&gt;Tout n'a pas marché du premier coup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mon design initial rendait &lt;em&gt;toutes&lt;/em&gt; les questions obligatoires. Même les typo fixes demandaient "Pourquoi ?". C'était insupportable. Express mode et &lt;code&gt;[doc-skip]&lt;/code&gt; sont nés de cette douleur.&lt;/li&gt;
&lt;li&gt;J'avais initialement stocké les entrées en SQLite pour accélérer la recherche. Puis j'ai réalisé que les fichiers Markdown &lt;em&gt;étaient&lt;/em&gt; la base de données — SQLite est maintenant juste un index reconstruit depuis les fichiers. Le Markdown est la source de vérité.&lt;/li&gt;
&lt;li&gt;J'avais voulu que le hook fonctionne aussi sur les merges. Mauvaise idée. Les merges ne sont presque jamais des décisions ; ils sont mécaniques. La détection contextuelle skippe maintenant les merges, rebases et cherry-picks sauf demande explicite.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Angela, brièvement
&lt;/h2&gt;

&lt;p&gt;Puisqu'elle va venir dans la discussion : Angela est une reviewer IA opt-in pour ton corpus de décisions. Elle fait de l'analyse &lt;em&gt;structurelle&lt;/em&gt; entièrement offline (pas de clé API nécessaire) — cohérence, contradictions, lacunes. L'étape &lt;em&gt;polish&lt;/em&gt; optionnelle utilise un fournisseur IA de ton choix (Anthropic, OpenAI, ou un Ollama local) et te montre toujours un diff avant de toucher quoi que ce soit. Zéro télémétrie. Aucun appel en arrière-plan.&lt;/p&gt;

&lt;p&gt;Et elle ne travaille pas seule. Elle s'appuie sur un système de personas experts — Affoué (la conteuse, qui veille à ce que le pourquoi soit toujours plus clair que le quoi), Ouattara (le designer d'API, pour les contrats Postman et les spécifications techniques), et d'autres en chemin. Pas une IA générique — une équipe qui connaît votre projet.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Le deep-dive sur Angela — polish, review, multi-provider, le système de personas — c'est le prochain post de cette série. Follow si tu veux la notification.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Un mot sur d'où vient ce projet
&lt;/h2&gt;

&lt;p&gt;Je suis dev fullstack, solo, depuis la Côte d'Ivoire. Certains me connaissent sous Museigen (無制限, "sans limites" en japonais) — pas par arrogance, mais parce que je refuse l'idée que ce qu'on peut construire soit limité par l'endroit où on est né.&lt;/p&gt;

&lt;p&gt;Lore est, entre autres choses, ma tentative de construire quelque chose fait pour durer — open source, bilingue EN/FR, utilisable à vie, zéro plateforme. Un outil qu'on peut utiliser sans rien devoir à personne.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essaie-le
&lt;/h2&gt;

&lt;p&gt;Choisis le chemin d'installation qui colle à ta plateforme :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Homebrew (macOS / Linux)&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;GreyCoderK/tap/lore

&lt;span class="c"&gt;# Go (toutes plateformes)&lt;/span&gt;
go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/greycoderk/lore@latest

&lt;span class="c"&gt;# Script (macOS / Linux)&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSfL&lt;/span&gt; https://raw.githubusercontent.com/GreyCoderK/lore/main/install.sh | sh

&lt;span class="c"&gt;# Windows : télécharge depuis https://github.com/GreyCoderK/lore/releases&lt;/span&gt;
&lt;span class="c"&gt;# (Le package Chocolatey `lore-cli` arrive dès la fin de modération)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puis :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;ton-projet
lore init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fais un commit. Réponds à la question. Ouvre &lt;code&gt;.lore/docs/&lt;/code&gt; une semaine plus tard et relis-toi.&lt;/p&gt;

&lt;p&gt;📚 Docs : &lt;a href="https://greycoderk.github.io/lore" rel="noopener noreferrer"&gt;greycoderk.github.io/lore&lt;/a&gt; — guides, configuration, philosophie, comparaison vs ADR/Conventional Commits/wikis&lt;br&gt;&lt;br&gt;
📦 Repo : &lt;a href="https://github.com/GreyCoderK/lore" rel="noopener noreferrer"&gt;github.com/GreyCoderK/lore&lt;/a&gt; — issues, discussions, AGPL-3.0&lt;br&gt;&lt;br&gt;
Fait en Go, dogfoodé sur lui-même.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce que je veux vraiment de toi
&lt;/h2&gt;

&lt;p&gt;Si tu as vécu ta propre version de tout ça — un commit dont tu n'expliquais plus le choix, un TTL absurde, une doc qui contredisait une autre, une lib que tu ne te rappelles plus pourquoi tu l'as prise — &lt;strong&gt;raconte-le en commentaire.&lt;/strong&gt; Je collectionne ces histoires. C'est le feedback le plus utile que je reçois, parce qu'il me montre les types de décisions que lore ne capture pas encore bien.&lt;/p&gt;

&lt;p&gt;La personne qui savait est partie. Ou elle est assise à ton clavier un an plus tard. Dans les deux cas : corrigeons ça.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>git</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Capture the decision at commit-time, or lose it forever</title>
      <dc:creator>Kouamé Maïzan Alain Serge Kossonou</dc:creator>
      <pubDate>Thu, 07 May 2026 08:30:00 +0000</pubDate>
      <link>https://dev.to/museigen/capture-the-decision-at-commit-time-or-lose-it-forever-abe</link>
      <guid>https://dev.to/museigen/capture-the-decision-at-commit-time-or-lose-it-forever-abe</guid>
      <description>&lt;p&gt;How many times have you faced code nobody can explain anymore?&lt;/p&gt;

&lt;p&gt;A strange architectural choice. A cache TTL of 17 minutes that nobody can justify. A worker disabled with a &lt;code&gt;// don't touch — breaks everything&lt;/code&gt; comment that doesn't say &lt;em&gt;why&lt;/em&gt;. You go looking. You find nothing. The person who knew has left. The commits say &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;wip&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Or worse: you find documentation. But it contradicts itself. One page says authentication goes through OAuth. Another, written six months later, talks about JWT. Neither says which is obsolete. Neither says why the choice changed.&lt;/p&gt;

&lt;p&gt;You stop trusting the docs. The absence of documentation is sometimes less crippling than documentation that lies without knowing it.&lt;/p&gt;

&lt;p&gt;This isn't a discipline problem. It's a tool problem. Documenting takes time, breaks flow, and always ends up at the bottom of the priority pile.&lt;/p&gt;

&lt;p&gt;I built a tool to fix that. It's called Lore.&lt;/p&gt;

&lt;p&gt;And here's the part nobody admits: we're not careless. We just operate under the quiet assumption that we'll remember. The brain is a liar that way. At the moment of decision, the reasoning is vivid, load-bearing, obvious. A month later it's a sketch. Six months later it's a rumour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the tools I already had weren't solving this
&lt;/h2&gt;

&lt;p&gt;I'd tried. I wasn't starting from zero.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it gave me&lt;/th&gt;
&lt;th&gt;What it missed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conventional Commits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The &lt;em&gt;what&lt;/em&gt; (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;refactor:&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The &lt;em&gt;why&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ADR tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The 5 decisions per quarter big enough to feel architectural&lt;/td&gt;
&lt;td&gt;The hundred micro-decisions per week that &lt;em&gt;become&lt;/em&gt; architectural once enough stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wikis / Confluence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Polished pages, decoupled from code&lt;/td&gt;
&lt;td&gt;Up-to-date truth — every team I've been on has a wiki graveyard somewhere&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code comments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inline rationale&lt;/td&gt;
&lt;td&gt;Reviewer pressure: &lt;em&gt;"this comment explains what — delete it"&lt;/em&gt; is a cliché for a reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Swimm / GitBook / SaaS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lovely UI&lt;/td&gt;
&lt;td&gt;Coupling docs to proprietary infrastructure I don't own&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The diagnosis I eventually arrived at: &lt;strong&gt;this is a timing problem, not a tooling problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every existing solution asked me to document &lt;em&gt;after&lt;/em&gt; — in a separate moment, through a separate tool, with separate friction. But the only moment I actually remember why is the moment I decide. Miss that moment, and no tool can bring it back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hypothesis
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Capture the decision at commit-time, or lose it forever.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the capture doesn't happen in the same breath as the work, it doesn't happen. And the only reliable heartbeat Git gives you is the commit.&lt;/p&gt;

&lt;p&gt;So I started building.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "at commit-time" looks like in practice
&lt;/h2&gt;

&lt;p&gt;The design ended up being almost embarrassingly simple.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A post-commit hook.&lt;/li&gt;
&lt;li&gt;Three questions.&lt;/li&gt;
&lt;li&gt;A Markdown file next to your code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's what a commit looks like now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"feat: add rate limiter to /api/login"&lt;/span&gt;
&lt;span class="go"&gt;  [1/3] Type [feature]:
  [2/3] What [add rate limiter to /api/login]:
  [3/3] Why? Token bucket — sliding window was too memory-hungry at 5k req/s
  ✓ Captured: feature-add-rate-limiter-to-api-login.md
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy1tlzjqjjt5t01qynwt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy1tlzjqjjt5t01qynwt.gif" alt="" width="760" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first two prompts are pre-filled from the commit message. You just press Enter. The third one — the &lt;em&gt;Why&lt;/em&gt; — is the one I actually have to type. That's the one that matters.&lt;/p&gt;

&lt;p&gt;The file produced is plain Markdown with front-matter, sitting in &lt;code&gt;.lore/docs/&lt;/code&gt; inside your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;feature&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-02-14&lt;/span&gt;
&lt;span class="na"&gt;commit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;a3f9c2e&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# feat: add rate limiter to /api/login&lt;/span&gt;

&lt;span class="gu"&gt;## What&lt;/span&gt;
Add rate limiter to /api/login

&lt;span class="gu"&gt;## Why&lt;/span&gt;
Token bucket — sliding window was too memory-hungry at 5k req/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No platform. No sync. No account. Markdown in your repo, committed alongside your code, searchable with &lt;code&gt;grep&lt;/code&gt; or with &lt;code&gt;lore show &amp;lt;keyword&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this looks like in a real repo
&lt;/h3&gt;

&lt;p&gt;Don't take my word for it. Here's an actual entry from lore's own &lt;code&gt;.lore/docs/&lt;/code&gt; directory — captured at commit time, polished by Angela later, committed to the repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;feature&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-04-10"&lt;/span&gt;
&lt;span class="na"&gt;commit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;606cb47ae4807b725d7824dada67314311f20792&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;draft&lt;/span&gt;
&lt;span class="na"&gt;generated_by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pending&lt;/span&gt;
&lt;span class="na"&gt;angela_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;polish&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Enable Chocolatey Package Distribution and Embedded Logo&lt;/span&gt;

&lt;span class="gu"&gt;## Why&lt;/span&gt;

Lore currently requires manual installation via GitHub releases or
building from source. This creates friction for Windows developers
who expect &lt;span class="sb"&gt;`choco install lore`&lt;/span&gt; to work.

&lt;span class="gu"&gt;## What Changed&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Chocolatey package**&lt;/span&gt;: Windows package manager integration
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Embedded logo**&lt;/span&gt;: Binary includes logo assets for notifications

&lt;span class="gu"&gt;## How It Works&lt;/span&gt;

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;mermaid
&lt;/span&gt;&lt;span class="sb"&gt;graph TD
    A[Build Process] --&amp;gt; B[Embed Logo Assets]
    A --&amp;gt; C[Generate Chocolatey Package]
    B --&amp;gt; D[Binary with Icons]
    C --&amp;gt; E[choco install lore]&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Mermaid diagram in there? Suggested by Angela's polish step. The &lt;code&gt;commit:&lt;/code&gt; SHA in the front matter? A live anchor — you can &lt;code&gt;git show&lt;/code&gt; it. Clone the repo if you want to see the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the hook decides what to do
&lt;/h2&gt;

&lt;p&gt;Before any prompt fires, lore evaluates a chain of contextual rules. Merge commits, rebases, cherry-picks, CI runs — none of them should drag you into a "Why?" question. The decision happens in milliseconds, and the first matching rule wins:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source diagram (rendered live on GitHub): &lt;a href="https://github.com/GreyCoderK/lore/blob/main/docs/guides/contextual-detection.md" rel="noopener noreferrer"&gt;contextual-detection.md&lt;/a&gt;. Click through if you want to read the gates in detail.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's the gate that keeps lore ambient. The hook only surfaces when a real decision shows up — typo fixes, mechanical merges, and CI commits stay invisible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I found after dogfooding this on my own project
&lt;/h2&gt;

&lt;p&gt;I've been running lore on lore's own codebase. Not six months — the last seven weeks of real use. A few things surprised me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most commits don't deserve a lore entry, and that's fine.&lt;/strong&gt; I thought I'd end up with a wall of noise. Instead, the &lt;code&gt;[doc-skip]&lt;/code&gt; tag became my friend. Fix-fix-fix commits get skipped. The ratio surprised me: seven weeks in, my own repo has ~130 commits and two substantive lore docs covering the major decisions — not 130 entries for 130 commits. The hook fires often; the docs only stick when there's actually a &lt;em&gt;why&lt;/em&gt; to capture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Why" question is uncomfortable in the best way.&lt;/strong&gt; Typing a sentence about why you just did something forces you to notice when you don't have a reason — when you're committing on autopilot. Twice in the first week, I hit the prompt, froze, and realized I'd copy-pasted a pattern from somewhere without thinking. Both times I went back and changed the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Searchable decision history beat "asking a colleague" for most of my queries.&lt;/strong&gt; I solo this project, so the comparison isn't fair — but &lt;code&gt;lore show "rate limit"&lt;/code&gt; or &lt;code&gt;lore show "config cascade"&lt;/code&gt; got me the answer in under a second for every question where the answer existed. Faster than re-deriving it from code. Faster than git log spelunking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The corpus started generating second-order value I didn't plan for.&lt;/strong&gt; Release notes assemble themselves from the decision log. Onboarding becomes "read the last 20 entries". Audit trails come free. None of these were the goal. They just fell out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got wrong (and am still fixing)
&lt;/h2&gt;

&lt;p&gt;Not everything worked first try.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My initial design made &lt;em&gt;all&lt;/em&gt; prompts mandatory. Even typo fixes asked "Why?". It was insufferable. Express mode + &lt;code&gt;[doc-skip]&lt;/code&gt; came from that pain.&lt;/li&gt;
&lt;li&gt;I initially stored entries in SQLite to make search fast. Then I realized the Markdown files &lt;em&gt;were&lt;/em&gt; the database — SQLite is now just an index that gets rebuilt from the files. The Markdown is the source of truth.&lt;/li&gt;
&lt;li&gt;I tried to make the hook work on merge commits by default. Bad idea. Merges are almost never decisions; they're mechanical. Contextual detection now skips merges, rebases, and cherry-picks unless you ask.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Angela, briefly
&lt;/h2&gt;

&lt;p&gt;Since she'll come up: Angela is an opt-in AI reviewer for your decision corpus. She runs &lt;em&gt;structural&lt;/em&gt; analysis entirely offline (no API key needed) — checking coherence, spotting contradictions, flagging gaps. The optional &lt;em&gt;polish&lt;/em&gt; step uses an AI provider of your choice (Anthropic, OpenAI, or a local Ollama) and always shows you a diff before touching anything. Zero telemetry. No background calls.&lt;/p&gt;

&lt;p&gt;She doesn't work alone. She leans on a system of expert personas — Affoué (the storyteller, who keeps the &lt;em&gt;why&lt;/em&gt; clearer than the &lt;em&gt;what&lt;/em&gt;), Ouattara (the API designer, for Postman contracts and technical specs), and others on the way. Not a generic AI — a team that knows your project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The deep-dive on Angela — polish, review, multi-provider, the persona system — is the next post in this series. Follow if you want the notification.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Pick the install path that fits your platform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Homebrew (macOS / Linux)&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;GreyCoderK/tap/lore

&lt;span class="c"&gt;# Go (any platform)&lt;/span&gt;
go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/greycoderk/lore@latest

&lt;span class="c"&gt;# Script (macOS / Linux)&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSfL&lt;/span&gt; https://raw.githubusercontent.com/GreyCoderK/lore/main/install.sh | sh

&lt;span class="c"&gt;# Windows: download from https://github.com/GreyCoderK/lore/releases&lt;/span&gt;
&lt;span class="c"&gt;# (Chocolatey package `lore-cli` arriving once moderation completes)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
lore init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make a commit. Answer the question. Open &lt;code&gt;.lore/docs/&lt;/code&gt; a week later and read yourself back.&lt;/p&gt;

&lt;p&gt;📚 Docs: &lt;a href="https://greycoderk.github.io/lore" rel="noopener noreferrer"&gt;greycoderk.github.io/lore&lt;/a&gt; — guides, configuration, philosophy, comparison vs ADR/Conventional Commits/wikis&lt;br&gt;&lt;br&gt;
📦 Repo: &lt;a href="https://github.com/GreyCoderK/lore" rel="noopener noreferrer"&gt;github.com/GreyCoderK/lore&lt;/a&gt; — issues, discussions, AGPL-3.0&lt;br&gt;&lt;br&gt;
Built with Go, dogfooded on itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing I actually want from you
&lt;/h2&gt;

&lt;p&gt;If you've faced your own version of this — a commit you couldn't explain, a cache TTL that made no sense, a doc that contradicted another, a library you couldn't remember why you chose — &lt;strong&gt;drop it in the comments.&lt;/strong&gt; I collect these stories. They're the most useful feedback I get, because they teach me what kinds of decisions lore still doesn't capture well.&lt;/p&gt;

&lt;p&gt;The person who knew has left. Or is sitting at your keyboard a year later. Either way: let's fix that.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>opensource</category>
      <category>git</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
