Fix ComboBox bindings showing Avalonia.Controls.ComboBoxItem as text
Details
GitHub Sync: The project picker state was missing an error message
display, so GraphQL errors were silently swallowed. Added error
TextBlock and improved the auto-fetch catch to surface the error.
The SyncDirection ComboBox used ComboBoxItem wrappers with
SelectedItem bound to a string — replaced with x:String items.
Also normalize corrupted SyncDirection values on load.
Settings Overlay: Same ComboBoxItem binding bug on StatusCategory,
FieldType, and RuleTriggerType dropdowns. Replaced with ItemsSource
+ SelectedValueBinding + DisplayMemberBinding pattern using static
KeyValuePair arrays in the ViewModel.
Downgrade update check network failures from ERROR to WARNING
Details
When the cloud is offline (or the API is unreachable), the auto-update
timer fires repeatedly and logs a full ERROR stack trace for each
15-second timeout. These are expected connectivity failures, not bugs.
Split the catch block: HttpRequestException, TaskCanceledException,
and TimeoutException now log a one-line WARNING without the stack
trace. Actual unexpected errors (e.g., JSON parse, null ref) still
log at ERROR level and fire the UpdateError event.
Fix HtmlRenderer crash: Wrong Push/Pop state order in DrawingContext
Details
The Avalonia.HtmlRenderer HtmlControl.Render method can corrupt the
DrawingContext clip stack when content changes race with an in-progress
render pass. The existing hide+defer mitigation narrows the window but
doesn't eliminate it.
Add SafeHtmlLabel subclass that overrides Render with a try/catch
around the base call, catching InvalidOperationException from the
Push/Pop state mismatch and requesting a clean re-render via
InvalidateVisual(). Swap HtmlLabel for SafeHtmlLabel in the Email
plugin's HtmlMessageRenderer.
Fix build.sh skipping plugins with incomplete publish output
Details
The incremental skip logic only checked if the plugin DLL existed,
not whether all NuGet dependencies were present. If a previous
publish was interrupted or the output directory was manually
modified, subsequent --with-plugins runs would skip the plugin
thinking it was up-to-date, leaving it deployed without transitive
dependencies (e.g. Avalonia.HtmlRenderer for the Email plugin).
Add a DLL count check: if the output directory has only the plugin
DLL itself (no transitive dependencies), force a republish.
Fix wiki folder expansion state not persisting across plugin switches
Details
The wiki folder PageTreeNode constructor didn't accept the
onExpansionChanged callback, so expand/collapse events were never
recorded in _expandedNodeIds. Pass the callback and restore
expansion state from the persisted set after constructing wiki
folder nodes.
Get notified about new releases