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