mirror of
https://github.com/storytold/wordcraft.git
synced 2026-10-29 04:47:10 -06:00
* #2138: save writes the chosen file when its folder refuses a temporary file (macOS privacy protection) On macOS a Save-panel pick inside a protected folder (Desktop, Documents…) grants access to that file only, so the sibling .wordcraft-save-*.tmp was likely refused with EPERM. On PermissionDenied creating the temporary file, write the destination directly; a remaining permission error on macOS says where to allow access. Untested on a Mac: the fallback path is pinned on Unix with a read-only folder. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * #2138: a failed save in a folder refusing the temporary file keeps the original Review (FredApps): the in-place fallback truncated the destination before writing, so a failure partway through lost the previous document. The fallback now keeps the existing file's bytes in memory (up to 512 MB) before writing it in place and writes them back if the save fails, or removes a new file it created. If that write-back fails too, the error says the file may be incomplete. A file over the limit isn't written in place; the error suggests Save As. Tests: the reviewer's partial-write test (read-only folder), a new file removed on failure, and the size limit. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P8veLveuUsJJm6UEcQPEuW * #2138: keep the original untouched when no safe replacement is possible When the folder refuses the sibling temporary file, an existing destination is no longer overwritten in place (no in-memory rollback): it stays byte-identical and the error says to use Save As to another folder or allow access to the folder (macOS: Privacy & Security > Files and Folders). A destination that doesn't exist yet is created exclusively and removed again if the write fails. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P8veLveuUsJJm6UEcQPEuW --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>