Aller au contenu

Regarder les clips de recette

Un cas perceptif ne se prouve pas par une assertion : il décrit ce qu'un écran fait pendant qu'il le fait, et le verdict revient à qui regarde. Cette page est l'endroit où on regarde.

Où vivent les clips, et pourquoi pas ici

Les clips sont attachés à une pré-version roulante, clips-recette. Ils ne sont pas dans le dépôt, et c'est délibéré.

Une pièce jointe de publication ne pèse rien dans l'historique git : les 459 Mio attachés à v2.185.0 n'y laissent aucun blob. À l'inverse, les objets de .git pèsent 966 Mio, dont 866 Mio de PNG - 170 captures présentes au 23/08/2026, mais 4 537 versions dans l'historique, parce qu'une capture qui change d'octets produit un commit et qu'une capture à carte change d'octets à chaque exécution. Ranger des vidéos de la même façon reviendrait à recommencer, en plus lourd.

Comment ce chiffre se remesure

Les objets, pack et vrac : git count-objects -vH (size-pack + size). Les blobs PNG et leur poids compressé :

git rev-list --objects --all | grep -E '\.png$' | cut -d' ' -f1 | sort -u > /tmp/b.txt
git cat-file --batch-check='%(objectsize:disk)' < /tmp/b.txt | awk '{s+=$1} END {print s/1048576, "Mio"}'

Mesuré sur un clone de travail, toutes branches distantes rapatriées. Une mesure antérieure annonçait 79 % : la méthode n'en était pas consignée, et c'est précisément pourquoi elle l'est ici.

La pré-version est roulante : ses pièces sont remplacées à chaque tournage complet et leurs adresses ne changent pas. C'est ce qui permet à cette page de les écrire en dur.

Elle ne marque aucune version du produit

clips-recette porte le dernier tournage, pas un état figé. Elle est marquée pré-version pour qu'elle ne devienne jamais la « dernière version » du dépôt.

Et une copie sur le tag de chaque version

Depuis #4258, le train fait tourner les deux bancs sur la version qu'il vient de publier, et verse leurs clips sur son tag : préfixés bash- pour le banc historique, java- pour le banc en Java pur. Les deux destinations ne servent pas à la même chose :

clips-recette le tag vX.Y.Z
ce qu'on y trouve le dernier tournage le tournage de cette version-là
les adresses stables, mais leur contenu change immuables, contenu compris
à quoi ça sert regarder la recette d'aujourd'hui comparer, et garder une trace

Un tag ne bouge jamais : une adresse écrite vers v2.188.0 montrera toujours ce que v2.188.0 montrait. La suite des versions forme ainsi un historique visuel du produit, que rien ne reconstituera après coup.

L'historique commence à la version qui a suivi #4258

Verser aujourd'hui des clips sur un tag ancien montrerait le produit d'aujourd'hui sous une version qui ne l'affichait pas. Les versions antérieures resteront donc sans clips, et c'est volontaire.

Le constat qui a motivé ce choix : en cherchant un « avant » pour l'artefact visuel de la clôture de #4133, aucun clip antérieur au calque des gestes n'a été retrouvé. Les pièces de la pré-version du spike avaient été reversées par-dessus, et la date de publication d'une pré-version ne dit rien de la date de son contenu.

Les préfixes ne sont pas décoratifs. Les deux bancs nomment leurs pièces exactement pareil : 50 sur 51 sont communes. Sans préfixe, le second versement écraserait le premier en silence.

Pourquoi les deux bancs, et pas encore l'un ou l'autre

C'est la transition qui se prépare. Tant que le sort du banc bash n'est pas tranché, chaque version porte les deux tournages : ils se comparent alors sur le produit du jour, au lieu de se comparer sur une page datée qui mourra avec la décision. Le jour venu, il n'y aura qu'un des deux appels à retirer de release.yml.

Une différence compte dès aujourd'hui : le banc Java compare les cas obtenus aux cas attendus et échoue s'il en manque un, si bien qu'un tournage amputé ne peut pas se graver sur un tag. Le banc bash n'a pas cet oracle, son artefact n'emportant pas le compte attendu ; son index versé dit donc en tête ce qu'il contient, pour qu'un trou se constate au lieu de se deviner.

Produire un tournage complet

Le flux recette filmée (workflow_dispatch), avec publier_les_clips coché. Il dérive la liste des classes qui citent un cas, les filme d'une traite, découpe un clip par test, les remuxe en mp4 et les verse sur la pré-version.

