Lightningbeam/lightningbeam-ui/lightningbeam-core/src
Skyler Lehmkuhl ba4395602d Make recording an undoable action; fixes MIDI recording not marking doc modified
Recording (audio and MIDI) mutated the document directly in the AudioEvent
handlers, outside the action system — so it was never undoable, and dirty-
tracking leaned on an ad-hoc `media_modified` flag that the MIDI stop handler
forgot to set (hence: recording a MIDI clip didn't trigger the save-on-close
prompt).

Recording is temporal (the clip streams into the document live over the take),
so it can't be applied by one synchronous execute(). Instead, commit the
finished take as an *already-applied* action:

- ActionExecutor::push_applied(action) — registers an action whose effect is
  already present (clears redo, bumps the epoch so the doc reads as modified,
  pushes to the undo stack) WITHOUT re-running execute()/execute_backend().
  Undo then removes the content via rollback/rollback_backend; redo re-adds it.
- AddClipInstanceAction::already_applied(...) — constructs the action pre-seeded
  into its post-execute state (executed + the existing backend clip id) so the
  first undo can remove the live-recorded clip from both doc and backend, and
  redo re-adds it through the normal path.
- Both recording stop handlers now finalize, then push_applied this action.
  Keeping the clip in the document (not a transient) matters for streaming-to-
  disk and keeps the doc the single source of truth.

Recordings now bump the epoch like every other edit, so the media_modified
flag is dropped for recordings (kept only as a defensive fallback if the action
can't be built). Whole workspace compiles; 299 core tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:23:46 -04:00
..
actions Make recording an undoable action; fixes MIDI recording not marking doc modified 2026-07-11 19:23:46 -04:00
dcel2 Merge branch 'rust-ui' of https://git.skyler.io/skyler/Lightningbeam into rust-ui 2026-03-09 13:41:48 -04:00
gpu Onion skinning: vector-layer ghosts (tinted) 2026-06-20 23:49:33 -04:00
shaders Fix gamma handling and improve brush canvas performance 2026-06-16 08:32:39 -04:00
vector_graph P5 mobile gestures + long-press context menus 2026-07-02 00:11:49 -04:00
action.rs Make recording an undoable action; fixes MIDI recording not marking doc modified 2026-07-11 19:23:46 -04:00
animation.rs Lock editing on tween in-between frames 2026-06-21 16:01:47 -04:00
asset_folder.rs add folders to asset library 2025-12-30 00:45:19 -05:00
beam_archive.rs Add text layers 2026-06-27 18:14:47 -04:00
beat_time.rs Massive tempo refactor - make beats canonical time rep and allow them to be non constant 2026-04-02 10:26:01 -04:00
bezier_vertex.rs initial vector editing 2025-12-22 18:34:01 -05:00
bezpath_editing.rs initial vector editing 2025-12-22 18:34:01 -05:00
brush_engine.rs Phase 3a-3: low-res image proxy for cold-scrub raster frames 2026-06-20 20:05:46 -04:00
brush_settings.rs add brush library 2026-03-04 16:42:43 -05:00
clip.rs Type AudioClip duration by clip kind; fix MIDI clips growing too fast 2026-07-11 19:23:37 -04:00
clipboard.rs Add text layers 2026-06-27 18:14:47 -04:00
clipboard_platform.rs Address Mac build failures 2026-03-09 22:03:51 -04:00
curve_intersection.rs Paint bucket 2025-11-19 01:47:37 -05:00
curve_intersections.rs rewrite vector backend again 2026-03-13 18:53:33 -04:00
curve_segment.rs Paint bucket 2025-11-19 01:47:37 -05:00
dcel.rs rewrite dcel 2026-02-26 18:48:21 -05:00
document.rs Type AudioClip duration by clip kind; fix MIDI clips growing too fast 2026-07-11 19:23:37 -04:00
effect.rs Timeline types stage 1: make lightningbeam-core Beats/Seconds-typed 2026-07-10 09:36:07 -04:00
effect_layer.rs Timeline types stage 1: make lightningbeam-core Beats/Seconds-typed 2026-07-10 09:36:07 -04:00
effect_registry.rs Fix gamma handling and improve brush canvas performance 2026-06-16 08:32:39 -04:00
export.rs Audio export: real FLAC + tag metadata for all formats 2026-07-09 12:52:37 -04:00
file_io.rs Save: skip re-encoding unchanged raster keyframes 2026-07-09 13:58:34 -04:00
file_types.rs Add SVG vector import and export 2026-06-26 16:40:39 -04:00
flood_fill.rs Magic wand selection 2026-03-07 03:39:09 -05:00
fonts.rs Add text layers 2026-06-27 18:14:47 -04:00
gap_handling.rs Paint bucket 2025-11-19 01:47:37 -05:00
gradient.rs Add gradient support to vector graphics 2026-03-10 00:57:47 -04:00
hit_test.rs Timeline types stage 1: make lightningbeam-core Beats/Seconds-typed 2026-07-10 09:36:07 -04:00
instance_group.rs Audio from videos 2025-12-03 01:04:09 -05:00
intersection_graph.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
layer.rs Add text layers 2026-06-27 18:14:47 -04:00
layer_tree.rs Initial work on movie clips 2026-02-21 00:54:38 -05:00
layout.rs Add Rust desktop UI with Blender-style pane system 2025-11-12 06:13:00 -05:00
lib.rs Add text layers 2026-06-27 18:14:47 -04:00
object.rs aspect ratio: unify video placement + add export fit modes 2026-06-26 06:54:49 -04:00
pane.rs Add script node 2026-02-19 09:29:14 -05:00
path_fitting.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
path_interpolation.rs Render shape on stage 2025-11-16 02:40:06 -05:00
planar_graph.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
quadtree.rs Paint bucket 2025-11-19 01:47:37 -05:00
raster_draw.rs Shape tools 2026-03-07 07:27:45 -05:00
raster_layer.rs raster: info-panel size + "Layer to document size" (scale/expand-crop) 2026-06-26 15:40:23 -04:00
raster_store.rs Phase 3a-1: lazy fault-in of raster keyframe pixels 2026-06-19 16:59:46 -04:00
region_select.rs rewrite dcel 2026-02-26 18:48:21 -05:00
renderer.rs Timeline types stage 1: make lightningbeam-core Beats/Seconds-typed 2026-07-10 09:36:07 -04:00
script.rs Add script node 2026-02-19 09:29:14 -05:00
segment_builder.rs Clean up build warnings 2026-02-14 11:07:32 -05:00
selection.rs Unify selection systems and make region/lasso cut robust 2026-06-21 14:47:11 -04:00
shape.rs Phase 5: fix broken unit tests; cargo test --lib green again 2026-06-19 16:45:23 -04:00
snap.rs work on vector graph 2026-03-22 18:16:17 -04:00
svg_export.rs SVG export: emit text layers as real glyph outlines 2026-07-09 07:10:59 -04:00
tempo_map.rs Massive tempo refactor - make beats canonical time rep and allow them to be non constant 2026-04-02 10:26:01 -04:00
test_mode.rs Fix DCEL selection bugs 2026-03-05 19:55:39 -05:00
text_layer.rs Add text layers 2026-06-27 18:14:47 -04:00
tolerance_quadtree.rs Paint bucket 2025-11-19 01:47:37 -05:00
tool.rs Add text layers 2026-06-27 18:14:47 -04:00
video.rs Address code-review findings across export, decode, and data model 2026-06-26 17:47:32 -04:00
webcam.rs Record to multiple layers 2026-03-01 13:48:43 -05:00