Repository navigation
chantier: reliability and authoring improvements — wave 1 #24
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Tracking issue for the audit-driven improvement chantier (2026-07-18). Orchestrated per dev-methodology: one branch + squash-merged PR per workstream, sequential integration, full suite at each merge. Wave 1 complete — 16 workstreams merged, 127 → 198 tests, CI green on main.
Final status
Lot 1 — reliability
- chore(workspace): add CI and clean formatting/clippy drift #9 chore(workspace): CI + fmt/clippy cleanup — PR chore(workspace): add CI and clean formatting/clippy drift #25
- test(components): serde round-trip coverage for every component variant and alias #10 test(components): serde round-trip all variants — PR test(components): serde round-trip coverage for every component variant and alias #26
- fix(engine): honor start_at/end_at visibility windows in the paint pipeline #5 fix(engine): honor start_at/end_at in paint pipeline — PR fix(engine): honor start_at/end_at visibility windows and wire timeline steps #27
- fix(engine): implement or remove the dead timeline field #6 fix(engine): timeline field decision — PR fix(engine): honor start_at/end_at visibility windows and wire timeline steps #27 (implemented: steps = animations with delay += at)
- fix(components): wire Caption and Positioned into timed/animatable dispatch #7 fix(components): Caption/Positioned dispatch — PR fix(engine): honor start_at/end_at visibility windows and wire timeline steps #27
- fix(components): factor typeface resolution and stop panicking on missing fonts #8 fix(components): typeface resolution fallback — PR fix(components): factor typeface resolution and stop panicking on missing fonts #28
- fix(css): reconcile phantom properties (backdrop-filter, overflow-wrap, text-shadow typing) #12 fix(css): phantom properties — PR fix(css): reconcile phantom properties (filter, backdrop-filter, text-shadow, overflow-wrap) #29 (filter + backdrop-filter implemented, text-shadow bridged, validator warnings)
- fix(studio): surface write/reload errors, restore debounce, avoid mutex poisoning #13 fix(studio): error surfacing + debounce + poisoning — PR fix(studio): surface write/reload errors, restore debounce, avoid mutex poisoning #30
Lot 2 — authoring & engine features
- feat(engine): wire stagger for container children #20 feat(engine): stagger wiring — PR feat(engine): wire stagger for container children #31
- feat(html): animated backgrounds, parameterized transitions and fonts in the dialect #18 feat(html): backgrounds/transitions/fonts — PR feat(html): animated backgrounds, parameterized transitions and fonts in the dialect #32
- feat(html): validate rm-* attributes and CSS properties at transpile time #17 feat(html): transpile-time validation — PR feat(cli): validate rm-* and JSON component attributes at validation time #33 (+ typed-parse failures now blocking)
- feat(html): animation dialect (anim attribute) #19 feat(html): animation dialect — PR feat(html): animation dialect (anim attribute) #34
- feat(components): intrinsic measurement for terminal, table and codeblock #11 feat(components): terminal/table/codeblock intrinsics — PR feat(components): intrinsic measurement for terminal, table and codeblock #35
Lot 3 — studio features
- feat(studio): export video from the studio #15 feat(studio): video export — PR feat(studio): export video from the studio #36
- feat(studio): annotations for HTML sources via sidecar file #16 feat(studio): HTML annotations sidecar — PR feat(studio): annotations for HTML sources via sidecar file #37
- feat(studio): undo/redo and dirty-state indicator #14 feat(studio): undo/redo + dirty state — PR feat(studio): undo/redo and dirty-state indicator #38
Completeness pass
- docs(examples): 21 dead legacy
sizefields converted (found by feat(cli): validate rm-* and JSON component attributes at validation time #33's validation) — PR docs(examples): replace dead size fields in component-showcase #39 - docs(claude-md): stale architecture/CLI references refreshed — PR docs(claude-md): refresh stale architecture and CLI references #40
Backlog (open, scheduled for a future wave)
- feat(studio): before/after diff mode for agent iterations #21 feat(studio): diff mode
- feat(engine): CSS transitions (state-based animation) #22 feat(engine): CSS transitions
- feat(encode): incremental encoding for world views #23 feat(encode): incremental world encoding
Decision log
- Squash-merge everywhere; merges into main pre-authorized by the repo owner (2026-07-18).
- Model split: orchestration/review on the session model, implementation sub-agents on a faster tier.
- fix(engine): implement or remove the dead timeline field #6 timeline: implemented rather than removed — steps map cleanly onto AnimationEffect delays (shift_delay), no new engine path needed.
- fix(css): reconcile phantom properties (backdrop-filter, overflow-wrap, text-shadow typing) #12 filter matrices: Skia color-matrix translation column is 0..1-space (locked by invert regression test after the 0..255 first attempt failed).
- fix(css): reconcile phantom properties (backdrop-filter, overflow-wrap, text-shadow typing) #12 overflow-wrap/text-overflow: kept in schema (CssStyle is deny_unknown_fields — removal breaks existing scenarios); validator warns instead.
- feat(html): validate rm-* attributes and CSS properties at transpile time #17 typed-parse failures made always-blocking: a child dropped at render can no longer validate as OK (agent deviation, accepted).
- feat(html): animation dialect (anim attribute) #19 preset names not validated in rustmotion-html (no core/skia dependency by design); downstream typed deserialization rejects them readably.
- feat(studio): annotations for HTML sources via sidecar file #16 sidecar merged at every load path incl. CLI validate (orchestrator hookup) so no two loaders diverge.
- feat(studio): undo/redo and dirty-state indicator #14 known v1 races documented: undo-vs-pending-debounce, unwatched sidecar.
Known remaining limits (documented, not regressions)
- Undo: HTML annotation sidecar writes not undoable; undo raced against a pending 250ms debounce can be overwritten.
- Sidecar files are not file-watched (studio is the only writer in practice).
- Export: no cancellation; preview and export render concurrently (CPU contention only).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Activity
LeadcodeDev commentedon Jul 18, 2026
Wave 1 complete: 16 workstreams squash-merged (PRs #25–#40), test suite 127 → 198, CI (fmt/clippy/test) green on main. Backlog issues #21, #22, #23 remain open for a future wave.