Fix Finance plugin UI rendering and runtime crashes (v3.2.0)
Details
Fixed critical runtime crash on Reconcile tab where CalendarDatePicker
bound to DateOnly instead of DateTimeOffset, causing InvalidCastException.
Fixed Reports tab where all four report panels were invisible due to
ObjectConverters.Equal comparing boxed int to string ConverterParameter.
Replaced with boolean properties for reliable visibility toggling.
Added account type selector (Checking, Savings, CreditCard, Cash, Asset,
Liability) to the Accounts creation form — previously all accounts
silently defaulted to Checking. Added auto-creation of default budget,
4 category groups (Essentials, Lifestyle, Savings & Goals, Debt Payments),
and 15 starter categories on first navigation when no budget exists.
Also creates Income and Expense internal accounts for double-entry.
Improved Register tab with column headers (Date, Payee, Amount, Status,
Category), category selector in the add-transaction form, and actual
category name resolution instead of truncated GUIDs. Added empty state
messages across all tabs guiding users on what to do when no data exists.
Fixed Summary tab using raw SystemAccentColor instead of proper brush
resource, and replaced hardcoded white foreground with theme-aware
DynamicResource for dark mode compatibility.
Account hierarchy, CRDT conflict resolution, performance optimization, AI financial insights, quick budget entry (v3.1.0)
Details
Five major features for the Finance plugin:
1. Chart of Accounts Hierarchy — AccountHierarchyService with tree operations
(children, descendants, ancestors, roots, depth), cycle/orphan/depth validation,
aggregate balance across subtrees, and tree building with orphan safety.
2. CRDT Conflict Resolution Integration — ConflictAwareRepository wrapping
FinanceRepository with baseline tracking and automatic merge dispatch.
Added ResolveCategoryGroup (sticky Hidden, name LWW) and
ResolveReconciliationCheckpoint (sticky reconciliation, conservative balance).
EntityCache enhanced with per-entity GetSingle/SetSingle and prefix invalidation.
3. Performance Optimization — BalanceSnapshotService for pre-computed per-account
per-month balance snapshots with 5min TTL caching. ReconciliationService
subset-sum algorithm replaced with bottom-up DP (O(n*target) vs exponential
backtracking).
4. AI Financial Insight Intents — 6 new intents: monthly summary, spending
breakdown with trends, budget health with overspent/underfunded flagging,
multi-month financial trends with direction indicators, account overview with
net worth, and smart receipt categorization with 100+ merchant keyword patterns
across 9 categories. Enriched IndexableContent with monthly transaction
summaries and budget status for RAG context.
5. Enhanced Quick Actions — QuickBudgetEntryForm (Cmd+Shift+B) for logging
income/expenses with category selection from any interface. New command palette
entries for "Record a Purchase" and "Record Income".
128 tests total (63 new), all passing. Version 3.0.0 → 3.1.0.
Add hierarchy, CRDT resolution, caching, reconciliation UI, test fixes (v2.1.0)
Details
Implements remaining architecture items for the Finance plugin:
- Fix NUnit test runner: Directory.Build.targets was setting Private=false on all
ProjectReferences, preventing test dependency DLLs from copying to output. Added
IsTestProject condition. Fixed MockSdk non-generic SendAsync not storing writes.
All 56 tests now pass.
- One-to-many reconciliation UI: ReconciliationMatch now carries SubsetTransactions
list. ReconciliationMatchViewModel exposes subset details with expand/collapse.
ReconciliationView shows constituent transactions in matched items.
- Chart of accounts hierarchy: Account record gains ParentId. AccountManagement
supports parent selection, set/remove parent commands, and indented display.
AccountSummary renders parent-first ordering with child indentation.
- CRDT conflict resolution: ConflictResolver provides LWW for transactions,
sticky-closed for accounts, union-merge for budget allocations, and goal
preservation for categories.
- Performance optimization: EntityCache provides TTL-based ConcurrentDictionary
caching for FinanceRepository.ListAsync calls with automatic invalidation on
writes. AccountRegisterViewModel uses pagination (100 per page) with
LoadMoreTransactions for incremental loading.
- Added 11 new tests covering CRDT resolution, entity cache behavior, and
subset reconciliation model.
Enhance budget dashboard with goal progress, age-of-money, and transfers (v1.8.0)
Details
CategoryViewModel: added GoalProgress, UnderfundedAmount, HasGoal,
GoalTypeDisplay, GoalProgressDisplay, UnderfundedDisplay properties.
BudgetDashboardViewModel: age-of-money calculation via AgeOfMoneyService,
transfer dialog state (open/close, from/to category, amount), and
ExecuteTransferAsync via TransferService. BudgetDashboardView: progress
bars under goal categories, underfunded text indicators, age-of-money in
TBB banner, Move Money button with modal overlay dialog showing category
pickers and amount. TransferDialog programmatic ContentControl for reuse.
Add transaction editing and account summary view (v1.7.0)
Details
Transaction editing: inline edit panel on AccountRegisterView with payee,
amount, memo, category picker. Save uses immutable reversal pattern via
LedgerService.UpdateTransactionAsync. Delete creates reversal-only. Clear
and Reconcile status buttons. Status indicator column (U/C/R) in register.
Account summary: net worth banner with assets/liabilities, age-of-money
indicator, budget accounts section with cleared and total balances,
tracking accounts section, closed accounts section. Uses AgeOfMoneyService
for FIFO calculation. Added Summary nav button to FinanceView.
Get notified about new releases