← Tous les articles

6 septembre 2026

Vingt-six cours, et une liste qui ne disait rien

Pour afficher l'enseignement de chaque ride, il a d'abord fallu ranger : le nom des cinq enseignements existait en six exemplaires dans le code. Le rangement a fait tomber neuf défauts que personne ne voyait.

Un instructeur donne du Spinning® le lundi, du Schwinn® le mercredi, du Globe Cycling® le samedi. Le samedi matin, il ouvre RideComposer, clique sur My Rides, et lit vingt-six lignes qui disent toutes la même chose : un nom, un nombre de morceaux, une durée.

Alors il s'adapte. Il appelle ses cours HILL_Disney, FARTLEK 1 - 06 06 26, eXTENSIVE iNTERVAL _6x4. Il écrit le classement dans le titre, faute d'endroit où le mettre.

Ce contournement est le vrai sujet de cet article. Parce que l'information manquante, elle, existait déjà.

Une donnée présente, et jamais montrée

Depuis début septembre, chaque ride enregistre l'enseignement et le type de cours avec lequel il a été composé. Cette donnée était bien là, dans chaque fichier de ride. Elle ne servait qu'à une seule chose : empêcher un utilisateur du plan Solo d'ouvrir un cours composé dans un autre enseignement.

Le logiciel savait donc, ligne par ligne, que ce ride-là était un Globe Cycling® Fartlek. Il ne le disait à personne.

Ranger avant d'ajouter

Afficher cette information demandait une pastille par ligne : le nom de l'enseignement et sa couleur. Un travail d'une heure — sauf que ces noms et ces couleurs existaient déjà en six exemplaires dans le code, écrits à la main à six endroits différents.

Six copies d'une même vérité, ça ne reste pas identique très longtemps. Elles avaient dérivé :

  • BICA portait le vert-jaune de sa marque sur son bouton… et le bleu de Globe Cycling® dans deux autres écrans. Deux enseignements différents, la même couleur, sans que rien ne le signale.
  • Free Ride n'existait pas dans l'une de ces copies. Conséquence directe : un instructeur en Free Ride ouvrait le Quick Ride et lisait « 🔵 Spinning® » au-dessus de ses propres cartes Free Ride.
  • Les zones cardiaques — qui ne sont l'enseignement de personne — étaient étiquetées « Schwinn® » dans la fenêtre d'assignation des symboles, simplement parce qu'elles tombaient dans le « sinon » d'une liste de conditions.

La tentation, dans ces cas-là, est d'ajouter une septième copie et de passer à autre chose. Nous avons fait l'inverse : une seule déclaration des cinq enseignements, que tous les écrans lisent. Un test refuse désormais qu'une septième réapparaisse.

Ce que le rangement a fait tomber

C'est la partie intéressante. En remettant de l'ordre, on trouve ce que personne ne cherchait.

La loupe qui mentait. Dans le Ride Builder, chaque zone a une petite loupe : elle ouvre la bibliothèque en ne montrant que ce qui convient à cette zone. Elle annonçait « intensité 1 à 20 » — et filtrait de 1 à 7. La raison : un filtre d'intensité posé lors d'une recherche précédente restait en place, et la loupe arrivait dessus. La zone annonçait une chose, l'écran en appliquait une autre, et rien ne le disait. Les deux critères ne font plus qu'un : la zone décide, seule.

Le fichier relocalisé qui ne l'était pas. Quand un morceau a été renommé ou déplacé, RideComposer propose de le retrouver avec un bouton « Browse ». On désignait le fichier, la fenêtre disait OK, le morceau se jouait. Mais au rechargement suivant, la fenêtre revenait. La cause remonte à une bibliothèque technique : Electron a supprimé, dans une version récente, la propriété qui donnait le chemin d'un fichier choisi. Elle ne renvoie plus rien — et surtout, elle ne lève aucune erreur. Le morceau entrait bien en mémoire pour la séance en cours, mais aucun chemin n'était enregistré. Le bouton passe désormais par la boîte de dialogue native, qui rend un vrai chemin, et le morceau prend le nom du fichier que vous avez désigné.

La flèche que personne n'avait jamais vue. Votre bibliothèque ne s'affiche pas d'un coup : elle charge par pages, et une ligne en bas annonce « ⏬ 17 909 morceaux supplémentaires ». Cette ligne existait depuis longtemps. Elle était écrasée dans une colonne de vingt-huit pixels de large, donc invisible. Et chaque page chargée reconstruisait la liste depuis le début : descendre 18 000 morceaux en faisait afficher 1,3 million. Aujourd'hui chaque morceau n'est dessiné qu'une fois, et la flèche se voit.

Le numéro de version qui se trompait. La barre latérale affichait « V 1.3.0 » — écrit à la main dans le code — alors que le logiciel installé était en 1.3.1. Ce même numéro estampille les rides que vous exportez : vos exports portaient donc une version périmée. Il est maintenant demandé à l'application elle-même.

Aucun de ces défauts ne provoque de plantage. C'est précisément ce qui les rend durables : rien ne casse, le logiciel devient simplement un peu faux, et personne n'a de raison de le signaler.

Ce que vous verrez

Dans My Rides, chaque cours porte désormais son étiquette : l'enseignement à ses couleurs, et le type de cours. Les rides plus anciens affichent « non classé » — ils se classent en les ouvrant et en choisissant leur type.

Et surtout, deux rangées de filtres. La première, l'enseignement, avec le nombre de cours de chacun. La seconde, la zone d'énergie — et c'est là que le détail compte : chaque enseignement a son propre vocabulaire. Spinning® parle de Recovery, Endurance, Resistance / Strength, Interval, Race Day. Globe Cycling® et BICA parlent de relief : Recovery, Foothills, Highland, Summit, Redline, Interval, Fartlek. Schwinn® parle physiologie : Low aerobic, Aerobic, High aerobic, Anaerobic. Proposer « Z3 » à quelqu'un qui filtre du Schwinn n'aurait aucun sens. Les zones affichées sont donc celles de l'enseignement choisi, et seulement celles où vous avez effectivement des cours.

Une erreur que nous avons failli publier

Pour nommer ces zones, nous avions d'abord écrit une règle : si une seule séance occupe une zone, elle lui donne son nom. Élégant, court, et faux. La règle affichait « Free » là où un instructeur Globe Cycling lit « Fartlek ».

Nous l'avons remplacée par une table écrite noir sur blanc, un nom par zone et par enseignement, recopiée des sélecteurs de l'application — qui viennent eux-mêmes des manuels. Sur de la théorie, une règle qui devine est une erreur qui attend : elle fonctionne sur les cas connus et se trompe en silence sur le suivant.

Deux contrôles automatiques la protègent : toute zone utilisée par un cours doit avoir un nom déclaré, et tout nom déclaré doit correspondre à une zone encore utilisée.

En chiffres

Le fichier principal de l'application a perdu 634 lignes dans l'opération, et notre filet de tests est passé de 492 à 624 contrôles automatiques. Ce sont eux qui garantissent que ces neuf défauts ne reviendront pas — et que la septième copie des enseignements ne verra jamais le jour.

La version 1.3.2 est disponible. Elle vous sera proposée au prochain lancement.