|
1 | 1 | ## What's New |
2 | 2 |
|
3 | | -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. |
| 3 | +This release puts your **project's area hierarchy** at the center of every view. Work items, household items, pickers, budget summaries, and every embedded reference now surface the full area ancestor path (`House / Ground Floor / Kitchen`) as a breadcrumb, so you always know where a task, item, or cost belongs. Budget Sources gains inline expansion with multi-select mass-move, Budget Overview replaces the category breakdown with an expandable area tree and adds clickable summary tiles plus print-friendly output, and Vendors moves into the Settings section to match how the rest of the app is organized. |
4 | 4 |
|
5 | | -### Highlights |
| 5 | +### What's new |
6 | 6 |
|
7 | | -- **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. |
8 | | -- **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. |
9 | | -- **Consistent page layout** -- All list pages share a standardized layout with unified navigation, giving the app a more cohesive feel. |
10 | | -- **Translated category names** -- Predefined categories (trades, budget categories, household item categories) are now displayed in the user's language. |
11 | | -- **DateRangePicker** -- Date range filters use a purpose-built calendar picker with range highlighting instead of native date inputs. |
12 | | -- **UI improvements** -- Floating menu button, iPadOS Safari sidebar fix, visual cleanup across multiple pages. |
| 7 | +**Area hierarchy, everywhere it matters** |
| 8 | + |
| 9 | +- Work items and household items display the full area ancestor path as a breadcrumb on list pages, detail pages, and create pages. |
| 10 | +- Pickers (work item, household item, budget line) show the area as a secondary line under each result. |
| 11 | +- Every place a work item is embedded -- diary entries, invoices, household item dependencies -- now includes the area breadcrumb for instant context. |
| 12 | +- A shared `AreaBreadcrumb` component keeps the appearance consistent across the app. |
| 13 | + |
| 14 | +**Smarter area filters** |
| 15 | + |
| 16 | +- The Area filter on Work Items and Household Items lists correctly matches every descendant when you pick a parent area, at any depth of nesting. |
| 17 | +- A dedicated **No Area** option on both lists surfaces items that have not yet been assigned to any area. |
| 18 | + |
| 19 | +**Budget Overview redesign** |
| 20 | + |
| 21 | +- The cost breakdown is now grouped by **area hierarchy** instead of by category, with nested rows you can expand to drill into children and leaf-level budget lines. |
| 22 | +- The old "Unassigned" bucket is renamed **No Area** to match the rest of the app. |
| 23 | +- Every summary tile at the top of the page is clickable -- click a tile to instantly select the underlying budget lines that add up to that number. |
| 24 | +- Full print styling: clean page margins, nested group boxes, inner item separators, and the app's chrome suppressed in print. `Cmd+P` / `Ctrl+P` produces a clean PDF or paper copy. |
| 25 | + |
| 26 | +**Budget Sources redesign** |
| 27 | + |
| 28 | +- Click any financing source to expand it **inline** and see every budget line attached to it -- no navigation away. |
| 29 | +- Budget lines are grouped into a hierarchical **area tree**, with dense columnar rows and horizontal dividers between work item groups. |
| 30 | +- **Multi-select across groups** lets you tick budget lines spread across multiple areas and sources; the selection is preserved as you expand and collapse. |
| 31 | +- A new **mass-move modal** reassigns the entire selection to a different source in a single operation. |
| 32 | +- New API endpoints power this view: `GET /api/budget-sources/:sourceId/budget-lines` and `PATCH /api/budget-sources/:sourceId/budget-lines/move`. |
| 33 | + |
| 34 | +**Navigation** |
| 35 | + |
| 36 | +- **Vendors** has moved out of the Budget subnav into **Settings**. Vendor records are master data -- names, trades, contact info -- so they sit alongside Users, Areas, and Trades. Invoices stay in the Budget section because they are transactional. |
| 37 | + |
| 38 | +**Reliability** |
| 39 | + |
| 40 | +- Reverse-proxy handling is tightened: with `TRUST_PROXY=true`, only the first proxy hop is trusted, and rate limiting uses a resilient client identifier that no longer can be spoofed by a user-supplied `X-Forwarded-For` header. No configuration change is needed to benefit -- upgrading is enough. |
| 41 | + |
| 42 | +**Tooling** |
| 43 | + |
| 44 | +- TypeScript is upgraded to **6.0** with `noUncheckedIndexedAccess` enabled across the codebase, catching a whole class of latent array-access bugs. |
| 45 | +- Docker Scout comparisons against the previous stable tag are now part of the release pipeline. |
| 46 | + |
| 47 | +### Breaking changes |
| 48 | + |
| 49 | +None. Existing bookmarks, links, URLs, and data model are preserved. |
| 50 | + |
| 51 | +### Migration notes |
| 52 | + |
| 53 | +- **No database migration is required.** Area ancestor data is resolved on read -- every response that references a work item, household item, or budget line now includes the full ancestor chain automatically. Existing clients and integrations continue to work; they just see a richer payload. |
| 54 | +- **Reverse-proxy users**: `TRUST_PROXY=true` still means "I am running behind a reverse proxy, please read the forwarded headers," so no setting needs to change. What changes is that the server now trusts only the first proxy hop and computes rate-limit keys in a way that cannot be spoofed by an external `X-Forwarded-For`. If you were previously relying on chained / multi-hop proxy headers being trusted all the way to the origin client, review your proxy topology -- see the [reverse proxy guide](https://steilerDev.github.io/cornerstone/getting-started/docker-setup#behind-a-reverse-proxy) for the current behavior. |
| 55 | +- **Vendors menu move**: Vendors has moved from `Budget > Vendors` to `Settings > Vendors`. Direct URLs to individual vendor detail pages continue to resolve; only the top-level menu entry relocated. |
0 commit comments