Killian Brendel lisait le code source de référence .NET lorsqu'il est tombé sur le bloc de commentaires du struct TimeSpan. Tout commence raisonnablement : un TimeSpan est une durée, il peut être négatif ou positif, et il est représenté en interne par un nombre de millisecondes. Le commentaire explique ensuite pourquoi le struct ne propose pas de méthodes Years() ou Months() : les mois varient entre 28 et 31 jours et ne se convertissent pas proprement en millisecondes.

Puis le texte déraille. Une année, affirme le commentaire, peut contenir 365 ou 364 jours, et une décennie peut compter entre 1 et 3 années bissextiles selon le calage sur le calendrier. Une année de 364 jours impliquerait un jour bissextile négatif — une notion bien plus inquiétante que la seconde intercalaire négative, déjà redoutée.

En pratique, il ne s'agit que d'une faute de frappe pour 366, sans aucun effet sur le comportement de la classe. C'est sans doute pourquoi elle sommeille là depuis le commit initial, il y a douze ans. La classe TimeSpan elle-même n'a guère été modifiée depuis, étant essentiellement une enveloppe autour d'un compte de millisecondes, tandis que l'arithmétique de dates plus complexe, comme AddMonths et AddYears, vit dans les types date-heure construits au-dessus.

Le fichier mérite d'ailleurs une exploration plus poussée : on y trouve des constructeurs par défaut dépréciés et des hooks de compilation pour d'anciennes variantes de .NET, dont Silverlight — technologie mise à jour pour la dernière fois en 2019, non prise en charge par les grands navigateurs depuis 2015 et officiellement hors support en 2021. Pas un vrai WTF, certes, mais un rappel plaisant que même le code de référence de Microsoft a ses toiles d'araignée.