{ "version": "0.9.1", "notes": "### Added\n\n- Bilan: 4 starter accounts (Checking account, TFSA, RRSP, Non-registered account) are seeded for new profiles, and a one-shot opt-in modal proposes them to existing profiles on their first /balance visit. Default-checked checkboxes; existing accounts with the same name + category disable the matching row with a \"Already exists\" tooltip. Confirming or dismissing both write `user_preferences.balance_starter_proposed` so the modal never re-appears. ADR 0012 (Proposed) captures the future two-level vehicle × composition model (#179).\n\n### Changed\n\n- **Price-fetching activated** — `maximus-api` `/v1/prices` is live in production since 2026-05-05. The premium price-fetching feature shipped in 0.9.0 (#160) is now functionally available end-to-end (#161).\n- **Settings reorganized into 3 sub-pages** — the single 12-card `Settings` page is split into a hub (`/settings`) that links to three thematic sub-pages: `/settings/users` (accounts, licenses, user guide), `/settings/data` (categories, backup, price-fetch privacy) and `/settings/systems` (version, update, version history, logs + feedback). The user guide and changelog, previously full-page routes, are now embedded inside their parent sub-page; the legacy `/docs` and `/changelog` URLs redirect to keep external bookmarks and release-note links working. The token-store fallback security banner is now rendered once at the top of the settings layout, visible from every main settings sub-page (#190).\n- **App icon** — replaced the default Tauri scaffolding icon with a custom design: a robot-faced calculator with a privacy lock on the Enter / `=` key. Conveys the four product values — robot (assistant), simplicity (geometric shapes), accounting (calculator), privacy (lock). Source SVG kept at `src-tauri/icons/icon.svg` for future iterations; all 16 platform-specific raster sizes regenerated via `tauri icon`. Web favicon and window `` updated too (was *\"Tauri + React + Typescript\"* from the default scaffold).\n- Bilan: replaced empty /balance state with a 2-step onboarding card (Create an account → Enter a snapshot) so users no longer see a confusing \"no snapshot\" screen before any account exists. The \"+ New snapshot\" button is hidden until at least one account exists. The /balance/snapshot empty-state copy now clarifies what an account is vs. what a snapshot is (#178).\n\n### Fixed\n\n- Bilan: fix SQLite \"misuse of aggregate function MIN()\" error when loading /balance with existing snapshots; replaced aggregate-in-WHERE pattern with ROW_NUMBER() window function in getAccountsPeriodAnchor (#175).\n- Bilan: snapshot save now uses atomic BEGIN/COMMIT and validates all lines before any DB write, preventing orphan snapshot rows when validation fails. Migration v11 cleans existing orphans (#176).\n- Bilan: snapshot date picker on `/balance/snapshot` now closes after a date is selected on Linux (WebKitGTK), instead of staying open until the user pressed Esc. Workaround calls `blur()` on the input after each change — no-op on Windows WebView2 / macOS WKWebView, where the picker already auto-closes (#177).\n- Updated `postcss` dependency (8.5.6 → 8.5.13) to address moderate severity advisory GHSA-qx2v-qp2m-jg93 (XSS via unescaped `</style>` in CSS stringifier). Transitive via vite, build-time only — no runtime impact on the shipped Tauri binary (#180).\n- WebKitGTK date picker workaround extended to the remaining 7 native `<input type=\"date\">` fields across 4 components (Transactions filter bar, Adjustments form, Link Transfers modal, Period selector). Each onChange handler now calls `e.currentTarget.blur()` to dismiss the native popup on Linux Tauri WebView — no-op on Windows WebView2 / macOS WKWebView. Same approach as #177 (#188).\n- Bilan: post-merge cleanup of suggestions raised in the #182-#185 reviews. Six fixes bundled: (1) `getStarterCollisions` now filters `archived_at IS NULL` so re-creating a voluntarily archived starter is no longer blocked; (2) `proposeStarterAccounts` re-checks each (name, category) collision in-transaction before INSERT as defense-in-depth (skips silently on hit, no UNIQUE constraint added); (3) brand-new profiles now get `balance_starter_proposed` pre-seeded in `consolidated_schema.sql` so the StarterAccountsModal never briefly opens with all-collisions on first /balance visit; (4) `/balance` now hides the period selector, evolution chart and accounts table while the empty-state onboarding card is shown (avoids three stacked empty messages); (5) `BalanceOnboardingCard.Step` now calls `useTranslation()` directly instead of receiving `t` as a prop; (6) `return_calculator.rs` Modified Dietz formula doc block is wrapped in a `text` fence so `cargo test --doc` no longer fails to compile pseudo-math as Rust (#187).", "pub_date": "2026-05-11T01:06:28Z", "platforms": { "linux-x86_64": { "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVUakFVTzBFb0RYZ29meWloZ3J3RjZGUWhkdllNUms2NGI5R0t0WHlPSmNEQVNzN3BGK3E3cVlvVUtodUlhNTFaY2FBUlJUbXAyblRTeVdnejNoRjEwN1UySXhQZ1BXM0FzPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzc4NDYxMDMyCWZpbGU6U2ltcGwgUmVzdWx0YXRfMC45LjFfYW1kNjQuZGViClZzY3oyMFQyUms0U090ci9MT01qcWVjTFd1OVg2ZDBEUWpOVDFMblZNUHJPMjRjU2tsZGljaFhPWEgwTVhwTlJKWlRKSHRjTlVJcWNuTTlmYjNFakN3PT0K", "url": "https://git.lacompagniemaximus.com/maximus/Simpl-Resultat/releases/download/v0.9.1/Simpl Resultat_0.9.1_amd64.deb" }, "windows-x86_64": { "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVUakFVTzBFb0RYZ3RBbnFIN3BERXg5ZUdEVmprZmVkNWo1LzNhU0RzWEIwQk5DMUR2TTJzVm0xRDlra2FsOG9EbVREUE1Eem9OYWs4OXFqNzhtWGxMUjFaMTBvdkh2RGdRPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzc4NDYxNTg3CWZpbGU6U2ltcGwgUmVzdWx0YXRfMC45LjFfeDY0LXNldHVwLmV4ZQpORFY2WGFDZ0NqQTVUa2w0R3ZYTzB2RXc2SmJtMVF3dERuNFVEMFhmNW9HaTM5N0NFaW1LMGJ1UmU5ckpwRHY3emFablZJNHFaVkhyMW5NdXdKbWxEQT09Cg==", "url": "https://git.lacompagniemaximus.com/maximus/Simpl-Resultat/releases/download/v0.9.1/Simpl Resultat_0.9.1_x64-setup.exe" } } }