mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-27 11:56:50 -06:00
A native file whose images together pass IMAGE_BUDGET (4 GiB, or 20,000 images) opens without the images past it. They are intact in the file, but saving it again wrote the archive from the images in memory, so every save, autosave or `convert` onto itself deleted them for good. A 7.6 GiB `.fig` converted to a 7.3 GiB `.figcraft` reopened with 1,312 of its 2,337 images: one save would have dropped the other 1,025. Loading now tells images left out for the budget apart from damaged ones (`Loaded::images_past_budget`). A tab opened or reverted from such a file remembers the file, and saving over it is refused with a message that says how many images would be lost and to save under another name; saving a copy elsewhere works, and the original keeps its images. Auto-save skips the tab instead of retrying and failing every minute. `figcraft-cli convert` and `run --in X --out X` refuse to write over their input the same way. The same file is matched by its resolved path, so `./a.figcraft` and `a.figcraft` count as one (`file_access::same_file`). The note for each image left out for the budget now says it stays in the file, which can't be saved over without losing it. Damaged and missing images keep the old wording: they can't be kept, and saving drops them as before. The doc comment on report_lost_images said saving always drops the images it reports, which is no longer true for budget ones, so it went. This stops the data loss; it doesn't make such files editable in place. Loading images on demand would, and is discussed in the issue this links. Tests: the count and the note for both budgets; saving over the file refused with the file unchanged, Save As then working, and saving back over the original refused again; a snapshot encoded in the background refused too; a tab without images left out saving as before. Checked by hand on the 7.3 GiB file with file.save, file.saveAs, convert and run --out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>