8cc1599434
soSave had no re-entrancy guard: a second click while the first run awaited encryption/POST ran the whole save again -> two POSTs, two entries. Wrapped in a soSaving latch (same class as the sync-button guard); body moved to soSaveInner so every early validation return releases the latch via finally. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>