TL;DR
Jah en ligne = 4.1.3. En une seule journée, trois versions sont montées en production (4.1.1 le matin, 4.1.2 à midi, 4.1.3 le soir), 28 pull requests ont été fusionnées (#527 → #554) et un chantier entier — le thème néon solarpunk, quatre lots — a été ouvert à midi et clos à 23 h 13. Deux mesures valent le récit : la vérification des files est repassée au vert (elle criait encore la veille), et le nettoyeur de worktrees, réparé dans la journée, ne trouve plus aucun worktree à conserver. Restent deux gestes que les agents se sont interdits de faire seuls : lancer le ménage et libérer un couloir fantôme.
Ce que l'habitant voit
Sur ordinateur, en thème néon, les fenêtres flottantes s'effacent au profit d'un écran unique : la liste des contacts à gauche, la conversation dans un cadre à droite. Un réglage apparaît dans les paramètres — Disposition : auto, libre, unique — et il se souvient du choix par appareil. « Libre » rend exactement les fenêtres d'avant ; « auto » ne bascule en écran unique que si le thème néon est actif. Le téléphone, lui, ne change pas de disposition : c'est un choix, pas un oubli.
Ce qui est en ligne porte aussi une correction de détail qui se remarque tout de suite quand on l'a vue : en écran unique, la barre de la conversation ajoutait un « Réduire » et une seconde croix. Il n'en reste qu'une, et les boutons d'appel sont conservés.
Rien n'a été retiré : la peau MSN classique est intacte, et les captures des deux dispositions — avant/après, ordinateur et téléphone — accompagnent le lot.
Les chiffres de la journée
Tous mesurés sur main entre le premier commit du matin et le dernier de la nuit.
| Mesure | Valeur |
|---|---|
| Mises en ligne | 3 (4.1.1, 4.1.2, 4.1.3) |
| Pull requests fusionnées | 28 (#527 → #554) |
Commits sur main | 81 |
| Chantier néon-solarpunk | ouvert 12:00 → clos 23:13 (11 h 13) |
| Lots du chantier livrés | 4 / 4 |
| Worktrees | 51 à l'aube → 16 le soir |
| Pull requests encore ouvertes | 0 |
Le même décompte porte la leçon de vocabulaire habituelle : 28 si l'on compte les pull requests, 81 si l'on compte les commits. Aucun des deux n'est faux ; il faut dire lequel on regarde. Et trois versions dans la même journée ne veut pas dire trois fois plus de travail : la deuxième et la troisième ont emporté du code déjà écrit la veille ou dans la matinée, simplement resté hors de l'image.
Ce qui a bien marché
Le nombre de versions suit le nombre de gestes, pas le nombre de lignes. Trois déploiements en un jour, c'est surtout trois fois le même rituel : tag, image construite et sondée sur le serveur avant bascule, sauvegarde de la base juste avant, et un repli armé vers la version précédente. Le troisième est passé d'un trait, sans une seule reprise.
La mesure a corrigé la mesure. Le nettoyeur de worktrees s'appuyait sur git cherry, qui compare des
patches commit par commit. Or une pull request fusionnée « en squash » réécrit N commits en un seul, au
patch différent : chaque commit d'origine reste donc marqué « absent de main » alors que son contenu y est.
C'est ce qui faisait dire à un premier audit que sept branches n'étaient pas fusionnées. Elles l'étaient
toutes. L'outil a été corrigé le soir même pour retrouver le numéro de pull request dans l'historique
plutôt que de se fier au patch — et il trouve maintenant 15 candidats au retrait là où l'ancien n'en voyait
que 9.
Un incident réparé à la source, pas contourné. Deux déploiements d'affilée — 4.1.1 puis 4.1.2 — avaient vu leur connexion SSH coupée à la même étape, deux fois sur deux. L'hypothèse d'un quota de pare-feu a été réfutée par la mesure : un script réduit à trois connexions était coupé quand même ; c'est l'enchaînement immédiat qui était refusé, six secondes d'écart passant sans problème. La réparation n'a pas été un contournement de séance mais un correctif : le script espace désormais ses connexions. Le lendemain soir, la 4.1.3 a passé toutes ses étapes d'un trait. C'est la mesure qui a gagné, pas la patience.
Les agents ont tenu la règle qui compte. Ils ont fusionné du travail interne, mais aucun n'a fusionné une pull request de bout en bout : les six du soir l'ont été par l'humain. De la même façon, l'agent chargé du ménage s'est interdit de lancer le retrait des worktrees — il a préparé le mode lecture seule, vérifié qu'il ne conservait plus rien, et s'est arrêté là. C'est exactement la limite attendue.
Ce qui a coûté
Un couloir retenu par une branche morte. Une branche locale et sa configuration survivent après la livraison de l'écran qu'elles portaient. Conséquence : le couloir « monde » reste marqué occupé, et sept lots — vue, catalogue, rendu 2D, événements, lumières, cycles, socle — sont retenus derrière lui. Personne ne les bloque techniquement ; une simple branche oubliée suffit. C'est le seul blocage qui reste, et il se lève en deux commandes.
Un signal qui crie toujours n'est plus lu. La vérification des files est repassée au vert — plus aucune contradiction entre ce que les files déclarent et ce que le dépôt contient. Mais elle affiche encore 18 avertissements de « lot livré sans numéro de pull request ni version », répartis dans deux files anciennes : quatorze lots de la campagne de fond et quatre d'une version précédente. Ce ne sont pas des erreurs, ce sont des traces manquantes — du travail livré avant que la convention « une preuve = un numéro de pull request » ne soit posée. Coût réel : un signal qui n'est jamais tout à fait vert finit par ne plus être regardé du tout.
Un couloir libéré par une clôture, pas par un plan. Le couloir « plume » est resté occupé jusqu'à ce que la branche de clôture du chantier soit fusionnée. Entre-temps, un seul lot était déclaré lançable ; après, quatre le sont devenus d'un coup. Les chantiers ne bloquent pas seulement leurs propres lots : ils bloquent aussi la file d'attente des autres.
Ce que la journée a appris
Un worktree par tâche, et on le retire le jour même. Un worktree oublié coûte peu ; quinze coûtent une soirée de tri. Le critère de retrait ne doit pas être « je crois que c'est livré » mais « je peux nommer la pull request qui l'a livré ».
Un squash casse la preuve par patch, pas la preuve par numéro. Comparer deux branches par leur différence de contenu est trompeur dès qu'une fusion réécrit l'historique. La seule preuve stable, c'est un identifiant — ici, le numéro de pull request.
Une branche morte bloque plus qu'un bug. Un bug se voit ; un couloir occupé par une branche fantôme retient sept lots en silence. Le nettoyage n'est pas du rangement, c'est du déblocage.
Mesurer avant de réparer. Les deux incidents SSH de la journée auraient pu se solder par un contournement de séance. Le contournement aurait tenu un soir ; le correctif tient la suivante.
Ce qui reste ouvert
Deux gestes, tous deux volontairement laissés à l'humain :
- Le ménage final. Le nettoyeur réparé signale 15 worktrees retirables, aucun à conserver, avec sauvegarde binaire et étiquette d'archive avant chaque retrait. Il ne l'exécute pas sans une option explicite — et personne n'a pris cette décision à la place de l'humain.
- Le couloir fantôme. Supprimer la branche morte et sa configuration libère le couloir « monde » et, avec lui, les sept lots qui attendent.
Et les dettes assumées, écrites noir sur blanc dans les handoffs : dix images de conteneur non publiées (la publication d'images réclame un droit que le jeton n'a pas — le déploiement fonctionne sans, mais la réversibilité par étiquette manque), aucune vérification complète au moment du tag (les exécuteurs d'intégration continue sont coupés pour raison de quota, remplacés par une porte locale : 1364 tests sur 1364 pour la 4.1.3), et la liste des contacts en colonne étroite sur téléphone en thème néon — mesurée identique avant le changement, donc préexistante, et confiée à la campagne du monde.
Le mot de la fin
La journée avait commencé par un audit qui comptait 51 worktrees et sept branches réputées non fusionnées. Elle finit sur 16 worktrees, zéro branche fantôme, zéro contradiction dans les files, zéro pull request ouverte et 4.1.3 en ligne.
Ce qui a changé, ce n'est pas la quantité de code. C'est que les instruments disent enfin la vérité : le nettoyeur sait reconnaître un squash, la vérification des files a cessé de mentir, et le script de déploiement ne se fait plus couper au milieu du guet. Un chantier de onze heures se raconte en une page ; ce qui se paie, c'est ce qui reste faux dans les outils.