mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-31 14:17:12 -06:00
Every edit copies the workbook for its undo step (copy-on-write: sheets and 64-row bands of cells are shared). A floating picture's bytes (Image.data) and the VBA project (Workbook.vba_project) were plain Vec<u8>, so each edit on a sheet with a picture, and every edit in a workbook with macros, kept another full copy of them, up to the 100 steps of the history. They are Arc<Vec<u8>> now, as cell pictures already are, with base64 helpers for serde (b64::shared, b64::opt). JSON and XLSX are unchanged. Measured on macOS 27 (Apple M3 Max), gridcraft-cli, kernel peak footprint: a 19 MB picture and 50 cell edits on its sheet, 992 -> 22 MB; 10 edits, 215 -> 21 MB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>