Severity: high
Type: bug
Location: clipsync/config.py — Settings._persist_locked() (~line 215)
Problem: _persist_locked() always writes to settings.json.tmp before os.replace(). The tray process and UI child processes can mutate settings concurrently, so two writers can clobber the same temporary file and commit a corrupted mix or lose one update.
Suggested fix: Use a process-unique temporary name such as settings.json.<pid>.tmp (or tempfile in the same directory) so concurrent writers cannot collide.
Filed from a full-source audit of the repo (2026-07-29). Independently confirmed against the source before filing.
Severity: high
Type: bug
Location:
clipsync/config.py—Settings._persist_locked()(~line 215)Problem:
_persist_locked()always writes tosettings.json.tmpbeforeos.replace(). The tray process and UI child processes can mutate settings concurrently, so two writers can clobber the same temporary file and commit a corrupted mix or lose one update.Suggested fix: Use a process-unique temporary name such as
settings.json.<pid>.tmp(ortempfilein the same directory) so concurrent writers cannot collide.Filed from a full-source audit of the repo (2026-07-29). Independently confirmed against the source before filing.