- Add @Synchronized to WidgetTaskQueue methods to prevent task loss
- Use apply() instead of commit() in addTask() to avoid UI blocking
- Change QuickAddActivity to extend AppCompatActivity for consistency
- Add unit tests for setCounter() plugin API method
The setCounter() method was using upsertSimpleCounter without providing
mandatory fields (title, type), causing DataValidationFailedError on
app reload when plugins created counters.
Now checks if counter exists first:
- Existing counters: only update countOnDay value
- New counters: create complete record with all required fields
Fixes#5812
Load WebView native libraries during main thread idle time using
IdleHandler and WebSettings.getDefaultUserAgent(). This reduces
the 200-300ms freeze on first WebView creation.
Use Promise-based singleton pattern to ensure concurrent calls share
the same loading promise instead of triggering multiple imports.
Also fix pre-existing test bug using await in sync function.
Move ical.js (~76KB) to a lazy-loaded chunk via dynamic import.
The library is only loaded when calendar integration features are used.
- Create ical-lazy-loader.ts for on-demand loading
- Make getRelevantEventsForCalendarIntegrationFromIcal async
- Update calendar-integration.service.ts to use switchMap
- Add retry loop for deletion sync to handle eventual consistency
- Fix done state sync test to handle Done Tasks section
- Add task order sync test
- Add time tracking sync test (skipped - complex persistence)
- CVE-2025-66035: XSRF token leakage via protocol-relative URLs
- CVE-2025-66412: Stored XSS via SVG animation and MathML attributes
- CVE-2025-66414: DNS rebinding in @modelcontextprotocol/sdk
Updated @angular/* packages to 20.3.15 and @angular/cli to 20.3.13.
- Fix pausedTaskId race condition: pass pausedTaskId in action payload
instead of reading from state (reducer clears before effect reads)
- Fix Android focus notification: update title/isBreak on transitions,
restart timer runnable on resume from paused state
- Fix Android reminder cancellation: track scheduled IDs and cancel
alarms when reminders are removed
- Fix banner Start button: dispatch skipBreak first when isBreakTimeUp
to properly resume task tracking
- Fix WebDAV validation: use translation key instead of hardcoded string
Addresses code review feedback for sync issues identified in focus mode,
Android notifications, and reminder scheduling.
- Fix 2 flaky tests that failed when run on Mondays by using dynamic
weekday 3 days from today instead of hardcoded monday: true
- Add test for exact issue #5594 scenario: Mon/Wed/Fri pattern with
dueDay update verification
- Add test for Mon/Wed/Fri scheduling in addRepeatCfgToTaskUpdateTask$
Add 1.5s delay before focusing app window when triggered by tracking reminder,
idle detection, or take-a-break notifications. Also blur any focused element
after focus to prevent keystrokes from affecting tasks.
Fixes#5762
Always show a "Go to Task" action button in the snack bar when a task
is created. The button behavior is context-aware:
- If task is visible on current page: opens the task detail panel
- If task is in a different project/context: navigates to that context
Closes#5759
Add isFlatpak() detection to Electron API and show environment-specific
error messages when file permission errors occur during sync:
- Flatpak users see Flatseal and ~/.var/app/ guidance
- Snap users see 'snap connect' and ~/snap/... guidance
- Other users see generic permission error
Addresses #4078
On Android, native notifications handle reminders with their own snooze
button. The in-app dialog was still appearing because it wasn't aware
of the native snooze. Skip the dialog on Android so users only interact
with native notifications.
Fixes#5775
Focus mode effects now check the isFocusModeEnabled flag before
triggering focus mode actions. Previously, disabling Focus Mode in
App Features didn't actually disable it if Productivity Helper
sub-settings like isSyncSessionWithTracking were enabled.
Fixes#5776
Add updateTrackingService method to reset the notification timer when
the user manually edits time spent on a task. Previously, the Android
foreground service maintained its own timer that was only set at
tracking start, causing desync when users manually reset time.
Fixes#5772
Add "Test Connection" button to WebDAV settings that validates
configuration before sync. Shows computed URL in success/error
messages to help users debug path issues.
Also adds description text explaining syncFolderPath semantics
to prevent misconfiguration (addresses #5508).
Closes#5508
Add explicit win32metadata configuration to electron-builder.yaml to ensure
FileDescription and InternalName are identical between NSIS installer and
portable builds.
Fixes#4625