A shipped example fails the validation CLAUDE.md declares mandatory.
$ 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
This is not an audit-chantier regression
Established, not assumed:
- The failure reproduces identically — same 404px figure — at
c229ec0, before round 3.
git log main..c229ec0 over the measurement path (intrinsic.rs, renderer/text.rs, gradient_text.rs, renderer/fonts.rs) is empty: the measuring code is identical to main.
- Same for the validator (
commands/geometry.rs) and for the example file itself.
The overflow therefore exists on main and predates the whole chantier.
Why it still matters
404px against 400px available — a 1% overflow. The content is almost certainly fine to the eye. But:
CLAUDE.md makes it a mandatory rule that every scenario passes validate before being shown. A repository example that fails contradicts the rule the repository teaches.
- A shipped example is a reference that generators copy. This one shows them a
white-space: nowrap inside a box 4px too narrow.
Directions
In order of preference:
- Fix the example — widen the box by a few pixels, or drop the
font-size slightly. It is a gradient_text with white-space: nowrap in a 400px box; making it conform is trivial and makes the example exemplary.
- While there, check that the natural width measured by
GradientTextIntrinsic matches the pixels actually painted. A 1% discrepancy on a single line could also be a measurement defect — in which case the real bug is not in the example. Settle that before editing the JSON, or the symptom gets masked.
Verification
rustmotion validate -f examples/*.json should pass on all 8. Today: 7 of 8.
A shipped example fails the validation
CLAUDE.mddeclares mandatory.This is not an audit-chantier regression
Established, not assumed:
c229ec0, before round 3.git log main..c229ec0over the measurement path (intrinsic.rs,renderer/text.rs,gradient_text.rs,renderer/fonts.rs) is empty: the measuring code is identical tomain.commands/geometry.rs) and for the example file itself.The overflow therefore exists on
mainand predates the whole chantier.Why it still matters
404px against 400px available — a 1% overflow. The content is almost certainly fine to the eye. But:
CLAUDE.mdmakes it a mandatory rule that every scenario passesvalidatebefore being shown. A repository example that fails contradicts the rule the repository teaches.white-space: nowrapinside a box 4px too narrow.Directions
In order of preference:
font-sizeslightly. It is agradient_textwithwhite-space: nowrapin a 400px box; making it conform is trivial and makes the example exemplary.GradientTextIntrinsicmatches the pixels actually painted. A 1% discrepancy on a single line could also be a measurement defect — in which case the real bug is not in the example. Settle that before editing the JSON, or the symptom gets masked.Verification
rustmotion validate -f examples/*.jsonshould pass on all 8. Today: 7 of 8.