v2.2.0
What's New
This release overhauls every list page in the application with a powerful DataTable system -- bringing filtering, sorting, pagination, and customizable columns to Work Items, Milestones, Vendors, Invoices, Household Items, and User Management. It also adds a full backup and restore capability with scheduled backups and retention policies, configurable from the Settings page.
Highlights
- DataTable across all list pages -- Every list view now supports column-level filtering (text, enum, boolean, date range, number range, and entity filters), multi-column sorting, pagination, column reordering, and persistent column settings.
- Backup & Restore -- Create manual backups or schedule automatic backups with a cron expression. Set a retention policy to automatically prune old backups. Restore from any backup directly in the Settings UI.
- Consistent page layout -- All list pages share a standardized layout with unified navigation, giving the app a more cohesive feel.
- Translated category names -- Predefined categories (trades, budget categories, household item categories) are now displayed in the user's language.
- DateRangePicker -- Date range filters use a purpose-built calendar picker with range highlighting instead of native date inputs.
- UI improvements -- Floating menu button, iPadOS Safari sidebar fix, visual cleanup across multiple pages.
2.2.0 (2026-03-25)
Features
- backup: add backup & restore with scheduling, retention, and settings UI (#1150) (bae4008), closes #1146 #1146 #1146 #1146 #1146 #1164 #1164
- datatable: add budget columns to HouseholdItems, completedAt to Milestones, reorder Invoice columns (#1127) (02dbd2b), closes #1126
- datatable: enhance filters with SVG icon, enum shortcuts, range sliders, column-level entity filters (#1125) (058c581), closes #1124
- datatable: range filters, area hierarchy, column reordering, vendor trade filter (#1131) (fc88fdd), closes #1130
- household-items: migrate HouseholdItemsPage to shared DataTable component (#1116) (dc4bf04)
- i18n: add translation support for predefined category names (#1156) (2b1ad74), closes #1143 #1143 #1143 #1143 #1143
- layout: standardize list page layout across 8 pages (#1144) (381ba85), closes #1142
- milestones: migrate MilestonesPage to shared DataTable component (#1107) (37ab58a), closes #1105
- user-management: migrate UserManagementPage to shared DataTable component (#1110) (7b5cc76)
- vendors: migrate VendorsPage to shared DataTable component (#1112) (41f5379), closes #1111
- work-items: migrate WorkItemsPage to shared DataTable component (#1119) (05ff4ac), closes #1118
Bug Fixes
- appshell: remove empty header and add floating menu button (#1165) (2775f6a), closes #1161
- budget: show medium net remaining budget on overview card (#1104) (bdd57f4), closes #1103 #1103
- ci: add GITHUB_TOKEN to CLA check workflow (#1088) (a289c24)
- ci: force Node.js 24 for CLA contributor-assistant action (#1092) (9801e70)
- ci: set INPUT_GITHUB_TOKEN for CLA contributor-assistant action (#1091) (c1d174a)
- ci: simplify CLA workflow token and commit message config (#1109) (5cee6aa)
- ci: use github.token for CLA check (#1090) (640a444)
- datatable: auto-apply filters, fix enum labels, always-visible header, filtered empty state (#1129) (5e706d7), closes #1128
- datatable: bundle 6 DataTable bug fixes (#1141) (95a15f9), closes #1140 #1135 #1136 #1137 #1139 #1140 #1145 #1137
- datatable: dynamic filter bounds, date auto-apply, enable all numeric filters (#1172, #1173, #1174) (#1175) (15d00be)
- datatable: enable numeric and date range filtering end-to-end (#1152, #1153, #1154, #1155) (#1159) (31d1da2)
- datatable: fix filter auto-apply regression — onChange now propagates to onApply (#1134) (f922517), closes #1129
- datatable: fix filter click propagation, clear filters, and column settings positioning (#1123) (0d8dfc9), closes #1122
- datatable: remove redundant headings, add invoice action menu, fix actions header styling (#1133) (b34aa6f), closes #1132
- date-filter: replace native inputs with DateRangePicker for auto-advance and range highlighting (#1171) (fc46480), closes #1149
- e2e: fix remaining test selector and assertion failures after DataTable migration (#1177) (5d72d8b), closes #1168 #create-modal-title #delete-modal-title #1095 #1178 #1178 #1095
- e2e: increase timeouts for work items filter empty state on mobile (#1194) (aeeec8f)
- e2e: increase vendor URL search param timeout for mobile viewport (#1191) (8287748)
- e2e: stabilize i18n category tests for CI (#1193) (aa6d703)
- e2e: update page objects and tests to match DataTable component (#1176) (5c4321f), closes #1095 #id #id #1095
- e2e: update ScheduleSubNav aria-label locator (#1190) (4deced3)
- e2e: use exact locator for Open menu button in design review screenshots (#1106) (ed3601b)
- household-items: add missing actions menu dropdown and delete flow (#1117) (9b55bf7), closes #1115
- i18n: change "Add" to "New" in Project Overview and Schedule dialogs (#1163) (a45ca75), closes #1162
- manage: randomize color picker default on page load (#1094) (8af88da), closes #1093
- migrations: correct vendor_contacts column corruption from buggy 0028 (#1097) (ef2ec64)
- render budget line edit form inline in place of card (#1101) (f795082), closes #1100
- sidebar: remove redundant close button from mobile sidebar (#1168) (d6cdc4e), closes #1166
- sidebar: use dvh units to prevent footer cutoff on iPadOS Safari (#1169) (8b56a91)
- ui: visual cleanup — remove dividers, redundant headings, fix tab layout (#1186) (1119108), closes #1185 #1185 #1185 #1185 #1185 #1185 #1185
Documentation
Chores
- add branch and beta tag cleanup policies (#1157) (fc9dece)
- deps-dev: bump the dev-dependencies group with 5 updates (#1183) (fc33fa1)
- deps: bump actions/cache from 5.0.3 to 5.0.4 (#1180) (0933828)
- deps: bump docker/scout-action from 1.20.2 to 1.20.3 (#1182) (0c7dfe5)
- deps: bump github/codeql-action from 4.33.0 to 4.34.1 (#1181) (f5695f9)
- deps: bump the prod-dependencies group with 2 updates (#1184) (f4f5d40)
- enforce PR mergeability check before CI polling in all agents and skills (#1170) (f86a8b7)
- remove design review screenshots workflow and stale E2E workflow runs (#1160) (3b48603)
- replace CLA workflow with custom implementation (#1148) (bea2734)
- update agent memory and add .ds/ to gitignore (#1087) (daeabf1)