Treat a project as spent once its song has been exported
Opening an exported song starts a fresh session from detection instead of resuming: cuts, discards and metadata do not carry over, so a re-cut never inherits decisions that have already shipped. --resume overrides it on edit, export and project. This reverses what was agreed in planning and written into docs/spec.md and CONTEXT.md, which promised resume-across-sessions and re-export. Both are corrected. The cost is deliberate and worth stating: changing the width cap or adding the SVG renderer later now means re-cutting each song by hand rather than regenerating every bundle from its project file. Export records the flag in bundle.write, so no caller can forget it. Also removed --refit and the Auto-fit buttons, which were added without being asked for and whose only purpose - migrating projects made before the content rectangle was proposed - disappears once exported projects start fresh. Reset now restores detection's proposal rather than the whole page: clearing to full width would undo the thing the rectangle exists for, so one button covers it. open_project() replaces four copies of load-or-detect across the CLI and the editor.
This commit is contained in:
+13
-3
@@ -263,9 +263,19 @@ discards, content rectangle, skew angles, levels, staff-height overrides, marker
|
||||
and metadata. The bundle is *generated* from it, so export is a pure function of
|
||||
the project file plus the PDF.
|
||||
|
||||
It buys crash safety, resume across sessions (authoring is trickle-in), and
|
||||
**re-export** — change the 1920 cap, fix one cut, or add the SVG renderer later,
|
||||
and every song's bundle regenerates without repeating any human work.
|
||||
It buys crash safety and resume across sessions, since authoring is trickle-in:
|
||||
a session interrupted halfway through a 12-page scan picks up exactly where it
|
||||
stopped.
|
||||
|
||||
**A project is spent once its song has been exported.** Export records that in
|
||||
the file, and opening the PDF again starts a *fresh session from detection*
|
||||
rather than resuming. A re-cut therefore never inherits decisions that have
|
||||
already shipped. `--resume` overrides it on the `edit`, `export` and `project`
|
||||
commands when the old state really is wanted.
|
||||
|
||||
The cost is deliberate: re-export is no longer free. Changing the width cap or
|
||||
adding the SVG renderer later means re-cutting each song by hand rather than
|
||||
regenerating every bundle from its project file.
|
||||
|
||||
The project file references the PDF and never contains it; the hash lets the
|
||||
editor warn if the PDF changed underneath.
|
||||
|
||||
Reference in New Issue
Block a user