Un exemple livré échoue la validation que CLAUDE.md déclare obligatoire.
$ rustmotion validate -f examples/ferriskey-presentation.json
Geometry: 1 violation(s)
ERROR: gradient_text (wrap=false but text too wide)
view: 0, scene: 4
path: views[0].scenes[4].children[1].children[1].children[0].children[0]
bbox: [290, 509] -> [690, 631] (viewport: 1920x1080)
axis: x
hint: gradient_text natural width is 404px but only 400px available
Ce n'est pas une régression du chantier d'audit
Établi, pas supposé :
- L'échec se reproduit à l'identique — même chiffre de 404 px — à
c229ec0, avant le round 3.
git log main..c229ec0 sur le chemin de mesure (intrinsic.rs, renderer/text.rs, gradient_text.rs, renderer/fonts.rs) est vide : le code de mesure est identique à main.
- Même chose pour le validateur (
commands/geometry.rs) et pour le fichier d'exemple lui-même.
Le dépassement existe donc sur main et précède tout le chantier.
Pourquoi ça compte quand même
404 px pour 400 px disponibles, soit 1 % de dépassement. Le contenu est presque certainement correct à l'œil. Mais :
CLAUDE.md pose comme règle obligatoire que tout scénario passe validate avant d'être présenté. Un exemple du dépôt qui échoue contredit la règle que le dépôt enseigne.
- Un exemple livré est une référence copiée par les générateurs. Celui-ci leur montre un
white-space: nowrap dans une boîte trop étroite de 4 px.
Pistes
Par ordre de préférence :
- Corriger l'exemple — élargir la boîte de quelques pixels, ou baisser légèrement la
font-size. C'est un gradient_text avec white-space: nowrap dans une boîte de 400 px ; le rendre conforme est trivial et rend l'exemple exemplaire.
- Vérifier au passage que la largeur naturelle mesurée par
GradientTextIntrinsic correspond bien aux pixels réellement peints. Un écart de 1 % sur une seule ligne peut aussi être un défaut de mesure — auquel cas le vrai bug n'est pas dans l'exemple. À trancher avant de corriger le JSON, sinon on masque le symptôme.
Vérification
rustmotion validate -f examples/*.json doit passer sur les 8 exemples. Aujourd'hui : 7 sur 8.
Un exemple livré échoue la validation que
CLAUDE.mddéclare obligatoire.Ce n'est pas une régression du chantier d'audit
Établi, pas supposé :
c229ec0, avant le round 3.git log main..c229ec0sur le chemin de mesure (intrinsic.rs,renderer/text.rs,gradient_text.rs,renderer/fonts.rs) est vide : le code de mesure est identique àmain.commands/geometry.rs) et pour le fichier d'exemple lui-même.Le dépassement existe donc sur
mainet précède tout le chantier.Pourquoi ça compte quand même
404 px pour 400 px disponibles, soit 1 % de dépassement. Le contenu est presque certainement correct à l'œil. Mais :
CLAUDE.mdpose comme règle obligatoire que tout scénario passevalidateavant d'être présenté. Un exemple du dépôt qui échoue contredit la règle que le dépôt enseigne.white-space: nowrapdans une boîte trop étroite de 4 px.Pistes
Par ordre de préférence :
font-size. C'est ungradient_textavecwhite-space: nowrapdans une boîte de 400 px ; le rendre conforme est trivial et rend l'exemple exemplaire.GradientTextIntrinsiccorrespond bien aux pixels réellement peints. Un écart de 1 % sur une seule ligne peut aussi être un défaut de mesure — auquel cas le vrai bug n'est pas dans l'exemple. À trancher avant de corriger le JSON, sinon on masque le symptôme.Vérification
rustmotion validate -f examples/*.jsondoit passer sur les 8 exemples. Aujourd'hui : 7 sur 8.