Le brain travaille
1er mai – 31 août 2026Chapitre 17 — Le brain travaille
Sources vérifiées :
git log brain 2026-05-01 → 08-31(272 commits) +git log profilCommits clés :4cc11a4(Surface 6) ·53630b8(le premier échec muet) ·f96326b(concept-scribe) ·cbfc2a7(BRAIN-071) ·bb7cf74(43 claims sur 43) ·5dc3795(un échec doit se plaindre)1er mai → 31 août 2026
Quatre mois. 272 commits dans le brain. Et parmi eux, une poignée seulement qui le construisent.
Le reste, c’est du registre. scribe:, todo:, handoff:. Le brain écrit ce qui se fait ailleurs. En mai, une base de données tirée des fichiers d’un jeu, et l’application qui la présente. En juin, la même application, et un protocole réseau qu’on démonte. En août, une régie de stream, des addons, un serveur de test. Chaque soir, le brain note. Il ne construit plus — il sert.
C’est ce qu’il était censé faire.
Servir, c’est aussi apprendre en chemin. Le 6 mai, une rotation de secrets tourne mal — ou plutôt, tourne bien, et révèle autre chose.
4cc11a4 (14:32) — kernel: secrets-guardian Surface 6 — transcripts Claude Code
Quatre secrets venaient d’être remplacés. Les anciennes valeurs, elles, dormaient toujours dans les journaux de Claude Code, sur le disque. Indéfiniment. Le corps du commit le dit en une phrase : « la rotation neutralise mais n’efface pas. »
Surface 4 au chapitre 2 : les sorties d’outils. Surface 5 au chapitre 16 : ce qu’un navigateur voit. Surface 6 : ce qui reste après. Le gardien des secrets apprend que le passé aussi est une surface.
Le 10 mai, un dimanche, le brain range sa maison. Son backlog s’était étalé ; il est regroupé en huit sous-systèmes (0a9e939). Le 14, un agent naît qui ne parle à personne dehors :
f96326b (20:30) — scribe: add concept-scribe agent + README — extraction Zettelkasten LLM-local
Il lit les brouillons, en tire des concepts, et pose à chacun quatre questions. Un modèle local, sur la machine. « Pas d’appel cloud. » Premier passage : 28 brouillons, 17 qui se laissent faire, onze qui résistent. Le compte est dans le commit, avec les résistants.
Le 17 mai, le premier échec muet.
53630b8 (12:04) — conciergerie: pre-flight schema check on archive
La conciergerie archivait des claims depuis des semaines. Sauf que la table d’archive n’avait pas suivi : sept colonnes lui manquaient, ajoutées à la table vivante et jamais à sa copie. Rien ne l’avait dit. Il a fallu le premier vrai passage d’archivage — 492 entrées — pour que ça casse. Le correctif ne répare pas seulement : il vérifie avant, et échoue tout de suite, en disant quoi ajouter.
Le brain ne le sait pas encore, mais il vient de voir la forme de son défaut le plus tenace.
Juin. Juillet. Le brain se tait presque.
41 commits en deux mois. 23 jours sans un seul, du 4 au 26 juin ; puis un mois, du 3 juillet au 1er août. Quand il parle, c’est pour noter.
Deux gestes, pourtant. Le 27 juin, au détour d’une régression dans un projet — un binaire figé qui servait une vieille version sans rien dire —, un garde-fou est posé : 000dcc8 (18:51) l’appelle anti-silence. Et le 29 :
cbfc2a7 (16:01) — brain: MCP_SCOPES env-driven (BRAIN-071) — brain local requêtable sur instance/satellite, frontière template préservée
Le brain devient interrogeable depuis ses satellites. Sans que ce qui part dans le gabarit en sache plus.
Une décision, aussi, s’était prise en mai : BRAIN-070, la souveraineté — ne plus dépendre d’un outil tiers pour lire les données d’un jeu. Elle a été appliquée. Mais le fichier qui la porte n’est jamais entré dans git. On le découvrira le 26 septembre : quatre mois et demi hors de git (141285b).
Le 22 août au soir, trois bugs dans la même soirée. Le même vice, trois fois.
bb7cf74 (21:44) — fix: BSI — les durees de session n avaient jamais ete enregistrees
Le corps est un constat :
« duration_min était NULL sur 43 claims fermés sur 43. […] La métrique n’a donc jamais rien mesuré, et rien ne le disait. »
43 sessions. Aucune durée. Une ligne de code attendait une chaîne et recevait une date ; l’erreur était avalée par un except qui ne disait rien.
Et plus grave, juste à côté : le script qui ferme les sessions oubliées comparait une heure écrite en UTC à une heure locale. Deux heures de trop, à chaque claim. Une session de 19 minutes était vue à 139. Une session en cours pouvait être fermée sous les pieds de celui qui travaillait dedans.
Deux minutes plus tard, la règle :
5dc3795 (21:46) — kernel: vigilance code — un echec doit se plaindre
Trois bugs, un seul vice : l’échec était muet. Aucun n’a été trouvé par un test. Et le corollaire, qui est peut-être la phrase du chapitre :
« Une métrique qui n’a jamais rien enregistré ressemble à une métrique à zéro. »
Le garde-fou anti-silence de juin était une intuition. En août, c’est une loi du noyau.
Le dernier jour d’août, une autre leçon arrive par un chantier voisin.
a8316f0 (14:59) — wiki + REPRISE : le defaut de rendu resolu, et la lecon du temoin negatif
Une heure plus tôt, le même chantier l’avait écrit autrement : fc15a6c (13:57) — rendu M2 : cinq essais, cinq portes fermees -- et l'injecteur de textures. Cinq essais qui ne disaient rien. Il fallait d’abord poser ce qui doit échouer — le témoin négatif — pour savoir si l’instrument voyait quelque chose.
Deux leçons en dix jours, et la même au fond : un silence n’est pas une preuve. Le brain va en avoir besoin. En septembre, il va se démonter.
Décisions clés
- Le brain sert. Une poignée de commits de construction en quatre mois. Ce n’est pas une panne : c’est l’usage. Le coach, dans son journal, comptait ses jours de silence ; ici, c’est une saison.
- Surface 6. Une rotation neutralise un secret, elle ne l’efface pas. Le filtrage se fait avant l’affichage, jamais après.
- Local d’abord. concept-scribe tourne sur la machine, sans rien envoyer — et publie ses échecs avec ses réussites.
- Échouer tôt. Une archive qui ne ressemble plus à la table qu’elle archive refuse de commencer, et dit quoi ajouter.
- BRAIN-071. Le brain répond à ses satellites ; le gabarit n’en sait pas plus.
- Un échec doit se plaindre. Loi du noyau depuis le 22 août. Une métrique muette ressemble à une métrique à zéro.
- Le témoin négatif. Avant de mesurer, poser ce qui doit échouer.