mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-24 10:09:01 -06:00
- safe_file: write policy documented (durable for what can't be recreated, atomic-only for recreatable outputs); new write_atomic_nosync (temp + rename, temp removed on failure, no file/folder sync); per-thread sync counter for tests. - export::write_file (exports, renders, screenshots, merge previews, CLI/MCP) uses the non-syncing writer; new write_file_durable keeps the sync for Edit a Copy (the TIFF becomes a library photo). Catalog, sidecars, settings, DNG conversion/merges and smart previews stay durable; the #93 original-overwrite guard is untouched. - Import > Copy verifies the synced copy against the probe's content hash (SipHash-1-3/128 of the whole file) instead of re-reading the source; byte compare when there is no hash. A file changed since Review Import is now refused instead of imported with stale details. Move keeps its byte-for-byte check before deleting sources. - check_write_target: skip building the library-wide guard when nothing is at the target. - write_new_unique keeps its read-back (DNGs replace raws; cheap next to encoding). - Tests: no sync on the export path, durable writers still sync, Copy caught by the probe hash (corrupt copy, stale hash, changed source); ignored timing test write_policy_timing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>