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.
Update CONTINUATION.md with v1.4.0-v2.0.0 completed work
Details
Marks all medium-priority items as done and documents 25 new features
across 6 commits. Updates remaining work list.
Reconciliation enhancements, transfer intent, commands, enhanced seed data (v2.0.0)
Details
Rewrites ReconciliationView with native file picker integration via ISdkDialogService,
statement ending balance input (CurrencyBox), matched/unmatched transaction sections,
progress display, and finish reconciliation with checkpoint persistence. Adds
finance_reconciliation_checkpoint entity schema for tracking reconciliation history.
Adds finance.transfer_between_categories intent with from/to category slots and amount,
routed to ExecuteTransferIntentAsync which resolves categories by name and delegates to
TransferService.
Adds 3 new command palette entries: Go to Account Summary, Account Management, and
Category Management for quick navigation.
Enhances seed data with GoalTargetType enum values on categories (MonthlySpending,
WeeklySpending, NeededByDate, SavingsBalance, MonthlySavingsBuilder), a new "New Car Fund"
savings category, credit card sample transactions (grocery, dining, gas), and reconciliation
checkpoint wipe target.
Bumps version to 2.0.0 (csproj + PluginMetadata).
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