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
A full audit of the codebase (read-only, commit 452596e) targeted three areas: JSON scenario
generation quality, component overflow handling, and the engine's ability to produce the
"dark premium" marketing style of the reference videos.
It found 2 critical, 8 high and 9 medium issues. The headline conclusion: the render
engine is markedly stronger than its authoring surface. Real 3D (M44 with perspective divide),
keyframed camera, multi-plane parallax, both blur kinds and the spring/cubic-bezier easing solver
all work correctly. What is broken is the chain of trust around them — the validator green-lights
scenarios that render invisible text, column-less grids, and content spilling out of its card.
Every finding below was reproduced against a release build, not inferred from reading code.
Decisions taken at kickoff
Question
Decision
Rationale
grid component
Wire tracks through to taffy
taffy supports CSS Grid natively and the schema already models tracks; a KPI row is the single most common marketing layout
Unknown top-level attributes
Error by default, and --strict-attrs made available to render
This is the class of failure that produces a silently wrong video; all 7 repo examples must still validate
Delivery cadence
Wave 1 (critical + high), review, then wave 2 (medium)
Keeps each review sitting reviewable
Base branch
origin/main
All code findings exist there; the in-flight 1600-template branch lands separately
Frozen contracts
Read-only for every workstream. Changing one requires updating this issue first.
Colour parsing entry point — crates/rustmotion-core/src/engine/renderer/colors.rs exposes:
parse_hex_color stays as a thin infallible wrapper for existing call sites.
The geometry validator never mutates schema types.cli/commands/geometry.rs reads the box
tree and CSS; any schema change belongs to the schema workstream.
File ownership is disjoint. No file is written by two workstreams. Reads may overlap freely.
css/style.rs and schema/style.rs are different files owned by different workstreams.
Context
A full audit of the codebase (read-only, commit
452596e) targeted three areas: JSON scenariogeneration quality, component overflow handling, and the engine's ability to produce the
"dark premium" marketing style of the reference videos.
It found 2 critical, 8 high and 9 medium issues. The headline conclusion: the render
engine is markedly stronger than its authoring surface. Real 3D (M44 with perspective divide),
keyframed camera, multi-plane parallax, both blur kinds and the spring/cubic-bezier easing solver
all work correctly. What is broken is the chain of trust around them — the validator green-lights
scenarios that render invisible text, column-less grids, and content spilling out of its card.
Every finding below was reproduced against a release build, not inferred from reading code.
Decisions taken at kickoff
gridcomponent--strict-attrsmade available torenderorigin/mainFrozen contracts
Read-only for every workstream. Changing one requires updating this issue first.
crates/rustmotion-core/src/engine/renderer/colors.rsexposes:parse_hex_colorstays as a thin infallible wrapper for existing call sites.cli/commands/geometry.rsreads the boxtree and CSS; any schema change belongs to the schema workstream.
css/style.rsandschema/style.rsare different files owned by different workstreams.Workstreams
Wave 1 — critical + high
cli/commands/{geometry,validate}.rs— C1, H3, H4, H6, H7 + regression testsengine/renderer/colors.rs,engine/paint_pass.rs,css/units.rs— C2css/taffy_bridge.rs,css/style.rs— H1core/schema/**,cli/commands/{schema,validation}.rs— H2, H5 (fonts), deadLayerStyleCLAUDE.md,.claude/skills/rustmotion/**— H8, M7Wave 2 — medium (after review of wave 1)
components/{box_builder,intrinsic,text}.rs,engine/animator.rs— M1, M2, M3validate_attrs.rs,cli/lib.rs,render.rs,scenario.rs— M4, M5, M6Findings index
--fixwritesstyle.wrap, a fieldCssStylerejects — the component is dropped from the render and validation then reports clean#fff,#FFF,white,rgb(...)all fall back toSColor::BLACKsilently; unparseable lengths fall back to0pxgrid-template-columnsnever reaches taffy, yetvalidate_schema.rs:217makes it mandatorychildrenasitems: true— zero component coverage, no constrained generation possible--fixindexes the post-filter child vector against raw JSON, patching the wrong node when a sibling fails to deserialize_parent_clipsis computed and never read: parent overflow is never detected, clipped subtrees are false positivestransformandscene.camera; custom fonts are never loaded before measuring--strict-animsamples 7 fixed points, discardst=0via an opacity guard, and forks the renderer's effect resolutionLayerStyle); its canonical Example 1 produces a dropped componentVerification (applies to every workstream)
All 7 example scenarios must still validate after every workstream.