SIGN IN SIGN UP

Make screen recordings reopenable projects with explicit save

Recordings were already non-destructive packages that autosaved their
edits, but there was no way back into one: the menu bar's History submenu
opens a preview overlay, and the only "reopen in Studio" button was buried
in Settings. Autosave being silent also meant there was no dirty state, no
Cmd-S, and nothing to prompt about when a window closed.

Saved state vs working draft:
- edit.json is now the committed state, written only by an explicit save.
  The debounced autosave writes edit.draft.json instead, so a crash costs
  nothing and reopening restores the draft with the project marked dirty.
- Cmd-S commits and clears the draft; the title bar and the close button's
  dot track the dirty state.
- Closing with uncommitted edits asks first, via a window-delegate proxy
  that forwards everything it doesn't handle back to SwiftUI's delegate.
  A never-saved project offers Delete and Close; a saved one offers
  Discard Changes instead, since deleting it would be unrecoverable.

Projects browser:
- New Recordings menu with the most recent projects and Show All Projects,
  plus a thumbnail-grid window with search, sort, rename, reveal, delete,
  and size on disk. Packages on disk are the source of truth, so a project
  whose History row was deleted is still reachable.
- Poster frames are cached into the package rather than decoded per open.

Export:
- Reveal the exported file in Finder on success, behind a new default-on
  preference in Settings > Screen Recordings.

Two staleness fixes this forced:
- The cached flatten was assumed fresh whenever nothing was dirty, but the
  Share path installs a render built from a dirty document. Renders now
  carry a render.json stamp of the document that produced them and are
  only reused on an exact or container-only match.
- Flattening and the cloud transcript sidecar read the last saved document;
  both now read the draft when there is one, so an upload and its
  transcript match what the editor actually shows.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
F
Fayaz Ahmed committed
0b67cc5d16375101869d3982a1ae7eb2ae7dae58
Parent: 6b5f9bc