Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 24 of 127 Next →
February 27, 2026
patch Tasks

Fix settings cog button in Tasks plugin (BUG #30)

Details

The TasksSettingsOverlay was missing the StyleInclude for the local

ModalOverlayTheme.axaml. Without this ControlTheme, the ModalOverlay

TemplatedControl had no visual template — clicking the settings cog

set IsOpen=true and made the UserControl visible, but the overlay

rendered as an empty box with no backdrop, card, or content.

The GitHubIssueSourcesOverlay had the correct StyleInclude but it

was never added to TasksSettingsOverlay when it was created.

Note: Build may fail at this commit due to concurrent in-progress

work by another session (CS0136 variable shadowing in

TasksViewModel.cs:2421) — will be resolved in a subsequent commit.

patch CalendarNotesTasks

Add confirmation dialogs before destructive delete operations

Details

Notes: TrashPageAsync, TrashPageFromTreeAsync, DeletePagePermanentlyAsync,

and EmptyTrashAsync now prompt for user confirmation before proceeding.

Tasks: DeleteTaskByItem, DeleteTask, and BulkDelete converted from void

to async Task and now prompt for confirmation. DialogService wired in

TasksPlugin.CreateViewModelCore.

Calendar: DeleteEventByIdAsync now prompts for confirmation on the

non-recurring path (recurring events already have their own dialog).

Fixes polish audit bugs #22, #23, #49, #69.

patch Calendar

Make ICS/CalDAV sync fully non-blocking with incremental UI refresh

Details

All sync operations now run on background threads so the UI stays

responsive. Events populate incrementally as each subscription

completes rather than blocking until everything finishes.

CalendarSyncService:

  • SyncAllAsync runs subscriptions concurrently (bounded by

MaxConcurrency=8) instead of sequentially. Each subscription

fires SyncCompleted on completion for incremental UI refresh.

  • Background timer loop (RunAsync) uses the same concurrent pattern

instead of sequential foreach.

CalendarViewModel:

  • SyncAllCalendars fires sync on Task.Run and returns immediately.

SyncCompleted event (already wired via Dispatcher.UIThread.Post

in CalendarPlugin) handles the refresh.

AddSubscriptionViewModel:

  • ICS and CalDAV subscription creation closes the dialog immediately

after persisting the subscription. Initial sync fires in background

via Task.Run — no more blocking the UI while the first fetch runs.

patch Calendar

Fix CalDAV sync stripping local_only flag on post-push updates

Details

After pushing a locally-modified CalDAV event to the server, the sync

service updated the local event (to set SyncState="synced" and store

the new ETag) without passing localOnly: true. This caused the Rust

storage layer to clear the local_only column via INSERT OR REPLACE

with local_only=FALSE (extracted from the JSON payload which had no

local_only field).

Once cleared, the event became eligible for cloud sync — pushing

CalDAV-sourced events to the cloud relay when the CalDAV server is

the actual source of truth.

Fixed all three UpdateEventAsync calls in PushEventToServer and

DeleteEventFromServer to pass localOnly: true.

patch Tasks

Document local HTTP API endpoints in Tasks PLUGIN_CONTEXT.md

Details

Adds the IApiProvider section listing all 11 REST endpoints with methods,

paths, and descriptions for task and project CRUD via the local API.

← Prev Page 24 of 127 Next →

Get notified about new releases