Skip to content

Des captures de référence — et le vrai blocage n'était pas lavapipe - #720

Merged
mgth merged 1 commit into
v6from
feat/reference-snapshots-in-ci
Sep 16, 2026
Merged

mgth merged 1 commit into
v6from
feat/reference-snapshots-in-ci

Conversation

@mgth

@mgth mgth commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Décision 2 de docs/v7-frontend.md. La note disait : « il faut un rastériseur logiciel (lavapipe) dans l'image du workflow. C'est le seul point qui touche la CI, donc il n'a pas été tenté. »

lavapipe est la partie facile. Le vrai blocage est le graphe de dépendances, et il est côté Windows :

egui_kittest rend par wgpu ; lbm-hook épingle windows 0.62 ; cargo unifie windows-core à 0.62 pour wgpu-hal ; gpu-allocator 0.28, que le back-end DX12 de wgpu-hal appelle, a été bâti contre 0.58. Leurs ID3D12Device sont alors deux types différents et wgpu-hal lui-même ne compile pas.

Rien ici ne peut corriger ça — c'est à l'amont. Et une dev-dependency atteint cargo test, qui est exactement ce que la CI lance : le job Windows compile tout le workspace. Donc wgpu est tenu hors de Windows par une dépendance ciblée cfg(not(windows)), vérifiée dans les deux sens (lint Windows du workspace propre, rendu fonctionnel sous Linux).

Les captures

Quatre : la barre en Running, la barre sans agent, la carte à deux écrans, un cadre avec son nom.

La barre sans agent est le seul état dont l'arbre d'accessibilité ne peut pas répondre : « désactivé » y est un drapeau, à l'écran c'est une couleur. Un thème qui ne grisait rien se lirait comme une application qui ne répond simplement pas.

Deux choses que le premier rendu a montrées, et qu'aucun test d'arbre n'aurait pu montrer

Harness::render peint sur rien. Le Ui d'App::ui n'a pas de fond, la fenêtre l'enveloppe dans un CentralPanel, et une capture sans panneau rend du blanc sur transparent — composité ensuite sur ce que le visionneur met derrière. La première série ressemblait à des rectangles noirs sur papier blanc, avec un bloc sombre parasite qui n'était que de l'alpha prémultiplié. Image et application doivent être la même chose, sinon la référence épingle une fiction. Corrigé : le harnais enveloppe dans un CentralPanel, comme la fenêtre.

À 900×600, la carte à deux écrans n'a aucun nom. Le nom vaut la moitié de la bordure du haut ; à cette taille ça passe sous le plancher de 7 pt et le plancher le supprime. Les tests d'arbre existants n'ont jamais vu ça — ils utilisent une fenêtre de 1200×900, où les noms survivent. C'est la question ouverte du document rendue visible : « le plancher décide du cas courant ». La référence est gardée telle quelle, et le test dit pourquoi.

Ce qu'il reste à savoir

Les références ont été engendrées sur un GPU réel. Le texte d'egui est rastérisé côté CPU et le harnais rend en RendererOptions::PREDICTABLE, donc il y a une vraie chance que lavapipe s'y accorde — mais je ne peux pas le vérifier ici. Si la CI ne s'accorde pas, le workflow téléverse ce qu'elle a rendu (snapshot-diffs) et les références sont remplacées par les siennes.

🤖 Generated with Claude Code

Décision 2 de docs/v7-frontend.md. La note disait « il faut lavapipe dans
l'image du workflow, donc ça n'a pas été tenté ». lavapipe est la partie
facile. Le vrai blocage est le graphe de dépendances, et il est côté Windows :

  egui_kittest rend par wgpu ; lbm-hook épingle windows 0.62 ; cargo unifie
  windows-core à 0.62 pour wgpu-hal ; gpu-allocator 0.28, que le back-end DX12
  de wgpu-hal appelle, a été bâti contre 0.58. Leurs ID3D12Device sont alors
  deux types différents et wgpu-hal lui-même ne compile pas.

Rien ici ne peut corriger ça — c'est à l'amont. Et une dev-dependency atteint
`cargo test`, qui est exactement ce que la CI lance, donc wgpu est tenu hors
de Windows par une dépendance ciblée cfg(not(windows)). Vérifié dans les deux
sens : le lint Windows du workspace reste propre, le rendu marche sous Linux.

Quatre captures : la barre en Running, la barre sans agent (le seul état dont
l'arbre d'accessibilité ne peut pas répondre — « désactivé » y est un drapeau,
à l'écran c'est une couleur), la carte à deux écrans, un cadre avec son nom.

Deux choses que le premier rendu a montrées et qu'aucun test d'arbre n'aurait
pu montrer :

- **Harness::render peint sur rien.** Le `Ui` d'`App::ui` n'a pas de fond, la
  fenêtre l'enveloppe dans un CentralPanel, et une capture sans panneau rend
  du blanc sur transparent — composité ensuite sur ce que le visionneur met
  derrière. La première série ressemblait à des rectangles noirs sur papier
  blanc, avec un bloc sombre parasite qui n'était que de l'alpha prémultiplié.
  Image et application doivent être la même chose, sinon la référence épingle
  une fiction.
- **À 900×600, la carte à deux écrans n'a aucun nom.** Le nom vaut la moitié de
  la bordure du haut, ce qui passe ici sous le plancher de 7 pt. Les tests
  d'arbre existants n'ont jamais vu ça : ils utilisent une fenêtre de 1200×900.
  C'est la question ouverte du document rendue visible — le plancher décide bien
  du cas courant.

Les références ont été engendrées sur un GPU réel ; si le rastériseur logiciel
de la CI ne s'y accorde pas, l'artefact du workflow donne ce qu'elle a rendu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mgth
mgth force-pushed the feat/reference-snapshots-in-ci branch from d34df49 to 27cb5fb Compare September 16, 2026 09:36
@mgth
mgth merged commit dc9edca into v6 Sep 16, 2026
3 checks passed
@mgth
mgth deleted the feat/reference-snapshots-in-ci branch September 16, 2026 09:54
mgth added a commit that referenced this pull request Sep 16, 2026
Les quatre de docs/v7-frontend.md sont maintenant tranchées et livrées
(#719, #720, #721). Ce commit met le document à jour pour les décisions 2 et
4, remet la section dans l'ordre 1-2-3-4, et laisse ouverte la seule question
qui l'est encore : le plancher de lisibilité du nom, qui n'était pas une des
quatre et qui est désormais regardable.

Le motif qui traverse les trois « décisions » qui n'en étaient pas : **ce qui
les bloquait était une raison écrite qui avait cessé d'être vraie.** lavapipe
n'était pas le blocage (c'est le graphe de dépendances, côté Windows) ; eframe
n'était plus un obstacle au spike des mires (il est dans le workspace depuis
#694) ; et fermer la liste des modes ne décidait rien sur le produit (les sept
plugins sont tous dans ce dépôt). Une note « pas tenté parce que X » vieillit :
vérifier X avant de la recopier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant