mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-08-22 02:48:15 +00:00
Self-review catch. The merge path wrote the combined config with write_text and renamed it into place, bypassing _copy_file -- which preserves the destination's mode and owner deliberately, because these files are installed root-owned while the web interface that runs a restore is not root, and because widening them to the umask default is exactly the wrong thing to do to a file that sits next to secrets. Measured: a config.json at 0600 came back 0664. The merged result is now written to a scratch file and handed to _copy_file, which does the atomic replace with the preservation it was written for. The scratch file is removed in a finally block. Two tests added: the mode survives a merge, and no scratch file is left behind. Reverting to the bare rename fails the first. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STMbQE4YctTacQXfbYqKuW