v2.21.0 — Analytics Fix + QA Hardening
What's Changed
- Restores the masked license key in launch telemetry (regression from v2.20.0 — used to correlate launches with license status, as in v2.18.x)
Windows — UX overhaul
- Restored the Organize button on the Mover page — the primary action was unreachable outside the Wizard since the 2.19 visual refactor
- Unified page headers across Mover / Events / Rename / Google Photos: utilities left, stats centre, search + primary action right; duplicated source pickers and Scan buttons removed from the Events and Rename toolbars
- Progressive disclosure on every tool page: destination options stay dormant until a scan loads files; filters, search and stat tiles appear only when they mean something
- Folder-pattern presets compacted to name + sample path — Copy/Move mode now sits above the fold
- Move mode shows a warning that originals are removed from the source folder
- Sidebar: grouped navigation (Wizard / tools / Activity), pane toggle removed, broken calendar glyphs fixed, smaller BETA badge; the Win32 Help menu is retired (Check for updates moved to Settings → About)
- Preview column shows a 3-step guide on first launch; the onboarding dialog now opens over the visible, maximized app
- Consistent modal scan progress on Mover / Events / Rename (determinate bar, percentage, working Cancel)
- Thumbnails toggle added to the Events and Rename toolbars; source/destination pickers colour-coded everywhere
Windows — fixes
- Settings were silently reset on every launch (theme, wizard/onboarding completion never persisted) — fixed
- Pages keep their state when switching sections — scan results are no longer lost on navigation
- Events footer no longer clips the unmatched-files option
- Launch telemetry carries the masked license key again (parity with macOS)
macOS 14+ (Apple Silicon + Intel) · Signed & notarized · Auto-update via Sparkle
Windows 10/11 x64 · FolioSort-2.21.0-windows.zip (see Install First.html inside) · Auto-update via NetSparkle
macOS — QA Hardening (DMG rebuilt 2026-06-11)
The macOS DMG on this release was rebuilt to include all 20 fixes from the full line-by-line code audit (3 HIGH, 7 MEDIUM, 10 LOW):
Reliability
- ExifTool daemon no longer deadlocks on warning-heavy Google Takeout imports (stderr pipe is now drained)
- Network transfers recover from mid-file failures — partial files left by a dropped NAS connection no longer make every retry fail
- Correct dates in every timezone: files without EXIF dates (file creation/modification fallback) now land in the same folder/slot as an EXIF-dated photo taken at the same wall-clock moment (Mover, Rename and Events)
Fixes
- Event overwrites are now restorable via Undo, and originals are recovered if the copy fails
- Event progress no longer freezes while hashing multi-GB files
- Restored sessions correctly detect network/iCloud volumes again (monitoring + resilient retry re-enabled)
- Google Takeout Move mode no longer leaves no-date originals behind silently
{ShutterSpeed}/{ISO}/{Aperture}template tokens no longer create unintended folders- Refunded/disabled license keys no longer receive the offline grace period
- Activity log now rotates at 10 MB
Polish
- Sidecar files (.xmp/.aae) shared by RAW+JPEG pairs stay with both parents
- GPS/description/people metadata from Takeout JSON is written even when no timestamp exists
- Cancelling a Takeout run mid-operation now shows a summary of what was already done
- Built-in profile presets now update with the app
- Takeout exports' own artifacts (HTML, PDF…) no longer appear as "no date" orphans
- Events results now show files kept in source because no event matched
- Safer EXIF date parsing, geocoding rate-limit hardening, dead code removal
macOS — UX overhaul (DMG rebuilt 2026-06-12)
The macOS DMG on this release was rebuilt again with a top-to-bottom UX pass on top of the v2.21.0 hardening fixes. Nine focused commits, no functional regressions, 23 tests green:
Confidence & flow
- Module state survives window close/reopen — scan results and configuration no longer evaporate when you ⌘W and reopen from the Dock
- Preview pane leads with the numbers —
210 files → 14 folders · 2.1 GBnext to the file tree, so you know what you're about to commit at a glance - Unified primary action — every module's CTA follows the same pattern:
Organize 210 files/Rename 210 files/Process 210 files, disabled (and visibly dimmed) until there's a valid preview, with help text on hover explaining any blocker - Sidebar
Moverrenamed to Organize so the Wizard's "Organize Files" and the section both speak the same language
Less noise
- Mover middle column: Safety & Integrity and Metadata Fallback collapse by default — each shows a one-line summary of the current choice (e.g.
Verify XXHash64 · Ask each time) so you know what's active without expanding - Wizard Review now shows up to 5 example file mappings + the
210 files → 14 folderssummary + a+ N morefooter, instead of a single example representing the whole batch - Section captions (SOURCE / DESTINATION / PREVIEW …) bumped to a single design-system style that crosses WCAG AA
Validation surfaces where you need it
- Events: sub-events outside their parent event's time window are now marked inline (orange triangle, tint, border) so you can fix them in place — not just flagged in a footer banner
Time range (UTC)gets a tooltip explaining it matches the EXIF timestamps baked into your photos- Toolbar search prompts now name their scope:
Search 210 scanned fileswhen there's something to search,Scan a folder to searchwhen there isn't
Polish
- Check for Updates… button added to Settings → About (was previously only reachable from the macOS menu)
- Sidebar labels truncate cleanly at narrow widths instead of overlapping the BETA badge
- Minimum window bumped 900→1000×640 — the three-pane modules genuinely need the breathing room
Commits: de383d7 → b978ab5 (9 total).