La carte qui raconte
La carte de voyage d'EREME tient dans une bande de 86 pixels. Au survol, un nœud franchi dit ce qui s'y est passé ; un nœud à venir dit qu'on n'en sait rien. Le tout sans un seul état nouveau : le journal portait déjà tout, il lui manquait une ligne.
Une bande de 86 pixels
L'écran de voyage d'EREME est une colonne : le bandeau d'état en haut, la chronique au milieu, la carte de décision en bas. Entre le bandeau et le reste vit la carte vivante : une bande de 86 pixels de haut, une épine horizontale à nœuds équidistants, le tracé plein derrière le vaisseau, pointillé devant. Elle remplace un module de texte qui tenait la route en une ligne de glyphes ; la bande est littéralement la version dessinée de cette ligne.
Les nœuds portent des glyphes typés par structure, jamais par contenu : un carré pour un contrôle, un triangle pour un danger, un losange pour une capsule. Et seuls se nomment les deux bouts du trajet et les lieux majeurs déjà croisés. Le reste se tait, pour une raison d'architecture plus que de style.
La carte ne lit jamais le moteur
Le widget de la carte ne touche pas au moteur : le contrat de session lui publie une route, nœud par nœud. Et la règle de publication fait toute la sincérité de l'écran : un nœud non atteint ne publie pas des champs vides, il ne publie pas les champs du tout. Ce que la surface ne reçoit pas, elle ne peut pas le laisser fuir. La route se dévoile en avançant parce que la donnée elle-même se dévoile en avançant.
Trois placements, jugés sur pièces
Où poser cette carte ? Trois candidats : un quatrième module dans le bandeau, une bande pleine largeur sous le bandeau, ou pas de présence permanente du tout. J'ai tranché la question par maquettes, rendues par le vrai widget dans le vrai écran. Verdict chiffré : dans le module de 300 par 60, la carte complète est illisible, noms qui se chevauchent, arc d'écart hors cadre. « La maquette a fait son travail : elle a chiffré un coût que la description n'annonçait pas. »
La bande gagne, et le module de texte qui affichait la route disparaît dans le même commit : « garder les deux montrerait la même route à deux endroits, dont un trop étroit pour ses propres noms. »
Une animation qui ne peut pas mentir
Le moteur n'a aucune position intermédiaire : avancer, c'est passer d'un nœud entier au suivant. Le glissement du vaisseau est pure présentation : un seul champ ajouté au dessin, une avance fractionnaire, avec une sentinelle qui signifie « pas d'animation » et redonne exactement le dessin d'avant. La vue fait glisser cette avance en 0,9 seconde, décélérée : « un vaisseau qui arrive ralentit, et un mouvement linéaire se lit comme une barre de chargement. » J'ai jugé les boucles d'animation image par image, rendues par le vrai widget, pas par une maquette : « Ce qui se juge ici est du mouvement. Une capture fixe n'en dit rien, et une maquette HTML mentirait deux fois, sur le dessin et sur le mouvement. » Le tracé se coupe à la position animée, plein derrière, pointillé devant : le dévoilement de la route se voit arriver au lieu d'être constaté entre deux écrans.
Le survol : ce qui s'y est passé, ou ce qu'on n'en sait pas
Survolez un nœud franchi : le nom du lieu s'il en a un, le jour, et la décision qui s'y est prise. Un nœud franchi sans événement répond « il ne s'y est rien passé » : « c'est une information, pas un trou. » Un nœud à venir répond « on ne sait pas encore ce qui s'y trouve ». Et le survol marche même sur les nœuds que la carte ne dessine pas encore : l'ignorance est affichable, pas seulement l'information.
Le commit qui livre ce survol le dit sans détour : « Aucun état neuf, et c'est le point. Le journal portait déjà tout : un jour, un événement, un choix. Il lui manquait de dire à quel nœud. » Une ligne ajoutée au journal, et l'infobulle se lit dedans. Le journal est déjà la vérité et déjà sérialisé : rien ne peut diverger au rechargement. Même le libellé de la décision n'est pas stocké : le journal garde des identifiants, le texte est résolu à la lecture.
La donnée morte
Chaque lieu du jeu porte une phrase de définition, exigée par la validation des données sur les dix lieux. Elle n'était affichée nulle part. Le commit qui la branche au survol nomme le danger exact : « Une donnée obligatoire que personne ne lit finit par mentir, puisque rien ne la contredit : on peut y écrire n'importe quoi pendant des mois sans qu'un écran proteste. »
La phrase s'affiche désormais en deuxième ligne du survol, et seulement quand le lieu est nommé : sinon la retenue sur les noms ne serait qu'un décor. La sonde de test, elle, a eu sa propre leçon : elle visait un nœud anonyme, l'infobulle sortait correcte et vide, « et j'en aurais conclu que la ligne ne s'affichait pas ». Elle vise depuis, en plus, un lieu nommé parmi les franchis.
Le harnais faisait juger autre chose
J'ai validé cette carte par captures, et le harnais de capture m'a menti quatre fois en deux commits : un rendu au jour 1 qui montrait un point immobile, un rendu empilé par-dessus l'écran, un survol pris avant le rafraîchissement de la bande, une capture prise en plein glissement. Chaque fois, c'est la capture elle-même qui a exposé le mensonge, et le motif revient dans les messages : le harnais me faisait juger autre chose que ce qui allait être livré. Instrumenter, puis vérifier l'instrument : sur un écran, la boucle est la même que sur un moteur.
La leçon
La carte vivante n'a presque rien ajouté au jeu : une ligne au journal, un champ d'animation, trois lignes de textes de survol en données. Tout ce qu'elle montre existait déjà ; personne ne le lisait. C'est peut-être la forme la plus rentable de contenu : brancher un écran sur une mémoire que le système tenait déjà, et découvrir au passage les données mortes qui n'attendaient qu'un lecteur pour redevenir vraies.