Tracking issue for the September 2026 audit remediation chantier.
An exhaustive multi-agent audit of the five workspace crates produced 88 raw findings. Each was submitted to two independent adversarial reviewers — one on technical correctness, one on repository convention and severity proportionality — with instructions to refute by default. Half were rejected. 46 survive after deduplication.
Full report: https://claude.ai/code/artifact/c5c97b94-ba8d-41c0-9683-9f9123da342b
Ground rules for this chantier
- Every finding gets its own branch, its own regression test, and its own pull request.
- The regression test is written before the fix and must fail without it.
- All pull requests target
chantier/audit-2026-09, never main.
- Frozen contract:
ConversionContext::for_viewport(w, h) (crates/rustmotion-core/src/css/taffy_bridge.rs) is the single constructor the validator and the renderer share. Do not reintroduce ConversionContext::default() on a path that knows the real viewport.
- Frozen contract: the
Painter trait signature does not change. The CSS cascade reaches painters by applying inherit_from to the component's own style before paint, not by threading a new parameter through 60 components.
Findings
Workstream A — Animation & peinture (core)
Workstream B — Validateur géométrique
Workstream C — Encodage, audio & annulation
Workstream D — Médias, caches & CLI de rendu
Workstream E — Fonds animés & scène
Workstream F — Crate rustmotion-html
Workstream G — Studio (Dioxus)
Workstream H — Entrée non fiable : expand, include, assets réseau
Workstream I — Composants & cascade CSS
Workstream J — Layout & CSS core
Workstream K — Documentation, schéma & CI
Workstream K (supplement) — established by direct verification
Severity breakdown
| High |
Medium |
Low |
Total |
| 1 |
25 |
27 |
53 |
Known overlap
Issues #155, #157 and #162 describe defects this chantier also fixes. They were deliberately left out of scope of this tracking issue and will need closing by hand once the chantier lands.
Tracking issue for the September 2026 audit remediation chantier.
An exhaustive multi-agent audit of the five workspace crates produced 88 raw findings. Each was submitted to two independent adversarial reviewers — one on technical correctness, one on repository convention and severity proportionality — with instructions to refute by default. Half were rejected. 46 survive after deduplication.
Full report: https://claude.ai/code/artifact/c5c97b94-ba8d-41c0-9683-9f9123da342b
Ground rules for this chantier
chantier/audit-2026-09, nevermain.ConversionContext::for_viewport(w, h)(crates/rustmotion-core/src/css/taffy_bridge.rs) is the single constructor the validator and the renderer share. Do not reintroduceConversionContext::default()on a path that knows the real viewport.Paintertrait signature does not change. The CSS cascade reaches painters by applyinginherit_fromto the component's own style before paint, not by threading a new parameter through 60 components.Findings
Workstream A — Animation & peinture (core)
crates/rustmotion-core/src/engine/paint_pass.rs:390crates/rustmotion-core/src/engine/animator.rs:504crates/rustmotion-core/src/engine/paint_pass.rs:1262crates/rustmotion-core/src/engine/animator.rs:470Workstream B — Validateur géométrique
crates/rustmotion/src/cli/commands/geometry.rs:180crates/rustmotion/src/cli/commands/geometry.rs:477crates/rustmotion/src/cli/commands/validate.rs:146crates/rustmotion/src/cli/commands/geometry.rs:785crates/rustmotion/src/cli/commands/geometry.rs:844crates/rustmotion/src/cli/commands/geometry.rs:963component_kindis duplicated verbatim in geometry.rs instead of reusing the canonical helper —crates/rustmotion/src/cli/commands/geometry.rs:1158Workstream C — Encodage, audio & annulation
crates/rustmotion/src/encode/video/ffmpeg.rs:620crates/rustmotion/src/encode/video_audio.rs:221crates/rustmotion/src/encode/audio.rs:67crates/rustmotion/src/encode/video/ffmpeg.rs:601crates/rustmotion/src/encode/video/ffmpeg.rs:452Workstream D — Médias, caches & CLI de rendu
crates/rustmotion-components/src/gif.rs:176crates/rustmotion/src/engine/preload.rs:238crates/rustmotion-components/src/gif.rs:129crates/rustmotion/src/cli/commands/render.rs:452rustmotion batch --name-templatemangles every non-ASCII character in the template into mojibake —crates/rustmotion/src/cli/commands/batch.rs:74Workstream E — Fonds animés & scène
crates/rustmotion/src/engine/render/background.rs:806scaleproduces a blocky pattern instead of a crisp vector —crates/rustmotion/src/engine/render/background.rs:605crates/rustmotion/src/engine/render/scene.rs:595crates/rustmotion/src/engine/render/background.rs:595Workstream F — Crate rustmotion-html
crates/rustmotion-html/src/scene.rs:20crates/rustmotion-html/src/style.rs:46crates/rustmotion-html/src/element.rs:95crates/rustmotion-html/src/lib.rs:289Workstream G — Studio (Dioxus)
crates/rustmotion-studio/src/editor/inspector.rs:2119crates/rustmotion-studio/src/editor/inspector.rs:2166crates/rustmotion-studio/src/editor/frames.rs:42crates/rustmotion-studio/src/scenario/history.rs:147crates/rustmotion-studio/src/editor/inspector.rs:2404crates/rustmotion-studio/src/editor/playback.rs:115Workstream H — Entrée non fiable : expand, include, assets réseau
crates/rustmotion-core/src/engine/renderer/assets.rs:141srcis handed verbatim toffmpeg -iwith no protocol allowlist —crates/rustmotion-core/src/engine/renderer/assets.rs:222for-eachexpansion has a depth ceiling but no node budget — nesting is multiplicative —crates/rustmotion-core/src/expand.rs:157include— no allowlist, no opt-out —crates/rustmotion/src/include.rs:220Workstream I — Composants & cascade CSS
font-sizecontext-free — a relative unit collapses marquee/list to a 0px-high box —crates/rustmotion-components/src/box_builder.rs:1716inherit_fromis dead for rendering —crates/rustmotion-components/src/legacy_dispatch.rs:68crates/rustmotion-components/src/table.rs:116Workstream J — Layout & CSS core
emon layout properties resolves against a constant 16px, never the element's font-size —crates/rustmotion-core/src/css/taffy_bridge.rs:292knownand content-boxavailable, forwarded verbatim to IntrinsicMeasure —crates/rustmotion-core/src/engine/layout_pass.rs:97Workstream K — Documentation, schéma & CI
README.md:2034crates/rustmotion/skills/rules/card-flex-layout.md:46Workstream K (supplement) — established by direct verification
README.md + crates/rustmotion-components/Cargo.toml.github/workflows/ci.yaml.github/workflows/publish.yamlcrates/rustmotion-core/src/schema/scenario.rscrates/rustmotion-core/src/schema/video.rscrates/rustmotion-core/src/schema/docs/non-goals.mdSeverity breakdown
Known overlap
Issues #155, #157 and #162 describe defects this chantier also fixes. They were deliberately left out of scope of this tracking issue and will need closing by hand once the chantier lands.