{ "version": "0.8.0", "notes": "### Added\n- **Reports hub**: `/reports` is now a hub surfacing a live highlights panel (current month + YTD net balance with sparklines, top movers vs. last month, top recent transactions) and four navigation cards to dedicated sub-reports (#69–#76)\n- **Highlights report** (`/reports/highlights`): balance tiles with 12-month sparklines, sortable top movers table, diverging bar chart, recent transactions list with 30/60/90 day window toggle (#71)\n- **Trends report** (`/reports/trends`): internal sub-view toggle between global flow (income vs. expenses) and by-category evolution, chart/table toggle on both (#72)\n- **Compare report** (`/reports/compare`): tab bar for Month vs. Previous Month, Year vs. Previous Year, and Actual vs. Budget; diverging bar chart centered on zero for the first two modes (#73)\n- **Category zoom** (`/reports/category`): single-category drill-down with donut chart of subcategory breakdown, monthly evolution area chart, and filterable transactions table (#74)\n- **Contextual keyword editing**: right-click any transaction row to add its description as a categorization keyword; a preview dialog shows every transaction that would be recategorized (capped at 50, with an opt-in checkbox for N+) before you confirm. Available on the category zoom, the highlights list, and the main transactions page (#74, #75)\n- **Bookmarkable period**: the reports period now lives in the URL (`?from=YYYY-MM-DD&to=YYYY-MM-DD`), so you can copy, paste, and share the link and keep the same state (#70)\n- **View mode preference** (chart vs. table) is now persisted in `localStorage` per report section\n\n### Changed\n- The legacy monolithic `useReports` hook has been split into per-domain hooks (`useReportsPeriod`, `useHighlights`, `useTrends`, `useCompare`, `useCategoryZoom`) so every sub-report owns only the state it needs (#70)\n- Context menu on reports (right-click) is now a generic `ContextMenu` shell reused by the existing chart menu and the new keyword dialog (#69)\n\n### Removed\n- The dynamic pivot table report was removed. Over 90% of its real usage was zooming into a single category, which is better served by the new Category Zoom report. Git history preserves the old implementation if it ever needs to come back (#69)\n\n### Security\n- New `AddKeywordDialog` enforces a 2–64 character length bound on user keywords to prevent ReDoS on large transaction sets (CWE-1333), uses parameterized `LIKE` queries for the preview (CWE-89), wraps its INSERT + per-transaction UPDATEs in an explicit BEGIN/COMMIT/ROLLBACK transaction (CWE-662), renders all untrusted descriptions as React children (CWE-79), and recategorizes only the rows the user explicitly checked — never retroactively. Keyword reassignment across categories requires an explicit confirmation step (#74)\n- `getCategoryZoom` walks the category tree through a **bounded** recursive CTE (`WHERE depth < 5`), protecting against malformed `parent_id` cycles (CWE-835) (#74)", "pub_date": "2026-04-14T22:52:51Z", "platforms": { "linux-x86_64": { "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVUakFVTzBFb0RYZ2dZR3MzYUJnSU0zNStUL0pSVkpuV2lBcXdRdUpGa0JMOStqYUFCNHB2ZjFoSXR0Zi81SFYwRTlxeWtueXJPWGp5WlVwQUFhemN1RHRFWjA3L3ZHdndZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzc2MjA2NjM5CWZpbGU6U2ltcGwgUmVzdWx0YXRfMC44LjBfYW1kNjQuZGViCmtQMWt5ZzY4WktFS0ZlWlo0bjJPU2ZXL3NiL0p4UUNrV3JTSzNCY3J0ZTQ3SGVTQjl6MEEzRllpYy9OZ3hZMVIxc3BNKzFPWWJJQ1pmTEpkUjU4SUF3PT0K", "url": "https://git.lacompagniemaximus.com/maximus/Simpl-Resultat/releases/download/v0.8.0/Simpl Resultat_0.8.0_amd64.deb" }, "windows-x86_64": { "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVUakFVTzBFb0RYZ2xDeDVrVXJoaGFEaENheWxuSENZZDQrUS90NzBraWpkOHlOdnRkL0hGUmlEalM5dXd5THcxbEpmSFphMy9jLy9icFVJWU1uU0NqeTdONkhRcjlOR2dnPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzc2MjA3MTY5CWZpbGU6U2ltcGwgUmVzdWx0YXRfMC44LjBfeDY0LXNldHVwLmV4ZQpJOW1CY1kyOHpoRzFtblpITGZxQlpuT0NZZ3VoNXJWZWQ5a3lyZDB6SEdGNkhzQ2tNcG9KTHIyM2N4Z2Y2MW5jRHFtVFJtVTJ1VGEyRktSODBhYW9DZz09Cg==", "url": "https://git.lacompagniemaximus.com/maximus/Simpl-Resultat/releases/download/v0.8.0/Simpl Resultat_0.8.0_x64-setup.exe" } } }