- Fix clickPreview() to use closest('.checkbox-wrapper') so clicking
anywhere on a checklist item (text or icon) toggles the checkbox
- Add cursor: pointer to .checkbox-wrapper for better UX
- Add comprehensive tests for checkbox click handling (21 tests)
- Add tests for marked-options-factory checkbox rendering (11 tests)
Fixes#5950
Update clientId validation to accept both formats:
- Old format: 10+ chars (e.g., "BCL1pq4d2j11_27")
- New compact format: 6 chars matching /^[BEAI]_[a-zA-Z0-9]{4}$/
The compact format was introduced in feat/operation-logs branch but
the validation was rejecting it, causing "Invalid clientId loaded" errors.
- Update @angular/* packages to v21.0.8
- Update @angular/material and @angular/cdk to v21.0.6
- Update @angular-eslint/* to v21.1.0
- Update @ngrx/* to v21.0.1
- Update TypeScript to 5.9.3
- Update ngx-markdown to v21 and marked to v17
- Update typia to v11 for TypeScript 5.9 support
- Update @types/node to v22, chart.js to v4.5.1
Breaking changes addressed:
- Replace deep imports with public API imports (idb, formly, ngrx)
- Update marked-options-factory for marked v17 API changes
- Add custom FormlySliderComponent (formly slider incompatible with Mat v21)
- Update ngx-markdown SANITIZE configuration
- Fix HostListener decorators with unused $event args
- Fix crypto.subtle type compatibility
- Add skipLibCheck for dependency type conflicts
- Update tsconfig module settings for Angular 21
Removed:
- @angular-builders/custom-webpack (unused)
- Add subscription cleanup with takeUntilDestroyed() in core services
(snack, banner, global-theme, task-view-customizer)
- Fix type safety in IssueService by replacing `any` casts with proper types
- Improve error handling in IssueService to preserve stack traces
- Add comprehensive unit tests for TagService (22 tests)
- Fix broken tests in reminder.service.spec.ts (referenced non-existent methods)
- Add permissions: contents: write to build.yml and manual-build.yml
to fix GitHub release creation after org migration
- Update AUR PKGBUILD download URL to new org
- Update release notes changelog link
- Update GitHub project example hints in translation files
- Add explicit contents: write permission for GITHUB_TOKEN
- Increase wait time for release creation from 15 to 20 minutes
- Add failure check if release is not found after waiting
- Click on .drag-handle instead of task element to properly focus task
without triggering title edit mode (which would block keyboard shortcuts)
- Verify WebDAV form fields appear after selection before proceeding
- Add clear error message when WebDAV selection fails after retries
The E2E tests were failing because dismissTourIfVisible only handled
the Shepherd tour steps, not the Welcome intro mat-dialog that appears
first. This dialog blocks UI interactions causing test timeouts.
Updated tour-helpers.ts to:
- Add dismissWelcomeDialog() for the intro dialog
- Add dismissShepherdTour() for the tour steps
- Update dismissTourIfVisible() to handle both in sequence
The test was failing because task deletion now shows a confirmation
dialog by default (isConfirmBeforeTaskDelete=true). Added handling
to click the confirm button before expecting the task count to change.
docker-compose.e2e.yaml was failing when used standalone because the
supersync service only had a port override without a base definition.
Split into separate files so e2e:docker:webdav works without errors.
- Apply runtime default for isConfirmBeforeTaskDelete to ensure existing users get confirmation dialog
- Add takeUntil cleanup for dialog subscription in context menu
- Move _isTaskDeleteTriggered flag before delete call to prevent race condition
- Replace alert() with PFLog.warn() for non-blocking notification
- Change any to unknown type for better type safety
- Localize month names using DateAdapter instead of hardcoded English strings
- Remove duplicate monthNames array declaration (DRY)
Extract reusable heatmap component from activity-heatmap and add
a new repeat-task-heatmap that shows time spent history for
repeatable task instances in the configuration dialog.
Add handlers to autoFixTypiaErrors to fix validation errors for deprecated
fields that will be removed in future:
- metric.entities[*].obstructions, improvements, improvementsTomorrow
- improvement.hiddenImprovementBannerItems
These fields are now auto-fixed to empty arrays when missing/undefined,
allowing import of older backups without validation failures.
Apply GitHub's OR pattern to fix timing bug while preserving filterUsername.
Refactor getFreshDataForIssueTasks to call getFreshDataForIssueTask (DRY).
Fixes inconsistency from #5944 where only one method was updated.
When the app is backgrounded on Android, the focus mode countdown timer
now triggers a high-priority notification with alarm sound and vibration
when it completes. Previously, only the silent foreground service
notification was shown, causing users to miss timer completion.
Changes:
- Add completion notification channel with IMPORTANCE_HIGH
- Detect timer completion in FocusModeForegroundService
- Broadcast completion event to activity via LocalBroadcastManager
- Forward event to Angular via onFocusModeTimerComplete$ subject
- Handle native completion in effects to sync app state
Fixes#5923
Fixes#5921: When a task was rescheduled by removing the time and
changing only the date, the native Android alarm would still fire at
the original time. This was because removeTaskReminderSideEffects$
only removed the reminder from ReminderService but did not cancel
the native Android alarm.
Added explicit native Android alarm cancellation following the same
pattern used in clearRemindersOnDelete$, unscheduleDoneTask$, and
other similar effects.