Add tooltip coverage to Tasks and Calendar views (BUG #59, #70)
Details
Tasks: add tooltips to view toggles (List/Board), filter controls
(Show Completed, Show/Hide Filters, Archived, Clear Filters),
detail panel action buttons (Start, Complete, Archive, Delete, Edit,
Done, AI Title), and timer controls (Start, Pause, Stop, Resume).
Calendar: add tooltips to Today button, view mode toggles
(Day/Week/Month/Agenda), New Event button, calendar source toggles,
and event editor remove buttons (reminder, tag).
Fix state persistence for Notes and Tasks (BUG #12, #21, #25, #56)
Details
Notes: persist expanded sidebar node IDs and selected page across
sessions using IPluginSettings. On first load, restore expansion
state from settings and fall back to persisted SelectedPageId when
no in-memory selection exists.
Tasks: fix selected task restore to fall back to _allTasks when the
task isn't in the current filtered collection (BUG #25). Fix filter
project reference going stale on plugin switch by re-resolving
FilterProject after LoadProjects() rebuilds the list (BUG #56).
Persist ShowFiltersRow toggle state.
Fix greyed-out sidebar in client mode (concurrent command execution)
Details
CommunityToolkit's AsyncRelayCommand disables the command while it's
executing, preventing concurrent calls. In client mode, SelectTab awaits
plugin.OnNavigatedToAsync() which makes HTTP SDK calls to the server —
these are much slower than local FFI calls. While the first SelectTab
is waiting on the HTTP response, all sidebar buttons bound to the same
SelectTabCommand are disabled (greyed out) because CanExecute returns
false during execution.
Fix: AllowConcurrentExecutions = true on SelectTab, matching the
expected behavior where rapid tab switching should always work.
Also fix HttpSdkTransport stale logger (same pattern as PluginRegistry:
static readonly ForContext becomes dead after ReconfigureForWorkspace).
Split Tasks plugin: create PrivStack.Plugin.Tasks.Headless
Details
Extract Models/ (16 files) and Services/ (16 files) from the Tasks
plugin into a new PrivStack.Plugin.Tasks.Headless project. This
assembly references only PrivStack.Sdk — zero Avalonia dependency —
making it loadable by the headless server.
New files in Headless:
- TasksHeadlessPlugin.cs: HeadlessPluginBase entry point with entity
schemas, service initialization, and IApiProvider implementation
- TasksApiHandler.cs: Shared API handler extracted from
TasksPlugin.Api.cs — used by both desktop and headless plugins
The UI plugin (PrivStack.Plugin.Tasks) now references the Headless
project for shared models and services. TasksPlugin.Api.cs delegates
to the shared TasksApiHandler.
Directory.Build.props updated: HeadlessPlugin=true opt-out prevents
UI.Adaptive (and thus Avalonia) from being added as a transitive
dependency to headless plugin projects.
AXAML xmlns declarations updated with assembly qualifier for types
now in the Headless assembly.
Bump patch versions for unified toast migration
Details
Calendar 1.14.7→1.14.8, Canvas 1.0.4→1.0.5, Contacts 1.9.6→1.9.7,
Data 1.21.0→1.21.1, Email 1.28.1→1.28.2, Files 1.11.0→1.11.1,
Finance 3.24.1→3.24.2, Habits 1.2.3→1.2.4, Journal 1.15.5→1.15.6,
Notes 1.65.1→1.65.2, WebClips 1.3.4→1.3.5. Both csproj and
PluginMetadata versions updated.
Get notified about new releases