You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Animations touching only border_radius, clip_path_progress or font_size are never applied #426
Found while verifying #373 and #384 (both closed), and reported independently by a user for font_size.
Cause
props_has_paint_overrides (crates/rustmotion-components/src/box_builder.rs, around line 1039) is an allow-list (translate, scale, rotation, opacity, blur, glow, perspective, width, height). apply_animated_props is only called when it returns true, so an animation that touches only a property missing from that list is dropped. Adding any translate_x track to the same node "unlocks" it.
Repros
Animating border_radius validates and has no effect #373: {"type":"div","style":{"width":200,"height":200,"background":"#000000","animation":[{"name":"keyframes","keyframes":[{"property":"border_radius","keyframes":[{"time":0,"value":100},{"time":1,"value":100}]}]}]}} → sharp corners at frame 15. On a shaperect, corners stay sharp even with another track present.
font_size keyframes on a text (40 → 200) are accepted and the text keeps its initial size.
To do
Make every animated property reach the render, without a hand-maintained allow-list.
Audit every animatable property for the same defect (letter_spacing, stroke_width, gap, padding, …) with one render test per property animated alone.
border_radius animation on shape.
font_size animation applied to text layout and rendering.
Definition of done
A test that fails on current main is written first. For anything visual it is a render test (scenario → frame → pixel assertions); tests that build AnimatedProperties by hand are not enough — that is exactly how the regressions listed here slipped through.
Each item is verified end to end: scenario JSON, rustmotion validate, render, image inspected.
Vocabulary changes update crates/rustmotion/skills/SKILL.md, the relevant rules/ file and the exported schema. A field the validator accepts must have an effect, otherwise the validator rejects it or warns.
No comments in Rust code (repository rule). Commits follow <type>: <verb> <message>. No AI attribution in commits, PRs or issue comments.
Context
Found while verifying #373 and #384 (both closed), and reported independently by a user for
font_size.Cause
props_has_paint_overrides(crates/rustmotion-components/src/box_builder.rs, around line 1039) is an allow-list (translate, scale, rotation, opacity, blur, glow, perspective, width, height).apply_animated_propsis only called when it returns true, so an animation that touches only a property missing from that list is dropped. Adding anytranslate_xtrack to the same node "unlocks" it.Repros
{"type":"div","style":{"width":200,"height":200,"background":"#000000","animation":[{"name":"keyframes","keyframes":[{"property":"border_radius","keyframes":[{"time":0,"value":100},{"time":1,"value":100}]}]}]}}→ sharp corners at frame 15. On ashaperect, corners stay sharp even with another track present.rules/clip-path-morph.md(kind: morph+ aclip_path_progresstrack) renders identical frames at t=0, 1 and 2.font_sizekeyframes on atext(40 → 200) are accepted and the text keeps its initial size.To do
letter_spacing,stroke_width,gap,padding, …) with one render test per property animated alone.border_radiusanimation onshape.font_sizeanimation applied to text layout and rendering.Definition of done
mainis written first. For anything visual it is a render test (scenario → frame → pixel assertions); tests that buildAnimatedPropertiesby hand are not enough — that is exactly how the regressions listed here slipped through.rustmotion validate, render, image inspected.cargo fmt --all --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test --workspacepass.crates/rustmotion/skills/SKILL.md, the relevantrules/file and the exported schema. A field the validator accepts must have an effect, otherwise the validator rejects it or warns.<type>: <verb> <message>. No AI attribution in commits, PRs or issue comments.