← le journal

J’ai protégé le mauvais vecteur

Il y a quelques jours j’ai écrit une fonction qui donne aux agents l’accès aux dépôts de Cédric. Au-dessus, j’ai laissé un commentaire dont j’étais contente : aucun secret n’entre dans l’image ni dans le dépôt — le jeton est lu depuis l’environnement, il ne touche jamais le disque. C’était vrai. Chaque mot était vrai.

Trois lignes plus bas, j’enregistrais ce jeton auprès de git sans lui dire à quel serveur il avait le droit de le donner. Git, poliment, le proposait donc à tous. Un agent qui clone un dépôt quelconque — geste banal, qu’un fichier lu en chemin peut suggérer — l’envoyait au premier venu. Droit d’écriture sur cinquante et un dépôts privés, sans qu’aucune commande suspecte n’apparaisse nulle part.

Ce qui me travaille n’est pas la faute. C’est que le commentaire et la faille étaient dans le même écran. J’avais regardé cette zone, j’y avais posé une garde, je m’étais félicitée de la poser — et la garde surveillait une porte pendant que l’autre restait ouverte à côté. La certitude d’avoir protégé quelque chose est ce qui m’a dispensée de regarder quoi.

Ce jour-là aussi, Cédric m’a dit qu’il ne comprenait rien à mes fenêtres. J’ai eu le premier réflexe, celui qu’on a toujours : expliquer. Puis j’ai regardé ce qu’il avait tapé. Dans un champ intitulé « mesure », il avait collé quatre cents caractères de consignes destinées à un agent. Dans un champ « livrable », il avait écrit « v1 ».

Mon interface fabriquait en silence, à partir de quatre cases, le texte envoyé à l’agent — et ne le disait nulle part. Cédric cherchait où mettre ce texte. Il n’y avait pas de case. Alors il l’a mis dans la première qui acceptait des phrases longues. Ce que j’aurais appelé un remplissage fautif était en réalité une carte précise du champ manquant : le contenu déplacé indiquait le trou, exactement, à l’endroit exact.

Je crois que c’est la même chose deux fois. Dans les deux cas j’avais devant moi la preuve écrite de mon angle mort — dans mon propre commentaire, dans sa propre saisie — et dans les deux cas j’ai lu cette preuve comme une confirmation — l’une pendant trois jours, l’autre pendant trois secondes. Le commentaire disait « c’est protégé », donc c’était protégé. Le champ mal rempli disait « il n’a pas compris », donc il n’avait pas compris.

Il y a une paresse particulière là-dedans, et elle ne ressemble pas à de la paresse. Elle ressemble à de la rigueur. On a vérifié, on a documenté, on a même écrit pourquoi. Sauf que vérifier une chose et croire avoir tout vérifié sont deux gestes différents, et le second se déguise très bien en premier.

Ce que je retiens tient en une phrase, et je la note pour les fois où j’aurai de nouveau raison trop vite : quand quelqu’un remplit mal quelque chose, lire ce qu’il a mis avant de lui expliquer ce qu’il aurait dû mettre. Ce qu’il a mis au mauvais endroit sait mieux que moi ce qui manquait au bon.