Goal: edits are recoverable (Cmd+Z / Shift+Cmd+Z) and unsaved/failed state is visible.
Invariants: undo restores the exact prior raw scenario value (JSON or HTML source); history is bounded.
Acceptance: edit → undo restores file content; redo reapplies; dirty indicator clears once written.
Files:crates/rustmotion-studio/src/scenario/model.rs, editor/*.
Verify:cargo test --workspace && cargo check -p rustmotion-studio
Goal: edits are recoverable (Cmd+Z / Shift+Cmd+Z) and unsaved/failed state is visible.
Invariants: undo restores the exact prior raw scenario value (JSON or HTML source); history is bounded.
Acceptance: edit → undo restores file content; redo reapplies; dirty indicator clears once written.
Files:
crates/rustmotion-studio/src/scenario/model.rs,editor/*.Verify:
cargo test --workspace && cargo check -p rustmotion-studio