Sans cette case, le flux garde son autre rôle : filmer une classe pour éprouver qu'un runner pilote réellement, ce qui est l'objet de sans_gestionnaire_de_fenetres.

Le train le fait aussi, et le décalage est dans l'intervalle

release.yml appelle ce flux après publish, sur la version qu'il vient de publier. Le tournage n'est donc pas un geste que quelqu'un doit penser à faire.

Ce que le train ne couvre pas, c'est l'intervalle entre deux versions. Un banc écrit après la dernière version n'a pas de clip, et n'en aura pas avant la prochaine.

Mesuré le 2026-08-30 (#4820) : sept clips déclarés sur les deux pages ouvraient un lecteur vide. Le dernier tournage datait du 28 août à 14:52 UTC, sur un commit où aucun des cinq bancs neufs n'existait encore - les trois clips du banc d'import étaient là précisément parce que ce banc-là existait. Rien n'était cassé : personne n'avait filmé depuis.

Rien n'oblige à attendre la version suivante. La liste des classes est dérivée à l'exécution, depuis CorrespondanceRecetteTest : un tournage manuel sur main ramasse les bancs neufs sans qu'une ligne change.

banc-filme vert ne dit pas qu'un clip a été produit

Ce job de l'intégration lance les --auto-test des deux bancs filmés, dont .github/scripts/lance-test-filme.sh pour celui de la recette. Ces cas éprouvent ce que le banc refuse, en six secondes : il répond « le banc refuse ce qu'il doit refuser », jamais « des images existent ». Le tournage, lui, met une vingtaine de minutes.

Mesuré le 2026-08-30 : les neuf demandes de fusion du palier de #4447 sont toutes passées avec banc-filme vert, et sept clips déclarés sur les pages ouvraient un lecteur vide (#4820). Ce n'est pas un défaut du job : c'est la question qu'il pose qui n'est pas celle-là.

Un tournage manuel efface celui du train

La pré-version est roulante, et rien ne distingue les deux sources au moment d'écrire. Le tournage manuel du 28 août a remplacé les clips de v2.189.0 par un jeu dont les notes disent « ces clips ne correspondent à aucune version publiée ».

Ce qui se perd est la correspondance, pas les clips : ceux de la version restent sur son tag. C'est clips-recette qui cesse alors de montrer une version publiée, et ses notes sont le seul endroit qui le dit.

Tourner une seule session, ou sur une autre plateforme

Le flux tournage de recette (tournage-recette.yml, workflow_dispatch) prend deux entrées : la session (toutes, ou S1 à S11) et la plateforme (ubuntu, windows, macos). Il tourne avec le banc en Java pur, qui n'a besoin ni de serveur X ni de gestionnaire de fenêtres.

C'est le flux à prendre quand on travaille une session et qu'on veut revoir ses clips sans refaire les quatre cents autres, ou quand on veut savoir à quoi le produit ressemble sur un autre système.

Son garde compte les cas, pas les fichiers : un tournage qui rend « des clips » peut en avoir perdu la moitié, et un compte de fichiers ne le dirait pas.

Deux familles, deux pages

Ce qu'un clip y sert Combien de clips
Cas perceptifs le regarder : c'est le seul verdict qui existe pour ces cas 10
Cas assertés comprendre pourquoi un test rougit, ou vérifier qu'il joue ce que son nom annonce 80

Et une troisième source, qui ne se compare pas

Depuis #4306, un tournage peut parler à la vraie plateforme plutôt qu'à ses fixtures. Ses clips vivent sur leur propre pré-version, clips-connectes, pour une raison qui n'est pas de rangement : leur écran suit des données vivantes, donc le plancher de bruit y mesurerait la plateforme au lieu du rendu. comparer-tournages.yml refuse cette source, et le dit.

Ce ne sont pas d'autres cas, ce sont les mêmes cas vus contre une autre frontière : les quelque 220 dont le verdict se lit hors de l'application, et qu'un bouchon rend convaincants et creux.

L'adresse d'un clip se déduit de son nom :

https://github.com/echonuit/vigiechiro-pr-companion/releases/download/clips-recette/<Classe>.<test>.mp4

Un lecteur vide n'est pas un cas rouge

Si un clip ne se lance pas, c'est que le tournage complet n'a pas eu lieu depuis que ce cas existe. Relancer le flux avec publier_les_clips avant de conclure quoi que ce soit sur le produit. PageDesClipsTest garde la correspondance entre ces pages et les cas joués, pas la présence des fichiers.